forked from bartvdbraak/blender
Final fix for #36905. Enforce redraw of window once before sampling.
Thanks to Brecht for the solution!
This commit is contained in:
parent
4f05cecbcd
commit
23612a8598
@ -936,11 +936,23 @@ static int sample_color_exec(bContext *C, wmOperator *op)
|
|||||||
Paint *paint = BKE_paint_get_active_from_context(C);
|
Paint *paint = BKE_paint_get_active_from_context(C);
|
||||||
Brush *brush = BKE_paint_brush(paint);
|
Brush *brush = BKE_paint_brush(paint);
|
||||||
ARegion *ar = CTX_wm_region(C);
|
ARegion *ar = CTX_wm_region(C);
|
||||||
|
wmWindow *win = CTX_wm_window(C);
|
||||||
|
bool show_cursor = ((paint->flags & PAINT_SHOW_BRUSH) != 0);
|
||||||
int location[2];
|
int location[2];
|
||||||
|
|
||||||
|
paint->flags &= ~PAINT_SHOW_BRUSH;
|
||||||
|
|
||||||
|
/* force redraw without cursor */
|
||||||
|
WM_paint_cursor_tag_redraw(win, ar);
|
||||||
|
WM_redraw_windows(C);
|
||||||
|
|
||||||
RNA_int_get_array(op->ptr, "location", location);
|
RNA_int_get_array(op->ptr, "location", location);
|
||||||
paint_sample_color(C, ar, location[0], location[1]);
|
paint_sample_color(C, ar, location[0], location[1]);
|
||||||
|
|
||||||
|
if(show_cursor) {
|
||||||
|
paint->flags |= PAINT_SHOW_BRUSH;
|
||||||
|
}
|
||||||
|
|
||||||
WM_event_add_notifier(C, NC_BRUSH | NA_EDITED, brush);
|
WM_event_add_notifier(C, NC_BRUSH | NA_EDITED, brush);
|
||||||
|
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
@ -950,14 +962,20 @@ static int sample_color_invoke(bContext *C, wmOperator *op, const wmEvent *event
|
|||||||
{
|
{
|
||||||
Paint *paint = BKE_paint_get_active_from_context(C);
|
Paint *paint = BKE_paint_get_active_from_context(C);
|
||||||
SampleColorData *data = MEM_mallocN(sizeof(SampleColorData), "sample color custom data");
|
SampleColorData *data = MEM_mallocN(sizeof(SampleColorData), "sample color custom data");
|
||||||
|
ARegion *ar = CTX_wm_region(C);
|
||||||
|
wmWindow *win = CTX_wm_window(C);
|
||||||
|
|
||||||
data->event_type = event->type;
|
data->event_type = event->type;
|
||||||
data->show_cursor = ((paint->flags & PAINT_SHOW_BRUSH) != 0);
|
data->show_cursor = ((paint->flags & PAINT_SHOW_BRUSH) != 0);
|
||||||
op->customdata = data;
|
op->customdata = data;
|
||||||
paint->flags &= ~PAINT_SHOW_BRUSH;
|
paint->flags &= ~PAINT_SHOW_BRUSH;
|
||||||
|
|
||||||
|
/* force redraw without cursor */
|
||||||
|
WM_paint_cursor_tag_redraw(win, ar);
|
||||||
|
WM_redraw_windows(C);
|
||||||
|
|
||||||
RNA_int_set_array(op->ptr, "location", event->mval);
|
RNA_int_set_array(op->ptr, "location", event->mval);
|
||||||
sample_color_exec(C, op);
|
paint_sample_color(C, ar, event->mval[0], event->mval[1]);
|
||||||
|
|
||||||
WM_event_add_modal_handler(C, op);
|
WM_event_add_modal_handler(C, op);
|
||||||
|
|
||||||
@ -967,10 +985,10 @@ static int sample_color_invoke(bContext *C, wmOperator *op, const wmEvent *event
|
|||||||
static int sample_color_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
static int sample_color_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
||||||
{
|
{
|
||||||
SampleColorData *data = op->customdata;
|
SampleColorData *data = op->customdata;
|
||||||
|
Paint *paint = BKE_paint_get_active_from_context(C);
|
||||||
|
Brush *brush = BKE_paint_brush(paint);
|
||||||
|
|
||||||
if ((event->type == data->event_type) && (event->val == KM_RELEASE)) {
|
if ((event->type == data->event_type) && (event->val == KM_RELEASE)) {
|
||||||
Paint *paint = BKE_paint_get_active_from_context(C);
|
|
||||||
|
|
||||||
if(data->show_cursor) {
|
if(data->show_cursor) {
|
||||||
paint->flags |= PAINT_SHOW_BRUSH;
|
paint->flags |= PAINT_SHOW_BRUSH;
|
||||||
}
|
}
|
||||||
@ -981,9 +999,13 @@ static int sample_color_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||||||
|
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
case MOUSEMOVE:
|
case MOUSEMOVE:
|
||||||
|
{
|
||||||
|
ARegion *ar = CTX_wm_region(C);
|
||||||
RNA_int_set_array(op->ptr, "location", event->mval);
|
RNA_int_set_array(op->ptr, "location", event->mval);
|
||||||
sample_color_exec(C, op);
|
paint_sample_color(C, ar, event->mval[0], event->mval[1]);
|
||||||
|
WM_event_add_notifier(C, NC_BRUSH | NA_EDITED, brush);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return OPERATOR_RUNNING_MODAL;
|
return OPERATOR_RUNNING_MODAL;
|
||||||
|
Loading…
Reference in New Issue
Block a user