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:
authorCampbell Barton <ideasman42@gmail.com>2019-03-07 16:36:48 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-07 16:43:20 +0300
commit90f4ff95ed3a08047cac7eed0119424d14cb82ba (patch)
treef7c1afddc81badb040c628657ad3ef915838a6b5 /source/blender/editors/space_image
parent1b49c7fdd1f0a9f4532593207ce6be775dc8581c (diff)
Image: use sample size instead of radius
It wasn't possible to sample a 2x2 region.
Diffstat (limited to 'source/blender/editors/space_image')
-rw-r--r--source/blender/editors/space_image/image_ops.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 2757fc4e827..865f4be5d5b 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -2875,7 +2875,7 @@ typedef struct ImageSampleInfo {
int channels;
int width, height;
- int sample_radius;
+ int sample_size;
unsigned char col[4];
float colf[4];
@@ -2905,7 +2905,7 @@ static void image_sample_draw(const bContext *C, ARegion *ar, void *arg_info)
scene, ar, info->color_manage, info->use_default_view, info->channels,
info->x, info->y, info->colp, info->colfp, info->linearcol, info->zp, info->zfp);
- if (info->sample_radius) {
+ if (info->sample_size > 1) {
const wmWindow *win = CTX_wm_window(C);
const wmEvent *event = win->eventstate;
@@ -2917,11 +2917,12 @@ static void image_sample_draw(const bContext *C, ARegion *ar, void *arg_info)
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
immUniformColor3fv(color);
+ /* TODO(campbell): lock to pixels. */
rctf sample_rect_fl;
BLI_rctf_init_pt_radius(
&sample_rect_fl,
(float[2]){event->x - ar->winrct.xmin, event->y - ar->winrct.ymin},
- info->sample_radius * sima->zoom);
+ (float)(info->sample_size / 2.0f) * sima->zoom);
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(GL_XOR);
@@ -3098,10 +3099,10 @@ static void image_sample_apply(bContext *C, wmOperator *op, const wmEvent *event
info->use_default_view = (image->flag & IMA_VIEW_AS_RENDER) ? false : true;
rcti sample_rect;
- BLI_rcti_init_pt_radius(&sample_rect, (int[2]){x, y}, info->sample_radius);
- BLI_rcti_isect(
- &(rcti){ .xmin = 0, .ymin = 0, .xmax = ibuf->x - 1, .ymax = ibuf->y - 1},
- &sample_rect, &sample_rect);
+ sample_rect.xmin = max_ii(0, x - info->sample_size / 2);
+ sample_rect.ymin = max_ii(0, y - info->sample_size / 2);
+ sample_rect.xmax = min_ii(ibuf->x, sample_rect.xmin + info->sample_size) - 1;
+ sample_rect.ymax = min_ii(ibuf->y, sample_rect.ymin + info->sample_size) - 1;
if (ibuf->rect) {
image_sample_rect_color_ubyte(ibuf, &sample_rect, info->col, info->linearcol);
@@ -3217,7 +3218,7 @@ static int image_sample_invoke(bContext *C, wmOperator *op, const wmEvent *event
info->art = ar->type;
info->draw_handle = ED_region_draw_cb_activate(ar->type, image_sample_draw, info, REGION_DRAW_POST_PIXEL);
- info->sample_radius = RNA_int_get(op->ptr, "radius");
+ info->sample_size = RNA_int_get(op->ptr, "size");
op->customdata = info;
image_sample_apply(C, op, event);
@@ -3267,7 +3268,7 @@ void IMAGE_OT_sample(wmOperatorType *ot)
ot->flag = OPTYPE_BLOCKING;
PropertyRNA *prop;
- prop = RNA_def_int(ot->srna, "radius", 0, 0, 64, "Radius", "", 0, 32);
+ prop = RNA_def_int(ot->srna, "size", 1, 1, 128, "Sample Size", "", 1, 64);
RNA_def_property_subtype(prop, PROP_PIXEL);
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}