Commit: efe41cecfccd069f8d294105cab62e88c3bbd49c
Author: Antonio Vazquez
Date:   Sat Jan 13 19:04:46 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBefe41cecfccd069f8d294105cab62e88c3bbd49c

Avoid colorpicker window outside view area

Some minor changes too.

===================================================================

M       source/blender/editors/gpencil/gpencil_colorpick.c

===================================================================

diff --git a/source/blender/editors/gpencil/gpencil_colorpick.c 
b/source/blender/editors/gpencil/gpencil_colorpick.c
index 837063fad27..f76f17811fe 100644
--- a/source/blender/editors/gpencil/gpencil_colorpick.c
+++ b/source/blender/editors/gpencil/gpencil_colorpick.c
@@ -288,6 +288,24 @@ static int gpencil_colorpick_poll(bContext *C)
        return 0;
 }
 
+static int get_tot_colors(tGPDpick *tgpk)
+{
+       int tot = 0;
+       for (PaletteColor *palcol = tgpk->palette->colors.first; palcol; palcol 
= palcol->next) {
+
+               /* Must use a color with fill with fill brushes */
+               if (tgpk->brush->flag & GP_BRUSH_FILL_ONLY) {
+                       if ((palcol->fill[3] < GPENCIL_ALPHA_OPACITY_THRESH) &&
+                               ((tgpk->brush->flag & 
GP_BRUSH_FILL_ALLOW_STROKEONLY) == 0))
+                       {
+                               continue;
+                       }
+               }
+               tot++;
+       }
+       return tot;
+}
+
 /* Allocate memory and initialize values */
 static tGPDpick *gp_session_init_colorpick(bContext *C, wmOperator *op, const 
wmEvent *event)
 {
@@ -320,7 +338,7 @@ static tGPDpick *gp_session_init_colorpick(bContext *C, 
wmOperator *op, const wm
        tgpk->palette = palslot->palette;
 
        /* allocate color table */
-       tgpk->totcolor = BLI_listbase_count(&tgpk->palette->colors);
+       tgpk->totcolor = get_tot_colors(tgpk);
        if (tgpk->totcolor > 0) {
                tgpk->colors = MEM_callocN(sizeof(tGPDpickColor) * 
tgpk->totcolor, "gp_colorpicker");
        }
@@ -331,6 +349,9 @@ static tGPDpick *gp_session_init_colorpick(bContext *C, 
wmOperator *op, const wm
 
        /* get number of rows and columns */
        tgpk->row = (tgpk->rect.ymax - tgpk->rect.ymin - GP_BOX_GAP) / 
(tgpk->boxsize[1] + GP_BOX_GAP);
+       if (tgpk->row > tgpk->totcolor) {
+               tgpk->row = tgpk->totcolor;
+       }
        CLAMP(tgpk->row, 1, 6);
        tgpk->col = tgpk->totcolor / tgpk->row;
        if (tgpk->totcolor % tgpk->row > 0) {
@@ -339,11 +360,30 @@ static tGPDpick *gp_session_init_colorpick(bContext *C, 
wmOperator *op, const wm
        CLAMP_MIN(tgpk->col, 1);
 
        /* define panel size */
-       tgpk->panel.xmin = tgpk->center[0] - ((GP_BOX_SIZE * tgpk->col) + 
(GP_BOX_GAP * (tgpk->col + 1)) / 2);
-       tgpk->panel.ymin = tgpk->center[1] - ((GP_BOX_SIZE * tgpk->row) + 
(GP_BOX_GAP * (tgpk->row + 1)) / 2);
+       int width = (GP_BOX_SIZE * tgpk->col) + (GP_BOX_GAP * (tgpk->col + 1));
+       int height = (GP_BOX_SIZE * tgpk->row) + (GP_BOX_GAP * (tgpk->row + 1));
+       tgpk->panel.xmin = tgpk->center[0] - (width / 2) + tgpk->rect.xmin;
+       tgpk->panel.ymin = tgpk->center[1] - (height / 2) + tgpk->rect.ymin;
+
+       /* center in visible area */
+       if (tgpk->panel.xmin < tgpk->rect.xmin) {
+               tgpk->panel.xmin = tgpk->rect.xmin;
+       }
+       if (tgpk->panel.ymin < tgpk->rect.ymin) {
+               tgpk->panel.ymin = tgpk->rect.ymin;
+       }
+
+       tgpk->panel.xmax = tgpk->panel.xmin + width;
+       tgpk->panel.ymax = tgpk->panel.ymin + height;
 
-       tgpk->panel.xmax = tgpk->panel.xmin + (GP_BOX_SIZE * tgpk->col) + 
(GP_BOX_GAP * (tgpk->col + 1));
-       tgpk->panel.ymax = tgpk->panel.ymin + (GP_BOX_SIZE * tgpk->row) + 
(GP_BOX_GAP * (tgpk->row + 1));
+       if (tgpk->panel.xmax > tgpk->rect.xmax) {
+               tgpk->panel.xmin = tgpk->rect.xmax - width;
+               tgpk->panel.xmax = tgpk->panel.xmin + width;
+       }
+       if (tgpk->panel.ymax > tgpk->rect.ymax) {
+               tgpk->panel.ymin = tgpk->rect.ymax - height;
+               tgpk->panel.ymax = tgpk->panel.ymin + height;
+       }
 
        /* load color table */
        tGPDpickColor *tcolor = tgpk->colors;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to