Commit: e20cbe29f9232f3d8b9b4a82f9c98e715c99a517
Author: Antonio Vazquez
Date:   Thu Apr 26 10:31:28 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rBe20cbe29f9232f3d8b9b4a82f9c98e715c99a517

WIP: Convert old palette operators

These operators are used to manage the strokes lock and hide.

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

M       release/scripts/startup/bl_ui/properties_grease_pencil_common.py
M       release/scripts/startup/bl_ui/properties_material_gpencil.py
M       release/scripts/startup/bl_ui/space_view3d_toolbar.py
M       source/blender/editors/gpencil/gpencil_data.c
M       source/blender/editors/gpencil/gpencil_intern.h
M       source/blender/editors/gpencil/gpencil_ops.c

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

diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py 
b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index 1e5656557d9..1c18bd8703b 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -608,6 +608,7 @@ class GPENCIL_MT_gpencil_edit_specials(Menu):
             layout.separator()
             layout.operator("gpencil.reproject")
 
+
 class GPENCIL_MT_gpencil_sculpt_specials(Menu):
     bl_label = "GPencil Specials"
 
@@ -783,41 +784,29 @@ class GPENCIL_MT_brush_specials(Menu):
         layout.operator("gpencil.brush_presets_create", icon='HELP', 
text="Create a Set of Predefined Brushes")
 
 
-class GPENCIL_MT_palettecolor_duplicate(Menu):
-    bl_label = "Duplicate"
-
-    def draw(self, context):
-        layout = self.layout
-
-        layout.operator_enum("palette.palettecolor_duplicate", "type")
-
-
-class GPENCIL_MT_palettecolor_specials(Menu):
+class GPENCIL_MT_color_specials(Menu):
     bl_label = "Layer"
 
     def draw(self, context):
         layout = self.layout
 
-        layout.operator("palette.palettecolor_reveal", 
icon='RESTRICT_VIEW_OFF', text="Show All")
-        layout.operator("palette.palettecolor_hide", icon='RESTRICT_VIEW_ON', 
text="Hide Others").unselected = True
+        layout.operator("gpencil.color_reveal", icon='RESTRICT_VIEW_OFF', 
text="Show All")
+        layout.operator("gpencil.color_hide", icon='RESTRICT_VIEW_ON', 
text="Hide Others").unselected = True
 
         layout.separator()
 
-        layout.operator("palette.palettecolor_lock_all", icon='LOCKED', 
text="Lock All")
-        layout.operator("palette.palettecolor_unlock_all", icon='UNLOCKED', 
text="UnLock All")
-
-        layout.separator()
-        layout.menu("GPENCIL_MT_palettecolor_duplicate", icon='PASTEDOWN', 
text="Duplicate")
+        layout.operator("gpencil.color_lock_all", icon='LOCKED', text="Lock 
All")
+        layout.operator("gpencil.color_unlock_all", icon='UNLOCKED', 
text="UnLock All")
 
         layout.separator()
 
-        layout.operator("palette.palettecolor_select", icon='COLOR', 
text="Select Strokes")
+        layout.operator("gpencil.color_select", icon='COLOR', text="Select 
Strokes")
         layout.operator("gpencil.stroke_change_color", icon='MAN_TRANS', 
text="Move to Color")
 
         layout.separator()
 
         layout.operator("gpencil.stroke_lock_color", icon='BORDER_RECT', 
text="Lock Unselected")
-        layout.operator("palette.lock_layer", icon='COLOR', text="Lock Unused")
+        layout.operator("gpencil.lock_layer", icon='COLOR', text="Lock Unused")
 
 
 class GreasePencilDataPanel:
@@ -1126,8 +1115,7 @@ classes = (
     GPENCIL_UL_layer,
     GPENCIL_MT_layer_specials,
     GPENCIL_MT_brush_specials,
-    GPENCIL_MT_palettecolor_specials,
-    GPENCIL_MT_palettecolor_duplicate,
+    GPENCIL_MT_color_specials,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/release/scripts/startup/bl_ui/properties_material_gpencil.py 
b/release/scripts/startup/bl_ui/properties_material_gpencil.py
index 67ab780bd55..55ba2246532 100644
--- a/release/scripts/startup/bl_ui/properties_material_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_material_gpencil.py
@@ -89,7 +89,7 @@ class MATERIAL_PT_gpencil_slots(Panel):
             col.operator("object.material_slot_add", icon='ZOOMIN', text="")
             col.operator("object.material_slot_remove", icon='ZOOMOUT', 
text="")
 
-            col.menu("GPENCIL_MT_palettecolor_specials", icon='DOWNARROW_HLT', 
text="")
+            col.menu("GPENCIL_MT_color_specials", icon='DOWNARROW_HLT', 
text="")
 
             if is_sortable:
                 col.separator()
@@ -100,8 +100,8 @@ class MATERIAL_PT_gpencil_slots(Panel):
                 col.separator()
 
                 sub = col.column(align=True)
-                sub.operator("palette.palettecolor_isolate", icon='LOCKED', 
text="").affect_visibility = False
-                sub.operator("palette.palettecolor_isolate", 
icon='RESTRICT_VIEW_OFF', text="").affect_visibility = True
+                sub.operator("gpencil.color_isolate", icon='LOCKED', 
text="").affect_visibility = False
+                sub.operator("gpencil.color_isolate", 
icon='RESTRICT_VIEW_OFF', text="").affect_visibility = True
 
         split = layout.split(percentage=0.65)
 
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py 
b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 1c99ce59df5..b6958df6471 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -2079,10 +2079,7 @@ class VIEW3D_PT_tools_grease_pencil_brush(Panel):
                 row.prop(brush, "use_strength_pressure", text="", 
icon='STYLUS_PRESSURE')
 
                 row = layout.row(align=True)
-                row.template_ID(brush, "palette")
-                if brush.palette:
-                    row = layout.row(align=True)
-                    row.prop_search(brush, "colorname", brush.palette, 
"colors", text="Color", icon="LAYER_ACTIVE")
+                row.template_ID(brush, "material")
 
             if brush.gpencil_brush_type == 'FILL':
                 col = layout.column(align=True)
diff --git a/source/blender/editors/gpencil/gpencil_data.c 
b/source/blender/editors/gpencil/gpencil_data.c
index da41acd998e..d6596037913 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -1171,7 +1171,7 @@ static int gp_stroke_lock_color_exec(bContext *C, 
wmOperator *UNUSED(op))
                return OPERATOR_CANCELLED;
 
        /* first lock all colors */
-       for (int i = 0; i < totcol; i++) {
+       for (short i = 0; i < *totcol; i++) {
                Material *tmp = (*matar)[i];
                tmp->gpcolor->flag |= GPC_COLOR_LOCKED;
 
@@ -1966,3 +1966,443 @@ int ED_gpencil_join_objects_exec(bContext *C, 
wmOperator *op)
        return OPERATOR_FINISHED;
 }
 
+/* Color Handle operator */
+static int gpencil_active_color_poll(bContext *C)
+{
+       Object *ob = CTX_data_active_object(C);
+       short *totcolp;
+       if (ob) {
+               totcolp = give_totcolp(ob);
+       }
+       return ((ED_gpencil_data_get_active(C) != NULL) && (totcolp > 0));
+}
+
+
+/* ******************* Lock and hide any color non used in current layer 
************************** */
+static int gpencil_lock_layer_exec(bContext *C, wmOperator *UNUSED(op))
+{
+       bGPdata *gpd = ED_gpencil_data_get_active(C);
+       Object *ob = CTX_data_active_object(C);
+       GpencilColorData *gpcolor = NULL;
+
+       /* sanity checks */
+       if (ELEM(NULL, gpd))
+               return OPERATOR_CANCELLED;
+
+       /* first lock and hide all colors */
+       Material *mat = NULL;
+       Material ***matar = give_matarar(ob);
+       short *totcol = give_totcolp(ob);
+       if ((totcol == 0) || (matar == NULL))
+               return OPERATOR_CANCELLED;
+
+       for (short i = 0; i < *totcol; i++) {
+               mat = (*matar)[i];
+               gpcolor = mat->gpcolor;
+               gpcolor->flag |= GPC_COLOR_LOCKED;
+               gpcolor->flag |= GPC_COLOR_HIDE;
+       }
+
+       /* loop all selected strokes and unlock any color used in active layer 
*/
+       for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+               /* only editable and visible layers are considered */
+               if (gpencil_layer_is_editable(gpl) && (gpl->actframe != NULL) 
&& (gpl->flag & GP_LAYER_ACTIVE)) {
+                       for (bGPDstroke *gps = gpl->actframe->strokes.last; 
gps; gps = gps->prev) {
+                               /* skip strokes that are invalid for current 
view */
+                               if (ED_gpencil_stroke_can_use(C, gps) == false)
+                                       continue;
+
+                               gpcolor = BKE_material_gpencil_settings_get(ob, 
gps->mat_nr + 1);
+                               /* unlock/unhide color if not unlocked before */
+                               if (gpcolor != NULL) {
+                                       gpcolor->flag &= ~GPC_COLOR_LOCKED;
+                                       gpcolor->flag &= ~GPC_COLOR_HIDE;
+                               }
+                       }
+               }
+       }
+       /* notifiers */
+       BKE_gpencil_batch_cache_dirty(gpd);
+       WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
+
+       return OPERATOR_FINISHED;
+}
+
+void GPENCIL_OT_lock_layer(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "Disable Unused Layer Colors";
+       ot->idname = "GPENCIL_OT_lock_layer";
+       ot->description = "Lock and hide any color not used in any layer";
+
+       /* api callbacks */
+       ot->exec = gpencil_lock_layer_exec;
+       ot->poll = gp_active_layer_poll;
+}
+
+/* ********************** Isolate gpencil_ color **************************** 
*/
+
+static int gpencil_color_isolate_exec(bContext *C, wmOperator *op)
+{
+       bGPdata *gpd = ED_gpencil_data_get_active(C);
+       Object *ob = CTX_data_active_object(C);
+       Material *active_mat = give_current_material(ob, ob->actcol + 1);
+       GpencilColorData *active_color = BKE_material_gpencil_settings_get(ob, 
ob->actcol + 1);
+       GpencilColorData *gpcolor;
+
+       int flags = GPC_COLOR_LOCKED;
+       bool isolate = false;
+
+       if (RNA_boolean_get(op->ptr, "affect_visibility"))
+               flags |= GPC_COLOR_HIDE;
+
+       if (ELEM(NULL, gpd, active_color)) {
+               BKE_report(op->reports, RPT_ERROR, "No active color to 
isolate");
+               return OPERATOR_CANCELLED;
+       }
+
+       /* Test whether to isolate or clear all flags */
+       Material *mat = NULL;
+       Material ***matar = give_matarar(ob);
+       short *totcol = give_totcolp(ob);
+       for (short i = 0; i < *totcol; i++) {
+               mat = (*matar)[i];
+               /* Skip if this is the active one */
+               if (mat == active_mat)
+                       continue;
+
+               /* If the flags aren't set, that means that the color is
+               * not alone, so we have some colors to isolate still
+               */
+               gpcolor = mat->gpcolor;
+               if ((gpcolor->flag & flags) == 0) {
+                       isolate = true;
+                       break;
+               }
+       }
+
+       /* Set/Clear flags as appropriate */
+       if (isolate) {
+               /* Set flags on all "other" colors */
+               for (short i = 0; i < *totcol; i++) {
+                       mat = (*matar)[i];
+                       gpcolor = mat->gpcolor;
+                       if (gpcolor == active_color)
+                               continue;
+                       else
+                               gpcolor->flag |= flags;
+               }
+       }
+       else {
+               /* Clear flags - Restore everything else */
+               for (short i = 0; i < *totcol; i++) {
+                       mat = (*matar)[i];
+                       gpcolor = mat->gpcolor;
+                       gpcolor->flag &= ~flags;
+               }
+       }
+
+       /* notifiers */
+       DEG_id_tag_update(&gpd->id, OB_RECALC_DATA);
+       WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
+
+       return OPERATOR_FINISHED;
+}
+
+void GPENCIL_OT_color_isolate(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "Isolate C

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to