Eyedropper: Reset property on cancel and add enter to confirm
This commit is contained in:
parent
a19c278551
commit
509270ee61
Notes:
blender-bot
2023-02-14 08:09:01 +01:00
Referenced by issue #47729, Failed linking node sockets by Shortcut
Referenced by issue #47677, Text Object Outline fails to daplay
Referenced by issue #47642, 2.77 hash 509270e
Crash when Cycles Baking
Referenced by issue #47652, BI: Viewport preview fails updating in Texture shading mode
Referenced by issue #47653, Select Loop Inner-Region issue
Referenced by issue #47638, Auto smooth angle value
|
@ -75,7 +75,7 @@
|
|||
* \{ */
|
||||
|
||||
enum {
|
||||
EYE_MODAL_CANCEL = 1, /* XXX actually does same as confirming */
|
||||
EYE_MODAL_CANCEL = 1,
|
||||
EYE_MODAL_SAMPLE_CONFIRM,
|
||||
EYE_MODAL_SAMPLE_BEGIN,
|
||||
EYE_MODAL_SAMPLE_RESET,
|
||||
|
@ -102,6 +102,8 @@ wmKeyMap *eyedropper_modal_keymap(wmKeyConfig *keyconf)
|
|||
/* items for modal map */
|
||||
WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, EYE_MODAL_CANCEL);
|
||||
WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_PRESS, KM_ANY, 0, EYE_MODAL_CANCEL);
|
||||
WM_modalkeymap_add_item(keymap, RETKEY, KM_RELEASE, KM_ANY, 0, EYE_MODAL_SAMPLE_CONFIRM);
|
||||
WM_modalkeymap_add_item(keymap, PADENTER, KM_RELEASE, KM_ANY, 0, EYE_MODAL_SAMPLE_CONFIRM);
|
||||
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_ANY, 0, EYE_MODAL_SAMPLE_CONFIRM);
|
||||
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, EYE_MODAL_SAMPLE_BEGIN);
|
||||
WM_modalkeymap_add_item(keymap, SPACEKEY, KM_RELEASE, KM_ANY, 0, EYE_MODAL_SAMPLE_RESET);
|
||||
|
@ -164,6 +166,8 @@ typedef struct Eyedropper {
|
|||
PropertyRNA *prop;
|
||||
int index;
|
||||
|
||||
float init_col[3]; /* for resetting on cancel */
|
||||
|
||||
bool accum_start; /* has mouse been presed */
|
||||
float accum_col[3];
|
||||
int accum_tot;
|
||||
|
@ -189,9 +193,17 @@ static bool eyedropper_init(bContext *C, wmOperator *op)
|
|||
|
||||
if (RNA_property_subtype(eye->prop) == PROP_COLOR) {
|
||||
const char *display_device;
|
||||
float col[4];
|
||||
|
||||
display_device = scene->display_settings.display_device;
|
||||
eye->display = IMB_colormanagement_display_get_named(display_device);
|
||||
|
||||
/* store inital color */
|
||||
RNA_property_float_get_array(&eye->ptr, eye->prop, col);
|
||||
if (eye->display) {
|
||||
IMB_colormanagement_scene_linear_to_display_v3(col, eye->display);
|
||||
}
|
||||
copy_v3_v3(eye->init_col, col);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -207,11 +219,6 @@ static void eyedropper_exit(bContext *C, wmOperator *op)
|
|||
}
|
||||
}
|
||||
|
||||
static void eyedropper_cancel(bContext *C, wmOperator *op)
|
||||
{
|
||||
eyedropper_exit(C, op);
|
||||
}
|
||||
|
||||
/* *** eyedropper_color_ helper functions *** */
|
||||
|
||||
/**
|
||||
|
@ -318,6 +325,13 @@ static void eyedropper_color_sample_accum(bContext *C, Eyedropper *eye, int mx,
|
|||
eye->accum_tot++;
|
||||
}
|
||||
|
||||
static void eyedropper_cancel(bContext *C, wmOperator *op)
|
||||
{
|
||||
Eyedropper *eye = op->customdata;
|
||||
eyedropper_color_set(C, eye, eye->init_col);
|
||||
eyedropper_exit(C, op);
|
||||
}
|
||||
|
||||
/* main modal status check */
|
||||
static int eyedropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
{
|
||||
|
@ -441,6 +455,8 @@ typedef struct DataDropper {
|
|||
short idcode;
|
||||
const char *idcode_name;
|
||||
|
||||
ID *init_id; /* for resetting on cancel */
|
||||
|
||||
ARegionType *art;
|
||||
void *draw_handle_pixel;
|
||||
char name[200];
|
||||
|
@ -487,6 +503,9 @@ static int datadropper_init(bContext *C, wmOperator *op)
|
|||
/* Note we can translate here (instead of on draw time), because this struct has very short lifetime. */
|
||||
ddr->idcode_name = TIP_(BKE_idcode_to_name(ddr->idcode));
|
||||
|
||||
PointerRNA ptr = RNA_property_pointer_get(&ddr->ptr, ddr->prop);
|
||||
ddr->init_id = ptr.id.data;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -509,11 +528,6 @@ static void datadropper_exit(bContext *C, wmOperator *op)
|
|||
WM_event_add_mousemove(C);
|
||||
}
|
||||
|
||||
static void datadropper_cancel(bContext *C, wmOperator *op)
|
||||
{
|
||||
datadropper_exit(C, op);
|
||||
}
|
||||
|
||||
/* *** datadropper id helper functions *** */
|
||||
/**
|
||||
* \brief get the ID from the screen.
|
||||
|
@ -602,6 +616,13 @@ static bool datadropper_id_sample(bContext *C, DataDropper *ddr, int mx, int my)
|
|||
return datadropper_id_set(C, ddr, id);
|
||||
}
|
||||
|
||||
static void datadropper_cancel(bContext *C, wmOperator *op)
|
||||
{
|
||||
DataDropper *ddr = op->customdata;
|
||||
datadropper_id_set(C, ddr, ddr->init_id);
|
||||
datadropper_exit(C, op);
|
||||
}
|
||||
|
||||
/* main modal status check */
|
||||
static int datadropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
{
|
||||
|
@ -712,6 +733,8 @@ typedef struct DepthDropper {
|
|||
PointerRNA ptr;
|
||||
PropertyRNA *prop;
|
||||
|
||||
float init_depth; /* for resetting on cancel */
|
||||
|
||||
bool accum_start; /* has mouse been presed */
|
||||
float accum_depth;
|
||||
int accum_tot;
|
||||
|
@ -766,6 +789,7 @@ static int depthdropper_init(bContext *C, wmOperator *op)
|
|||
|
||||
ddr->art = art;
|
||||
ddr->draw_handle_pixel = ED_region_draw_cb_activate(art, depthdropper_draw_cb, ddr, REGION_DRAW_POST_PIXEL);
|
||||
ddr->init_depth = RNA_property_float_get(&ddr->ptr, ddr->prop);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -787,11 +811,6 @@ static void depthdropper_exit(bContext *C, wmOperator *op)
|
|||
}
|
||||
}
|
||||
|
||||
static void depthdropper_cancel(bContext *C, wmOperator *op)
|
||||
{
|
||||
depthdropper_exit(C, op);
|
||||
}
|
||||
|
||||
/* *** depthdropper id helper functions *** */
|
||||
/**
|
||||
* \brief get the ID from the screen.
|
||||
|
@ -896,6 +915,13 @@ static void depthdropper_depth_sample_accum(bContext *C, DepthDropper *ddr, int
|
|||
}
|
||||
}
|
||||
|
||||
static void depthdropper_cancel(bContext *C, wmOperator *op)
|
||||
{
|
||||
DepthDropper *ddr = op->customdata;
|
||||
depthdropper_depth_set(C, ddr, ddr->init_depth);
|
||||
depthdropper_exit(C, op);
|
||||
}
|
||||
|
||||
/* main modal status check */
|
||||
static int depthdropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue