[Bf-blender-cvs] [4464b994654] modifier-panels-ui: Grease pencil modifier drag and drop, expansion saving

Hans Goudey noreply at git.blender.org
Tue Apr 28 21:53:08 CEST 2020


Commit: 4464b9946547920eb6519ea28d37ab25b44c5129
Author: Hans Goudey
Date:   Mon Apr 27 19:06:53 2020 -0500
Branches: modifier-panels-ui
https://developer.blender.org/rB4464b9946547920eb6519ea28d37ab25b44c5129

Grease pencil modifier drag and drop, expansion saving

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

M	source/blender/blenkernel/intern/gpencil_modifier.c
M	source/blender/blenloader/intern/versioning_290.c
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/object_gpencil_modifier.c
M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_ops.c
M	source/blender/gpencil_modifiers/intern/MOD_ui_common.c
M	source/blender/makesdna/DNA_gpencil_modifier_types.h
M	source/blender/makesrna/intern/rna_gpencil_modifier.c

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

diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index a8e05cfe914..d07c81e7835 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -428,9 +428,9 @@ GpencilModifierData *BKE_gpencil_modifier_new(int type)
   BLI_strncpy(md->name, DATA_(mti->name), sizeof(md->name));
 
   md->type = type;
-  md->mode = eGpencilModifierMode_Realtime | eGpencilModifierMode_Render |
-             eGpencilModifierMode_Expanded;
+  md->mode = eGpencilModifierMode_Realtime | eGpencilModifierMode_Render;
   md->flag = eGpencilModifierFlag_OverrideLibrary_Local;
+  md->ui_expand_flag = 1; /* Only expand the parent panel at first. */
 
   if (mti->flags & eGpencilModifierTypeFlag_EnableInEditmode) {
     md->mode |= eGpencilModifierMode_Editmode;
diff --git a/source/blender/blenloader/intern/versioning_290.c b/source/blender/blenloader/intern/versioning_290.c
index 803ef64ec99..66273b34e8a 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -25,6 +25,7 @@
 
 #include "DNA_constraint_types.h"
 #include "DNA_genfile.h"
+#include "DNA_gpencil_modifier_types.h"
 #include "DNA_modifier_types.h"
 #include "DNA_screen_types.h"
 
@@ -92,5 +93,20 @@ void blo_do_versions_290(FileData *fd, Library *UNUSED(lib), Main *bmain)
         }
       }
     }
+
+    /* Transition to saving expansion for all of grease pencil modifier's subpanels. */
+    if (!DNA_struct_elem_find(
+            fd->filesdna, "ThickGpencilModifierData", "short", "ui_expand_flag")) {
+      for (Object *object = bmain->objects.first; object != NULL; object = object->id.next) {
+        LISTBASE_FOREACH (GpencilModifierData *, md, &object->greasepencil_modifiers) {
+          if (md->mode & eGpencilModifierMode_Expanded_DEPRECATED) {
+            md->ui_expand_flag = 1;
+          }
+          else {
+            md->ui_expand_flag = 0;
+          }
+        }
+      }
+    }
   }
 }
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 2c06f068d19..7cfcbf14d5b 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -410,6 +410,10 @@ int ED_object_gpencil_modifier_move_down(struct ReportList *reports,
 int ED_object_gpencil_modifier_move_up(struct ReportList *reports,
                                        struct Object *ob,
                                        struct GpencilModifierData *md);
+bool ED_object_gpencil_modifier_move_to_index(struct ReportList *reports,
+                                              struct Object *ob,
+                                              struct GpencilModifierData *md,
+                                              const int index);
 int ED_object_gpencil_modifier_apply(struct Main *bmain,
                                      struct ReportList *reports,
                                      struct Depsgraph *depsgraph,
diff --git a/source/blender/editors/object/object_gpencil_modifier.c b/source/blender/editors/object/object_gpencil_modifier.c
index 5bf5c4bd95a..ab2405c794c 100644
--- a/source/blender/editors/object/object_gpencil_modifier.c
+++ b/source/blender/editors/object/object_gpencil_modifier.c
@@ -211,6 +211,40 @@ int ED_object_gpencil_modifier_move_down(ReportList *UNUSED(reports),
   return 1;
 }
 
+bool ED_object_gpencil_modifier_move_to_index(ReportList *reports,
+                                              Object *ob,
+                                              GpencilModifierData *md,
+                                              const int index)
+{
+  BLI_assert(md != NULL);
+  BLI_assert(index >= 0);
+  if (index >= BLI_listbase_count(&ob->greasepencil_modifiers)) {
+    BKE_report(reports, RPT_WARNING, "Cannot move modifier beyond the end of the stack");
+    return false;
+  }
+
+  int md_index = BLI_findindex(&ob->greasepencil_modifiers, md);
+  BLI_assert(md_index != -1);
+  if (md_index < index) {
+    /* Move modifier down in list. */
+    for (; md_index < index; md_index++) {
+      if (!ED_object_gpencil_modifier_move_down(reports, ob, md)) {
+        break;
+      }
+    }
+  }
+  else {
+    /* Move modifier up in list. */
+    for (; md_index > index; md_index--) {
+      if (!ED_object_gpencil_modifier_move_up(reports, ob, md)) {
+        break;
+      }
+    }
+  }
+
+  return true;
+}
+
 static int gpencil_modifier_apply_obdata(
     ReportList *reports, Main *bmain, Depsgraph *depsgraph, Object *ob, GpencilModifierData *md)
 {
@@ -596,6 +630,58 @@ void OBJECT_OT_gpencil_modifier_move_down(wmOperatorType *ot)
   gpencil_edit_modifier_properties(ot);
 }
 
+/* ************************* Move to Index Gpencil Modifier Operator ************************* */
+
+static bool gpencil_modifier_move_to_index_poll(bContext *C)
+{
+  return gpencil_edit_modifier_poll(C);
+}
+
+static int gpencil_modifier_move_to_index_exec(bContext *C, wmOperator *op)
+{
+  Object *ob = ED_object_active_context(C);
+  GpencilModifierData *md = gpencil_edit_modifier_property_get(op, ob, 0);
+  int index = RNA_int_get(op->ptr, "index");
+
+  if (!ED_object_gpencil_modifier_move_to_index(op->reports, ob, md, index)) {
+    return OPERATOR_CANCELLED;
+  }
+
+  DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
+  WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
+
+  return OPERATOR_FINISHED;
+}
+
+static int gpencil_modifier_move_to_index_invoke(bContext *C,
+                                                 wmOperator *op,
+                                                 const wmEvent *UNUSED(event))
+{
+  if (gpencil_edit_modifier_invoke_properties(C, op)) {
+    return gpencil_modifier_move_to_index_exec(C, op);
+  }
+  else {
+    return OPERATOR_CANCELLED;
+  }
+}
+
+void OBJECT_OT_gpencil_modifier_move_to_index(wmOperatorType *ot)
+{
+  ot->name = "Move Active Modifier to Index";
+  ot->description = "Move the active modifier to an index in the stack";
+  ot->idname = "OBJECT_OT_gpencil_modifier_move_to_index";
+
+  ot->invoke = gpencil_modifier_move_to_index_invoke;
+  ot->exec = gpencil_modifier_move_to_index_exec;
+  ot->poll = gpencil_modifier_move_to_index_poll;
+
+  /* flags */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
+  edit_modifier_properties(ot);
+  RNA_def_int(
+      ot->srna, "index", 0, 0, INT_MAX, "Index", "The index to move the modifier to", 0, INT_MAX);
+}
+
 /************************ apply modifier operator *********************/
 
 static int gpencil_modifier_apply_exec(bContext *C, wmOperator *op)
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 7582d5b4fe2..27da1eb7c88 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -188,6 +188,7 @@ void OBJECT_OT_gpencil_modifier_add(struct wmOperatorType *ot);
 void OBJECT_OT_gpencil_modifier_remove(struct wmOperatorType *ot);
 void OBJECT_OT_gpencil_modifier_move_up(struct wmOperatorType *ot);
 void OBJECT_OT_gpencil_modifier_move_down(struct wmOperatorType *ot);
+void OBJECT_OT_gpencil_modifier_move_to_index(struct wmOperatorType *ot);
 void OBJECT_OT_gpencil_modifier_apply(struct wmOperatorType *ot);
 void OBJECT_OT_gpencil_modifier_copy(struct wmOperatorType *ot);
 
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index ea06f68bccf..ade3048441d 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -150,6 +150,7 @@ void ED_operatortypes_object(void)
   WM_operatortype_append(OBJECT_OT_gpencil_modifier_remove);
   WM_operatortype_append(OBJECT_OT_gpencil_modifier_move_up);
   WM_operatortype_append(OBJECT_OT_gpencil_modifier_move_down);
+  WM_operatortype_append(OBJECT_OT_gpencil_modifier_move_to_index);
   WM_operatortype_append(OBJECT_OT_gpencil_modifier_apply);
   WM_operatortype_append(OBJECT_OT_gpencil_modifier_copy);
 
diff --git a/source/blender/gpencil_modifiers/intern/MOD_ui_common.c b/source/blender/gpencil_modifiers/intern/MOD_ui_common.c
index dbbe53d9719..6afbc48fd48 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_ui_common.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_ui_common.c
@@ -67,31 +67,31 @@ static bool gpencil_modifier_ui_poll(const bContext *C, PanelType *UNUSED(pt))
  */
 static void gpencil_modifier_reorder(bContext *C, Panel *panel, int new_index)
 {
-  //   Object *ob = CTX_data_active_object(C);
-
-  //   GpencilModifierData *md = BLI_findlink(&ob->greasepencil_modifiers,
-  //   panel->runtime.list_index); PointerRNA props_ptr; wmOperatorType *ot =
-  //   WM_operatortype_find("OBJECT_OT_modifier_move_to_index", false);
-  //   WM_operator_properties_create_ptr(&props_ptr, ot);
-  //   RNA_string_set(&props_ptr, "modifier", md->name);
-  //   RNA_int_set(&props_ptr, "index", new_index);
-  //   WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &props_ptr);
-  //   WM_operator_properties_free(&props_ptr);
+  Object *ob = CTX_data_active_object(C);
+
+  GpencilModifierData *md = BLI_findlink(&ob->greasepencil_modifiers, panel->runtime.list_index);
+  PointerRNA props_ptr;
+  wmOperatorType *ot = WM_operatortype_find("OBJECT_OT_gpencil_modifier_move_to_index", false);
+  WM_operator_properties_create_ptr(&props_ptr, ot);
+  RNA_string_set(&props_ptr, "modifier", md->name);
+  RNA_int_set(&props_ptr, "index", new_index);
+  WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &props_ptr);
+  WM_operator_properties_free(&props_ptr);
 }
 
 static short get_gpencil_modifier_expand_flag(const bContext *C, Panel *panel)
 {
-  //   Object *ob = CTX_data_active_object(C);
-  //   GpencilModifierData *md = BLI_findlink(&ob->greasepencil_modifiers,
-  //   panel->runtime.list_index); return md->ui_expand_flag;
+  Object *ob = CTX_data_active_object(C);
+  GpencilModifierData *md = BLI_findlink(&ob->greasepencil_modifiers, panel->runtime.list_index);
+  return md->ui_expand_flag;
   return 0;
 }
 
 static void set_gpencil_modifier_expand_flag(const bContext *C, Panel *panel, short expand_flag)


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list