diff options
author | Julian Eisel <eiseljulian@gmail.com> | 2016-03-01 01:00:14 +0300 |
---|---|---|
committer | Julian Eisel <eiseljulian@gmail.com> | 2016-03-01 01:02:40 +0300 |
commit | 509270ee613d2e34b8bd6018aca0dc9fe01f0c38 (patch) | |
tree | 9728908b10bae4fbbae05dd39b7b51ba85837e99 /source/blender | |
parent | a19c278551b8d23e2255479ca0e03d54ecc2388d (diff) |
Eyedropper: Reset property on cancel and add enter to confirm
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/interface/interface_eyedropper.c | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/source/blender/editors/interface/interface_eyedropper.c b/source/blender/editors/interface/interface_eyedropper.c index 6366ec5aebb..54649f313f7 100644 --- a/source/blender/editors/interface/interface_eyedropper.c +++ b/source/blender/editors/interface/interface_eyedropper.c @@ -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) { |