Commit: a978a4e46c93f99098dc48f65b4cf688cfebca73
Author: Lukas Tönne
Date:   Tue Dec 2 11:30:53 2014 +0100
Branches: hair_immediate_fixes
https://developer.blender.org/rBa978a4e46c93f99098dc48f65b4cf688cfebca73

Lots of small fixes for paint system quirks to make hair brushes work
in the UI.

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

M       release/scripts/startup/bl_ui/space_view3d.py
M       source/blender/blenkernel/intern/brush.c
M       source/blender/editors/hair/hair_ops.c
M       source/blender/editors/interface/interface_icons.c
M       source/blender/editors/sculpt_paint/paint_ops.c
M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/editors/transform/manipulator_widget.c
M       source/blender/editors/transform/transform_orientations.c
M       source/blender/makesdna/DNA_object_types.h
M       source/blender/makesrna/intern/rna_brush.c
M       source/blender/makesrna/intern/rna_context.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py 
b/release/scripts/startup/bl_ui/space_view3d.py
index 4a7d396..8642f1d 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -139,7 +139,7 @@ class VIEW3D_MT_editor_menus(Menu):
                 layout.menu("VIEW3D_MT_select_paint_mask")
             elif mesh.use_paint_mask_vertex and mode_string == 'PAINT_WEIGHT':
                 layout.menu("VIEW3D_MT_select_paint_mask_vertex")
-        elif mode_string != 'SCULPT':
+        elif mode_string not in {'SCULPT'}:
             layout.menu("VIEW3D_MT_select_%s" % mode_string.lower())
 
         if mode_string == 'OBJECT':
@@ -160,7 +160,7 @@ class VIEW3D_MT_editor_menus(Menu):
         elif obj:
             if mode_string not in {'PAINT_TEXTURE'}:
                 layout.menu("VIEW3D_MT_%s" % mode_string.lower())
-            if mode_string in {'SCULPT', 'PAINT_VERTEX', 'PAINT_WEIGHT', 
'PAINT_TEXTURE'}:
+            if mode_string in {'SCULPT', 'PAINT_VERTEX', 'PAINT_WEIGHT', 
'PAINT_TEXTURE', 'HAIR'}:
                 layout.menu("VIEW3D_MT_brush")
             if mode_string == 'SCULPT':
                 layout.menu("VIEW3D_MT_hide_mask")
@@ -901,6 +901,13 @@ class VIEW3D_MT_select_paint_mask_vertex(Menu):
 
         layout.operator("paint.vert_select_ungrouped", text="Ungrouped Verts")
 
+
+class VIEW3D_MT_select_hair(Menu):
+    bl_label = "Select"
+
+    def draw(self, context):
+        layout = self.layout
+
 # ********** Add menu **********
 
 # XXX: INFO_MT_ names used to keep backwards compatibility (Addons etc that 
hook into the menu)
@@ -1460,7 +1467,7 @@ class VIEW3D_MT_brush(Menu):
         layout.separator()
 
         # brush paint modes
-        layout.menu("VIEW3D_MT_brush_paint_modes")
+        layout.menu("VIEW3D_MT_brush_object_modes")
 
         # brush tool
         if context.sculpt_object:
@@ -1470,6 +1477,8 @@ class VIEW3D_MT_brush(Menu):
             layout.prop_menu_enum(brush, "image_tool")
         elif context.vertex_paint_object or context.weight_paint_object:
             layout.prop_menu_enum(brush, "vertex_tool")
+        elif context.hair_edit_object:
+            layout.prop_menu_enum(brush, "hair_tool")
 
         # skip if no active brush
         if not brush:
@@ -1497,7 +1506,7 @@ class VIEW3D_MT_brush(Menu):
                     layout.operator("sculpt.set_persistent_base")
 
 
-class VIEW3D_MT_brush_paint_modes(Menu):
+class VIEW3D_MT_brush_object_modes(Menu):
     bl_label = "Enabled Modes"
 
     def draw(self, context):
@@ -1510,6 +1519,7 @@ class VIEW3D_MT_brush_paint_modes(Menu):
         layout.prop(brush, "use_paint_vertex", text="Vertex Paint")
         layout.prop(brush, "use_paint_weight", text="Weight Paint")
         layout.prop(brush, "use_paint_image", text="Texture Paint")
+        layout.prop(brush, "use_hair_edit", text="Hair Edit")
 
 # ********** Vertex paint menu **********
 
@@ -1760,6 +1770,14 @@ class VIEW3D_MT_particle_specials(Menu):
 class VIEW3D_MT_particle_showhide(ShowHideMenu, Menu):
     _operator_name = "particle"
 
+# ********** Hair menu **********
+
+class VIEW3D_MT_hair(Menu):
+    bl_label = "Hair"
+
+    def draw(self, context):
+        layout = self.layout
+
 # ********** Pose Menu **********
 
 
diff --git a/source/blender/blenkernel/intern/brush.c 
b/source/blender/blenkernel/intern/brush.c
index 92f66cd..2638edf 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -68,7 +68,7 @@ static void brush_defaults(Brush *brush)
        brush->blend = 0;
        brush->flag = 0;
 
-       brush->ob_mode = OB_MODE_ALL_PAINT;
+       brush->ob_mode = OB_MODE_ALL_BRUSH;
 
        /* BRUSH SCULPT TOOL SETTINGS */
        brush->weight = 1.0f; /* weight of brush 0 - 1.0 */
diff --git a/source/blender/editors/hair/hair_ops.c 
b/source/blender/editors/hair/hair_ops.c
index 8e4405a..3a1e350 100644
--- a/source/blender/editors/hair/hair_ops.c
+++ b/source/blender/editors/hair/hair_ops.c
@@ -70,5 +70,4 @@ void ED_keymap_hair(wmKeyConfig *keyconf)
        keymap->poll = hair_poll;
        
        kmi = WM_keymap_add_item(keymap, "HAIR_OT_stroke", LEFTMOUSE, KM_PRESS, 
0,        0);
-       RNA_enum_set(kmi->ptr, "mode", BRUSH_STROKE_NORMAL);
 }
diff --git a/source/blender/editors/interface/interface_icons.c 
b/source/blender/editors/interface/interface_icons.c
index 47575a6..401a526 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -1222,6 +1222,8 @@ static int ui_id_brush_get_icon(bContext *C, ID *id)
                                mode = OB_MODE_VERTEX_PAINT;
                        else if (ob->mode & OB_MODE_TEXTURE_PAINT)
                                mode = OB_MODE_TEXTURE_PAINT;
+                       else if (ob->mode & OB_MODE_HAIR_EDIT)
+                               mode = OB_MODE_HAIR_EDIT;
                }
                else if ((sima = CTX_wm_space_image(C)) &&
                         (sima->mode == SI_MODE_PAINT))
@@ -1242,6 +1244,10 @@ static int ui_id_brush_get_icon(bContext *C, ID *id)
                        items = brush_image_tool_items;
                        tool = br->imagepaint_tool;
                }
+               else if (mode == OB_MODE_HAIR_EDIT) {
+                       items = brush_hair_tool_items;
+                       tool = br->hair_tool;
+               }
 
                if (!items || !RNA_enum_icon_from_value(items, tool, 
&id->icon_id))
                        id->icon_id = 0;
diff --git a/source/blender/editors/sculpt_paint/paint_ops.c 
b/source/blender/editors/sculpt_paint/paint_ops.c
index ea5f77a..9a2cae4 100644
--- a/source/blender/editors/sculpt_paint/paint_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_ops.c
@@ -44,6 +44,7 @@
 #include "ED_screen.h"
 #include "ED_image.h"
 #include "UI_resources.h"
+#include "UI_interface.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -60,19 +61,39 @@
 #include <stddef.h>
 
 /* Brush operators */
+
 static int brush_add_exec(bContext *C, wmOperator *UNUSED(op))
 {
        /*int type = RNA_enum_get(op->ptr, "type");*/
-       Paint *paint = BKE_paint_get_active_from_context(C);
-       Brush *br = BKE_paint_brush(paint);
        Main *bmain = CTX_data_main(C);
-
+       Scene *scene = CTX_data_scene(C);
+       Object *ob = CTX_data_active_object(C);
+       Paint *paint = NULL;
+       HairEditSettings *hair_edit = NULL;
+       Brush *br = NULL;
+       
+       /* get active brush context */
+       if (ob->mode == OB_MODE_HAIR_EDIT) {
+               hair_edit = &scene->toolsettings->hair_edit;
+               br = hair_edit->brush;
+       }
+       else {
+               paint = BKE_paint_get_active_from_context(C);
+               br = BKE_paint_brush(paint);
+       }
+       
        if (br)
                br = BKE_brush_copy(br);
        else
                br = BKE_brush_add(bmain, "Brush");
 
-       BKE_paint_brush_set(paint, br);
+       /* set new brush pointer in the context */
+       if (ob->mode == OB_MODE_HAIR_EDIT) {
+               hair_edit->brush = br;
+       }
+       else {
+               BKE_paint_brush_set(paint, br);
+       }
 
        return OPERATOR_FINISHED;
 }
@@ -461,7 +482,7 @@ static int brush_select_exec(bContext *C, wmOperator *op)
                Object *ob = CTX_data_active_object(C);
                if (ob) {
                        /* select current paint mode */
-                       paint_mode = ob->mode & OB_MODE_ALL_PAINT;
+                       paint_mode = ob->mode & OB_MODE_ALL_BRUSH;
                }
                else {
                        return OPERATOR_CANCELLED;
diff --git a/source/blender/editors/space_view3d/drawobject.c 
b/source/blender/editors/space_view3d/drawobject.c
index dbd6615..7ed5c71 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -3649,7 +3649,7 @@ static void draw_em_fancy(Scene *scene, ARegion *ar, 
View3D *v3d,
 static void draw_mesh_object_outline(View3D *v3d, Object *ob, DerivedMesh *dm)
 {
        if ((v3d->transp == false) &&  /* not when we draw the transparent pass 
*/
-           (ob->mode & OB_MODE_ALL_PAINT) == false) /* not when painting (its 
distracting) - campbell */
+           (ob->mode & OB_MODE_ALL_BRUSH) == false) /* not when painting (its 
distracting) - campbell */
        {
                glLineWidth(UI_GetThemeValuef(TH_OUTLINE_WIDTH) * 2.0f);
                glDepthMask(0);
@@ -7941,7 +7941,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, 
Base *base, const short
        }
 
        /* object centers, need to be drawn in viewmat space for speed, but OK 
for picking select */
-       if (!is_obact || !(ob->mode & OB_MODE_ALL_PAINT)) {
+       if (!is_obact || !(ob->mode & OB_MODE_ALL_BRUSH)) {
                int do_draw_center = -1; /* defines below are zero or 
positive... */
 
                if (render_override) {
diff --git a/source/blender/editors/transform/manipulator_widget.c 
b/source/blender/editors/transform/manipulator_widget.c
index eff9fda..7a27833 100644
--- a/source/blender/editors/transform/manipulator_widget.c
+++ b/source/blender/editors/transform/manipulator_widget.c
@@ -562,7 +562,7 @@ static int calc_manipulator_stats(const bContext *C)
                        mul_m4_v3(ob->obmat, scene->twmax);
                }
        }
-       else if (ob && (ob->mode & OB_MODE_ALL_PAINT)) {
+       else if (ob && (ob->mode & OB_MODE_ALL_BRUSH)) {
                /* pass */
        }
        else if (ob && ob->mode & OB_MODE_PARTICLE_EDIT) {
diff --git a/source/blender/editors/transform/transform_orientations.c 
b/source/blender/editors/transform/transform_orientations.c
index 7926239..4aa11a9 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -1003,7 +1003,7 @@ int getTransformOrientation(const bContext *C, float 
normal[3], float plane[3],
                        result = ORIENTATION_EDGE;
                }
        }
-       else if (ob && (ob->mode & (OB_MODE_ALL_PAINT | 
OB_MODE_PARTICLE_EDIT))) {
+       else if (ob && (ob->mode & (OB_MODE_ALL_BRUSH | 
OB_MODE_PARTICLE_EDIT))) {
                /* pass */
        }
        else {
diff --git a/source/blender/makesdna/DNA_object_types.h 
b/source/blender/makesdna/DNA_object_types.h
index 46b1bb4..f3ebcb9 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -689,6 +689,7 @@ typedef enum ObjectMode {
 
 /* any mode where the brush system is used */
 #define OB_MODE_ALL_PAINT (OB_MODE_SCULPT | OB_MODE_VERTEX_PAINT | 
OB_MODE_WEIGHT_PAINT | OB_MODE_TEXTURE_PAINT)
+#define OB_MODE_ALL_BRUSH (OB_MODE_ALL_PAINT | OB_MODE_HAIR_EDIT)
 
 #define MAX_DUPLI_RECUR 8
 
diff --git a/source/blender/makesrna/intern/rna_brush.c 
b/source/blender/makesrna/intern/rna_brush.c
index 1a797a6..850b698 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -108,13 +108,13 @@ EnumPropertyItem brush_image_tool_items[] = {
 };
 
 EnumPropertyItem brush_hair_tool_items[] = {
-       {HAIR

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to