Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Eisel <eiseljulian@gmail.com>2016-03-01 01:00:14 +0300
committerJulian Eisel <eiseljulian@gmail.com>2016-03-01 01:02:40 +0300
commit509270ee613d2e34b8bd6018aca0dc9fe01f0c38 (patch)
tree9728908b10bae4fbbae05dd39b7b51ba85837e99 /source/blender/editors/interface/interface_eyedropper.c
parenta19c278551b8d23e2255479ca0e03d54ecc2388d (diff)
Eyedropper: Reset property on cancel and add enter to confirm
Diffstat (limited to 'source/blender/editors/interface/interface_eyedropper.c')
-rw-r--r--source/blender/editors/interface/interface_eyedropper.c58
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)
{