Commit: 46bf547562adb72bfaecc7ada681e675fcea7d44
Author: Antonio Vazquez
Date:   Tue Jun 26 13:21:25 2018 +0200
Branches: temp-greasepencil-vfx
https://developer.blender.org/rB46bf547562adb72bfaecc7ada681e675fcea7d44

Basic Add VFX and new template

Still the poll method is not working.

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

M       release/scripts/startup/bl_ui/properties_data_modifier.py
M       source/blender/editors/include/UI_interface.h
M       source/blender/editors/interface/interface_templates.c
M       source/blender/editors/object/object_shader_fx.c
M       source/blender/makesrna/RNA_access.h
M       source/blender/makesrna/intern/rna_object.c
M       source/blender/makesrna/intern/rna_shader_fx.c
M       source/blender/makesrna/intern/rna_ui_api.c
M       source/creator/creator.c

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

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py 
b/release/scripts/startup/bl_ui/properties_data_modifier.py
index e6c6c99556b..60f3ba1e069 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -28,6 +28,11 @@ class ModifierButtonsPanel:
     bl_context = "modifier"
     bl_options = {'HIDE_HEADER'}
 
+class ShaderFxButtonsPanel:
+    bl_space_type = 'PROPERTIES'
+    bl_region_type = 'WINDOW'
+    bl_context = "modifier"
+    #bl_options = {'HIDE_HEADER'}
 
 class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
     bl_label = "Modifiers"
@@ -1980,9 +1985,112 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, 
Panel):
         row.prop(md, "pass_index", text="Pass")
         row.prop(md, "invert_pass", text="", icon="ARROW_LEFTRIGHT")
 
+
+class DATA_PT_shader_fx(ShaderFxButtonsPanel, Panel):
+    bl_label = "Effects"
+
+    @classmethod
+    def poll(cls, context):
+        return True
+        ob = context.object
+        return ob and ob.type == 'GPENCIL'
+
+    def draw(self, context):
+        layout = self.layout
+
+        ob = context.object
+
+        layout.operator_menu_enum("object.shaderfx_add", "type")
+
+        for fx in ob.shader_effects:
+            box = layout.template_shaderfx(fx)
+            if box:
+                # match enum type to our functions, avoids a lookup table.
+                getattr(self, fx.type)(box, ob, fx)
+
+    # the mt.type enum is (ab)used for a lookup on function names
+    # ...to avoid lengthy if statements
+    # so each type must have a function here.
+
+    def FX_BLUR(self, layout, ob, fx):
+        split = layout.split()
+
+        col = split.column()
+        col.label(text="Factor:")
+        col.prop(fx, "factor", text="")
+        col.separator()
+        col.prop(fx, "samples", text="Samples")
+
+        col.separator()
+        col.prop(fx, "use_dof_mode")
+        if fx.use_dof_mode:
+            col.prop(fx, "coc")
+
+    def FX_WAVE(self, layout, ob, fx):
+        row = layout.row(align=True)
+        row.prop(fx, "orientation", expand=True)
+
+        split = layout.split()
+        col = split.column()
+        col.separator()
+        col.label(text="Wave:")
+        col.prop(fx, "amplitude")
+        col.prop(fx, "period")
+        col.prop(fx, "phase")
+
+    def FX_PIXEL(self, layout, ob, fx):
+        split = layout.split()
+
+        col = split.column()
+        col.label(text="Size:")
+        col.prop(fx, "size", text="")
+
+        col.separator()
+        col.prop(fx, "use_lines")
+
+        row = col.row()
+        col = row.column()
+        col.enabled = fx.use_lines
+        col.prop(fx, "color")
+
+    def FX_SWIRL(self, layout, ob, fx):
+        split = layout.split()
+
+        col = split.column()
+        col.label(text="Object:")
+        col.prop(fx, "object", text="")
+
+        col.separator()
+        col.prop(fx, "radius")
+        col.prop(fx, "angle")
+
+        col.separator()
+        col.prop(fx, "transparent")
+
+    def FX_FLIP(self, layout, ob, fx):
+        split = layout.split()
+
+        col = split.column()
+        col.prop(fx, "flip_horizontal")
+        col.prop(fx, "flip_vertical")
+
+    def FX_LIGHT(self, layout, ob, fx):
+        split = layout.split()
+
+        col = split.column()
+        col.label(text="Object:")
+        col.prop(fx, "object", text="")
+
+        col = split.column(align=True)
+        col.label("Settings:")
+        col.prop(fx, "energy")
+        col.prop(fx, "ambient")
+
+
 classes = (
     DATA_PT_modifiers,
     DATA_PT_gpencil_modifiers,
+    DATA_PT_shader_fx,
 )
 
 if __name__ == "__main__":  # only for live edit.
diff --git a/source/blender/editors/include/UI_interface.h 
b/source/blender/editors/include/UI_interface.h
index ba66d17b3a7..c1cd452683b 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -1031,6 +1031,8 @@ void uiTemplatePathBuilder(uiLayout *layout, struct 
PointerRNA *ptr, const char
 uiLayout *uiTemplateModifier(uiLayout *layout, struct bContext *C, struct 
PointerRNA *ptr);
 uiLayout *uiTemplateGpencilModifier(uiLayout *layout, struct bContext *C, 
struct PointerRNA *ptr);
 
+uiLayout *uiTemplateShaderFx(uiLayout *layout, struct bContext *C, struct 
PointerRNA *ptr);
+
 void uiTemplateOperatorRedoProperties(uiLayout *layout, const struct bContext 
*C);
 
 uiLayout *uiTemplateConstraint(uiLayout *layout, struct PointerRNA *ptr);
diff --git a/source/blender/editors/interface/interface_templates.c 
b/source/blender/editors/interface/interface_templates.c
index 616ce0e1bd3..710b61870d0 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -40,6 +40,7 @@
 #include "DNA_brush_types.h"
 #include "DNA_texture_types.h"
 #include "DNA_gpencil_modifier_types.h"
+#include "DNA_shader_fx_types.h"
 
 #include "BLI_utildefines.h"
 #include "BLI_alloca.h"
@@ -73,6 +74,7 @@
 #include "BKE_paint.h"
 #include "BKE_report.h"
 #include "BKE_screen.h"
+#include "BKE_shader_fx.h"
 
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_build.h"
@@ -1532,6 +1534,8 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext 
*C, PointerRNA *ptr)
        return NULL;
 }
 
+/************************ Grease Pencil Modifier Template 
*************************/
+
 static uiLayout *gpencil_draw_modifier(uiLayout *layout, Object *ob,
                                                                           
GpencilModifierData *md)
 {
@@ -1654,6 +1658,123 @@ uiLayout *uiTemplateGpencilModifier(uiLayout *layout, 
bContext *UNUSED(C), Point
        return NULL;
 }
 
+/************************ Shader FX Template *************************/
+
+static uiLayout *gpencil_draw_shaderfx(uiLayout *layout, Object *ob,
+       ShaderFxData *md)
+{
+       const ShaderFxTypeInfo *mti = BKE_shaderfxType_getInfo(md->type);
+       PointerRNA ptr;
+       uiBlock *block;
+       uiLayout *box, *column, *row, *sub;
+       uiLayout *result = NULL;
+
+       /* create RNA pointer */
+       RNA_pointer_create(&ob->id, &RNA_GpencilModifier, md, &ptr);
+
+       column = uiLayoutColumn(layout, true);
+       uiLayoutSetContextPointer(column, "shader", &ptr);
+
+       /* rounded header 
------------------------------------------------------------------- */
+       box = uiLayoutBox(column);
+
+       row = uiLayoutRow(box, false);
+       block = uiLayoutGetBlock(row);
+
+       UI_block_emboss_set(block, UI_EMBOSS_NONE);
+       /* Open/Close .................................  */
+       uiItemR(row, &ptr, "show_expanded", 0, "", ICON_NONE);
+
+       /* shader-type icon */
+       uiItemL(row, "", RNA_struct_ui_icon(ptr.type));
+       UI_block_emboss_set(block, UI_EMBOSS);
+
+       /* modifier name */
+       if (mti->isDisabled && mti->isDisabled(md, 0)) {
+               uiLayoutSetRedAlert(row, true);
+       }
+       uiItemR(row, &ptr, "name", 0, "", ICON_NONE);
+       uiLayoutSetRedAlert(row, false);
+
+       /* mode enabling buttons */
+       UI_block_align_begin(block);
+       uiItemR(row, &ptr, "show_render", 0, "", ICON_NONE);
+       uiItemR(row, &ptr, "show_viewport", 0, "", ICON_NONE);
+
+       if (mti->flags & eShaderFxTypeFlag_SupportsEditmode) {
+               sub = uiLayoutRow(row, true);
+               uiLayoutSetActive(sub, false);
+               uiItemR(sub, &ptr, "show_in_editmode", 0, "", ICON_NONE);
+       }
+
+       UI_block_align_end(block);
+
+       /* Up/Down + Delete ........................... */
+       UI_block_align_begin(block);
+       uiItemO(row, "", ICON_TRIA_UP, "OBJECT_OT_shaderfx_move_up");
+       uiItemO(row, "", ICON_TRIA_DOWN, "OBJECT_OT_shaderfx_move_down");
+       UI_block_align_end(block);
+
+       UI_block_emboss_set(block, UI_EMBOSS_NONE);
+       uiItemO(row, "", ICON_X, "OBJECT_OT_shaderfx_remove");
+       UI_block_emboss_set(block, UI_EMBOSS);
+
+       /* modifier settings (under the header) 
--------------------------------------------------- */
+       if (md->mode & eShaderFxMode_Expanded) {
+               /* apply/convert/copy */
+               box = uiLayoutBox(column);
+               row = uiLayoutRow(box, false);
+
+               /* only here obdata, the rest of modifiers is ob level */
+               UI_block_lock_set(block, BKE_object_obdata_is_libdata(ob), 
ERROR_LIBDATA_MESSAGE);
+
+               /* result is the layout block inside the box, that we return so 
that modifier settings can be drawn */
+               result = uiLayoutColumn(box, false);
+               block = uiLayoutAbsoluteBlock(box);
+       }
+
+       /* error messages */
+       if (md->error) {
+               box = uiLayoutBox(column);
+               row = uiLayoutRow(box, false);
+               uiItemL(row, md->error, ICON_ERROR);
+       }
+
+       return result;
+}
+
+uiLayout *uiTemplateShaderFx(uiLayout *layout, bContext *UNUSED(C), PointerRNA 
*ptr)
+{
+       Object *ob;
+       ShaderFxData *fx, *vfx;
+       int i;
+
+       /* verify we have valid data */
+       if (!RNA_struct_is_a(ptr->type, &RNA_ShaderFx)) {
+               RNA_warning("Expected shader fx on object");
+               return NULL;
+       }
+
+       ob = ptr->id.data;
+       fx = ptr->data;
+
+       if (!ob || !(GS(ob->id.name) == ID_OB)) {
+               RNA_warning("Expected shader fx on object");
+               return NULL;
+       }
+
+       UI_block_lock_set(uiLayoutGetBlock(layout), (ob && ID_IS_LINKED(ob)), 
ERROR_LIBDATA_MESSAGE);
+
+       /* find modifier and draw it */
+       vfx = ob->shader_fx.first;
+       for (i = 0; vfx; i++, vfx = vfx->next) {
+               if (fx == vfx)
+                       return gpencil_draw_shaderfx(layout, ob, fx);
+       }
+
+       return NULL;
+}
+
 /************************ Redo Buttons Template *************************/
 
 static bool template_operator_redo_property_buts_poll(PointerRNA *UNUSED(ptr), 
PropertyRNA *prop)
diff --git a/source/blender/editors/object/object_shader_fx.c 
b/source/blender/editors/object/object_shader_fx.c
index 4a663ff15cf..556529a0219 100644
--- a/source/blender/editors/object/object_shader_fx.c
+++ b/source/blender/editors/object/object_shader_fx.c
@@ -50,7 +50,6 @@
 #include "BKE_shader_fx.h"
 #include "BKE_report.h"
 #include "BKE_object.h"
-#include "BKE_gpencil.h"
 
 #include "DEG_depsgraph.h"
 #include "DEG_depsgraph_build.h"
@@ -283,9 +282,9 @@ void OBJECT_OT_shaderfx_add(wmOperatorType *ot)
        ot->prop = prop;
 }
 
-/************************ generic functions for operators using mod names and 
data context *********************/
+/************************ generic functions for operators using names and data 
context *********************/
 
-static int gpencil_edit_shaderfx_poll_generic(bContext *C, StructRNA 
*rna_type, int obtype_flag)
+static int edit_shaderfx_poll_generic(bContext *C, StructR

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to