Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bishop <nicholasbishop@gmail.com>2009-03-11 02:38:16 +0300
committerNicholas Bishop <nicholasbishop@gmail.com>2009-03-11 02:38:16 +0300
commitbb406cbf48f2e697beb096a22a8dbebbf682c9b9 (patch)
tree48a35c23b35a30e466d9d6f9ee297cc5e7a14407
parentf7f0222a768de13f596ba147dd151aa8e812f975 (diff)
Added a brush panel that can be eventually be used for all the paint modes. For now, just sculpt and texture paint are set up to use it (vpaint and wpaint don't yet use the Brush type.)
-rw-r--r--source/blender/blenkernel/intern/brush.c2
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c129
2 files changed, 105 insertions, 26 deletions
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index e5dd9c2188d..398993be1a4 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -103,6 +103,8 @@ Brush *copy_brush(Brush *brush)
}
}
+ brushn->curve= curvemapping_copy(brush->curve);
+
/* enable fake user by default */
if (!(brushn->id.flag & LIB_FAKEUSER)) {
brushn->id.flag |= LIB_FAKEUSER;
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index 6f5860ea4b5..413cb79c7cc 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -56,6 +56,7 @@
#include "BLI_rand.h"
#include "BKE_action.h"
+#include "BKE_brush.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_customdata.h"
@@ -1062,47 +1063,121 @@ static void weight_paint_buttons(Scene *scene, uiBlock *block)
}
}
-static void sculptmode_draw_interface_tools(Scene *scene, uiBlock *block, unsigned short cx, unsigned short cy)
+static Brush **get_brush_source(const bContext *C)
{
- Sculpt *s = scene->toolsettings->sculpt;
- Brush *br = s->brush;
-
+ if(G.f & G_SCULPTMODE)
+ return &CTX_data_scene(C)->toolsettings->sculpt->brush;
+ else if(G.f & G_TEXTUREPAINT)
+ return &CTX_data_scene(C)->toolsettings->imapaint.brush;
+ return NULL;
+}
+
+static void brush_idpoin_handle(bContext *C, ID *id, int event)
+{
+ Brush **br = get_brush_source(C);
+
+ if(!br)
+ return;
+
+ switch(event) {
+ case UI_ID_BROWSE:
+ (*br) = (Brush*)id;
+ break;
+ case UI_ID_DELETE:
+ brush_delete(br);
+ break;
+ case UI_ID_RENAME:
+ /* XXX ? */
+ break;
+ case UI_ID_ADD_NEW:
+ if(id) {
+ (*br) = copy_brush((Brush*)id);
+ id->us--;
+ }
+ else
+ (*br) = add_brush("Brush");
+ break;
+ case UI_ID_OPEN:
+ /* XXX not implemented */
+ break;
+ }
+}
+
+static void view3d_panel_brush(const bContext *C, ARegion *ar, short cntrl)
+{
+ uiBlock *block;
+ Brush **brp = get_brush_source(C), *br;
+ short w = 268, h = 400, cx = 10, cy = h;
+ rctf rect;
+
+ if(!brp)
+ return;
+ br = *brp;
+
+ block= uiBeginBlock(C, ar, "view3d_panel_brush", UI_EMBOSS, UI_HELV);
+ if(uiNewPanel(C, ar, block, "Brush", "View3d", 340, 10, 318, h)==0) return;
+ uiBlockSetHandleFunc(block, do_view3d_region_buttons, NULL);
+
uiBlockBeginAlign(block);
-
- uiDefBut(block,LABEL,B_NOP,"Brush",cx,cy,90,19,NULL,0,0,0,0,"");
- cy-= 20;
-
- uiBlockBeginAlign(block);
- uiDefButC(block,ROW,B_REDR,"Draw",cx,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_DRAW,0,0,"Draw lines on the model");
- uiDefButC(block,ROW,B_REDR,"Smooth",cx+67,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_SMOOTH,0,0,"Interactively smooth areas of the model");
- uiDefButC(block,ROW,B_REDR,"Pinch",cx+134,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_PINCH,0,0,"Interactively pinch areas of the model");
- uiDefButC(block,ROW,B_REDR,"Inflate",cx+201,cy,67,19,&br->sculpt_tool,14,SCULPT_TOOL_INFLATE,0,0,"Push vertices along the direction of their normals");
+ uiDefIDPoinButs(block, CTX_data_main(C), NULL, &br->id, ID_BR, NULL, cx, cy,
+ brush_idpoin_handle, UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE|UI_ID_ALONE);
+ cy-= 25;
+ uiBlockEndAlign(block);
+
+ if(!br)
+ return;
+
+ if(G.f & G_SCULPTMODE) {
+ uiBlockBeginAlign(block);
+ uiDefButC(block,ROW,B_REDR,"Draw",cx,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_DRAW,0,0,"Draw lines on the model");
+ uiDefButC(block,ROW,B_REDR,"Smooth",cx+67,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_SMOOTH,0,0,"Interactively smooth areas of the model");
+ uiDefButC(block,ROW,B_REDR,"Pinch",cx+134,cy,67,19,&br->sculpt_tool,14.0,SCULPT_TOOL_PINCH,0,0,"Interactively pinch areas of the model");
+ uiDefButC(block,ROW,B_REDR,"Inflate",cx+201,cy,67,19,&br->sculpt_tool,14,SCULPT_TOOL_INFLATE,0,0,"Push vertices along the direction of their normals");
+ cy-= 20;
+ uiDefButC(block,ROW,B_REDR,"Grab", cx,cy,89,19,&br->sculpt_tool,14,SCULPT_TOOL_GRAB,0,0,"Grabs a group of vertices and moves them with the mouse");
+ uiDefButC(block,ROW,B_REDR,"Layer", cx+89,cy,89,19,&br->sculpt_tool,14, SCULPT_TOOL_LAYER,0,0,"Adds a layer of depth");
+ uiDefButC(block,ROW,B_REDR,"Flatten", cx+178,cy,90,19,&br->sculpt_tool,14, SCULPT_TOOL_FLATTEN,0,0,"Interactively flatten areas of the model");
+ cy-= 25;
+ uiBlockEndAlign(block);
+ }
+
+ uiBlockBeginAlign(block);
+ uiDefButI(block,NUMSLI,B_NOP,"Size: ",cx,cy,w,19,&br->size,1.0,200.0,0,0,"Set brush radius in pixels");
cy-= 20;
- uiDefButC(block,ROW,B_REDR,"Grab", cx,cy,89,19,&br->sculpt_tool,14,SCULPT_TOOL_GRAB,0,0,"Grabs a group of vertices and moves them with the mouse");
- uiDefButC(block,ROW,B_REDR,"Layer", cx+89,cy,89,19,&br->sculpt_tool,14, SCULPT_TOOL_LAYER,0,0,"Adds a layer of depth");
- uiDefButC(block,ROW,B_REDR,"Flatten", cx+178,cy,90,19,&br->sculpt_tool,14, SCULPT_TOOL_FLATTEN,0,0,"Interactively flatten areas of the model");
+ uiDefButF(block,NUMSLI,B_NOP,"Strength: ",cx,cy,w,19,&br->alpha,0,1.0,0,0,"Set brush strength");
cy-= 25;
uiBlockEndAlign(block);
-
+
uiBlockBeginAlign(block);
- uiDefBut(block,LABEL,B_NOP,"Shape",cx,cy,90,19,NULL,0,0,0,0,"");
+
+ uiDefButBitS(block, TOG, BRUSH_AIRBRUSH, B_NOP, "Airbrush", cx,cy,w/3,19, &br->flag,0,0,0,0, "Brush makes changes without waiting for the mouse to move");
+ uiDefButBitS(block, TOG, BRUSH_ANCHORED, B_NOP, "Rake", cx+w/3,cy,w/3,19, &br->flag,0,0,0,0, "");
+ uiDefButBitS(block, TOG, BRUSH_RAKE, B_NOP, "Anchored", cx+w*2.0/3,cy,w/3,19, &br->flag,0,0,0,0, "");
+ cy-= 20;
+ uiDefButBitS(block, TOG, BRUSH_SPACE, B_NOP, "Space", cx,cy,w/3,19, &br->flag,0,0,0,0, "");
+ uiDefButF(block,NUMSLI,B_NOP,"Spacing: ",cx+w/3,cy,w*2.0/3,19,&br->spacing,1.0,500,0,0,"");
cy-= 20;
+ uiBlockEndAlign(block);
+ rect.xmin= cx; rect.xmax= cx + w;
+ rect.ymin= cy - 200; rect.ymax= cy;
uiBlockBeginAlign(block);
+ curvemap_buttons(block, br->curve, (char)0, B_NOP, 0, &rect);
+ uiBlockEndAlign(block);
+
+ uiEndBlock(C, block);
+}
+
+static void sculptmode_draw_interface_tools(Scene *scene, uiBlock *block, unsigned short cx, unsigned short cy)
+{
+ Sculpt *s = scene->toolsettings->sculpt;
+
//XXX if(sd->brush_type != SMOOTH_BRUSH && sd->brush_type != GRAB_BRUSH && sd->brush_type != FLATTEN_BRUSH) {
{
/*uiDefButBitS(block,ROW,B_NOP,"Add",cx,cy,89,19,&br->dir,15.0,1.0,0, 0,"Add depth to model [Shift]");
uiDefButBitS(block,ROW,B_NOP,"Sub",cx+89,cy,89,19,&br->dir,15.0,2.0,0, 0,"Subtract depth from model [Shift]");
*/}
//XXX if(sd->brush_type!=GRAB_BRUSH)
- uiDefButBitS(block, TOG, BRUSH_AIRBRUSH, B_NOP, "Airbrush", cx+178,cy,89,19, &br->flag,0,0,0,0, "Brush makes changes without waiting for the mouse to move");
- cy-= 20;
- uiDefButI(block,NUMSLI,B_NOP,"Size: ",cx,cy,268,19,&br->size,1.0,200.0,0,0,"Set brush radius in pixels");
- cy-= 20;
- //XXX if(sd->brush_type!=GRAB_BRUSH)
- uiDefButF(block,NUMSLI,B_NOP,"Strength: ",cx,cy,268,19,&br->alpha,0,1.0,0,0,"Set brush strength");
- cy-= 25;
- uiBlockEndAlign(block);
uiBlockBeginAlign(block);
uiDefBut( block,LABEL,B_NOP,"Symmetry",cx,cy,90,19,NULL,0,0,0,0,"");
@@ -1499,6 +1574,8 @@ void view3d_buttons_area_defbuts(const bContext *C, ARegion *ar)
view3d_panel_object(C, ar, 0);
view3d_panel_properties(C, ar, 0);
view3d_panel_background(C, ar, 0);
+ if(G.f & (G_SCULPTMODE|G_TEXTUREPAINT))
+ view3d_panel_brush(C, ar, 0);
// XXX view3d_panel_preview(C, ar, 0);
view3d_panel_transform_spaces(C, ar, 0);
if(0)