diff options
Diffstat (limited to 'space_view3d_brush_menus/brush_menu.py')
-rw-r--r-- | space_view3d_brush_menus/brush_menu.py | 491 |
1 files changed, 233 insertions, 258 deletions
diff --git a/space_view3d_brush_menus/brush_menu.py b/space_view3d_brush_menus/brush_menu.py index 6940304e..4568c225 100644 --- a/space_view3d_brush_menus/brush_menu.py +++ b/space_view3d_brush_menus/brush_menu.py @@ -7,62 +7,9 @@ from bpy.types import ( ) from bpy.props import BoolProperty from . import utils_core +from . import brushes from bl_ui.properties_paint_common import UnifiedPaintPanel - -def get_current_brush_icon(tool): - if utils_core.get_mode() == utils_core.sculpt: - icons = {"BLOB": 'BRUSH_BLOB', - "CLAY": 'BRUSH_CLAY', - "CLAY_STRIPS": 'BRUSH_CLAY_STRIPS', - "CREASE": 'BRUSH_CREASE', - "DRAW": 'BRUSH_SCULPT_DRAW', - "FILL": 'BRUSH_FILL', - "FLATTEN": 'BRUSH_FLATTEN', - "GRAB": 'BRUSH_GRAB', - "INFLATE": 'BRUSH_INFLATE', - "LAYER": 'BRUSH_LAYER', - "MASK": 'BRUSH_MASK', - "NUDGE": 'BRUSH_NUDGE', - "PINCH": 'BRUSH_PINCH', - "ROTATE": 'BRUSH_ROTATE', - "SCRAPE": 'BRUSH_SCRAPE', - "SIMPLIFY": 'BRUSH_SUBTRACT', - "SMOOTH": 'BRUSH_SMOOTH', - "SNAKE_HOOK": 'BRUSH_SNAKE_HOOK', - "THUMB": 'BRUSH_THUMB'} - - elif utils_core.get_mode() == utils_core.vertex_paint: - icons = {"ADD": 'BRUSH_ADD', - "BLUR": 'BRUSH_BLUR', - "DARKEN": 'BRUSH_DARKEN', - "LIGHTEN": 'BRUSH_LIGHTEN', - "MIX": 'BRUSH_MIX', - "MUL": 'BRUSH_MULTIPLY', - "SUB": 'BRUSH_SUBTRACT'} - - elif utils_core.get_mode() == utils_core.weight_paint: - icons = {"ADD": 'BRUSH_ADD', - "BLUR": 'BRUSH_BLUR', - "DARKEN": 'BRUSH_DARKEN', - "LIGHTEN": 'BRUSH_LIGHTEN', - "MIX": 'BRUSH_MIX', - "MUL": 'BRUSH_MULTIPLY', - "SUB": 'BRUSH_SUBTRACT'} - - elif utils_core.get_mode() == utils_core.texture_paint: - icons = {"CLONE": 'BRUSH_CLONE', - "DRAW": 'BRUSH_TEXDRAW', - "FILL": 'BRUSH_TEXFILL', - "MASK": 'BRUSH_TEXMASK', - "SMEAR": 'BRUSH_SMEAR', - "SOFTEN": 'BRUSH_SOFTEN'} - - icon = icons[tool] - - return icon - - class BrushOptionsMenu(Menu): bl_label = "Brush Options" bl_idname = "VIEW3D_MT_sv3_brush_options" @@ -70,163 +17,161 @@ class BrushOptionsMenu(Menu): @classmethod def poll(self, context): return utils_core.get_mode() in ( - utils_core.sculpt, utils_core.vertex_paint, - utils_core.weight_paint, utils_core.texture_paint, - utils_core.particle_edit + 'SCULPT', 'VERTEX_PAINT', + 'WEIGHT_PAINT', 'TEXTURE_PAINT', + 'PARTICLE_EDIT' ) - def draw_brushes(self, menu, h_brush, ico, context): + def draw_brushes(self, layout, h_brush, ico, context): if utils_core.addon_settings(lists=True) == 'popup' or not h_brush: - menu.add_item().operator( + layout.row().operator( "view3d.sv3_brush_menu_popup", text="Brush", icon=ico ) else: - menu.add_item().menu( + layout.row().menu( "VIEW3D_MT_sv3_brushes_menu", text="Brush", icon=ico ) def draw(self, context): - menu = utils_core.Menu(self) + mode = utils_core.get_mode() + layout = self.layout - if utils_core.get_mode() == utils_core.sculpt: - self.sculpt(menu, context) + if mode == 'SCULPT': + self.sculpt(mode, layout, context) - elif utils_core.get_mode() in (utils_core.vertex_paint, - utils_core.weight_paint): - self.vw_paint(menu, context) + elif mode in ('VERTEX_PAINT', 'WEIGHT_PAINT'): + self.vw_paint(mode, layout, context) - elif utils_core.get_mode() == utils_core.texture_paint: - self.texpaint(menu, context) + elif mode == 'TEXTURE_PAINT': + self.texpaint(mode, layout, context) else: - self.particle(menu, context) + self.particle(layout, context) - def sculpt(self, menu, context): + def sculpt(self, mode, layout, context): has_brush = utils_core.get_brush_link(context, types="brush") - icons = get_current_brush_icon(has_brush.sculpt_tool) if \ + icons = brushes.brush_icon[mode][has_brush.sculpt_tool] if \ has_brush else "BRUSH_DATA" - self.draw_brushes(menu, has_brush, icons, context) + self.draw_brushes(layout, has_brush, icons, context) - menu.add_item().menu(BrushRadiusMenu.bl_idname) + layout.row().menu(BrushRadiusMenu.bl_idname) if has_brush: # if the active brush is unlinked these menus don't do anything - menu.add_item().menu(BrushStrengthMenu.bl_idname) - menu.add_item().menu(BrushAutosmoothMenu.bl_idname) - menu.add_item().menu(BrushModeMenu.bl_idname) - menu.add_item().menu("VIEW3D_MT_sv3_texture_menu") - menu.add_item().menu("VIEW3D_MT_sv3_stroke_options") - menu.add_item().menu("VIEW3D_MT_sv3_brush_curve_menu") + layout.row().menu(BrushStrengthMenu.bl_idname) + layout.row().menu(BrushAutosmoothMenu.bl_idname) + layout.row().menu(BrushModeMenu.bl_idname) + layout.row().menu("VIEW3D_MT_sv3_texture_menu") + layout.row().menu("VIEW3D_MT_sv3_stroke_options") + layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu") - menu.add_item().menu("VIEW3D_MT_sv3_dyntopo") - menu.add_item().menu("VIEW3D_MT_sv3_master_symmetry_menu") + layout.row().menu("VIEW3D_MT_sv3_dyntopo") + layout.row().menu("VIEW3D_MT_sv3_master_symmetry_menu") - def vw_paint(self, menu, context): + def vw_paint(self, mode, layout, context): has_brush = utils_core.get_brush_link(context, types="brush") - icons = get_current_brush_icon(has_brush.vertex_tool) if \ + icons = brushes.brush_icon[mode][has_brush.vertex_tool] if \ has_brush else "BRUSH_DATA" - if utils_core.get_mode() == utils_core.vertex_paint: - menu.add_item().operator(ColorPickerPopup.bl_idname, icon="COLOR") - menu.add_item().separator() + if mode == 'VERTEX_PAINT': + layout.row().operator(ColorPickerPopup.bl_idname, icon="COLOR") + layout.row().separator() - self.draw_brushes(menu, has_brush, icons, context) + self.draw_brushes(layout, has_brush, icons, context) - if utils_core.get_mode() == utils_core.vertex_paint: - menu.add_item().menu(BrushRadiusMenu.bl_idname) + if mode == 'VERTEX_PAINT': + layout.row().menu(BrushRadiusMenu.bl_idname) if has_brush: # if the active brush is unlinked these menus don't do anything - menu.add_item().menu(BrushStrengthMenu.bl_idname) - menu.add_item().menu(BrushModeMenu.bl_idname) - menu.add_item().menu("VIEW3D_MT_sv3_texture_menu") - menu.add_item().menu("VIEW3D_MT_sv3_stroke_options") - menu.add_item().menu("VIEW3D_MT_sv3_brush_curve_menu") + layout.row().menu(BrushStrengthMenu.bl_idname) + layout.row().menu(BrushModeMenu.bl_idname) + layout.row().menu("VIEW3D_MT_sv3_texture_menu") + layout.row().menu("VIEW3D_MT_sv3_stroke_options") + layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu") - if utils_core.get_mode() == utils_core.weight_paint: - menu.add_item().menu(BrushWeightMenu.bl_idname) - menu.add_item().menu(BrushRadiusMenu.bl_idname) + if mode == 'WEIGHT_PAINT': + layout.row().menu(BrushWeightMenu.bl_idname) + layout.row().menu(BrushRadiusMenu.bl_idname) if has_brush: # if the active brush is unlinked these menus don't do anything - menu.add_item().menu(BrushStrengthMenu.bl_idname) - menu.add_item().menu(BrushModeMenu.bl_idname) - menu.add_item().menu("VIEW3D_MT_sv3_stroke_options") - menu.add_item().menu("VIEW3D_MT_sv3_brush_curve_menu") + layout.row().menu(BrushStrengthMenu.bl_idname) + layout.row().menu(BrushModeMenu.bl_idname) + layout.row().menu("VIEW3D_MT_sv3_stroke_options") + layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu") - def texpaint(self, menu, context): + def texpaint(self, mode, layout, context): toolsettings = context.tool_settings.image_paint if context.image_paint_object and not toolsettings.detect_data(): - menu.add_item().label("Missing Data", icon="INFO") - menu.add_item().label("See Tool Shelf", icon="BACK") + layout.row().label("Missing Data", icon="INFO") + layout.row().label("See Tool Shelf", icon="BACK") else: has_brush = utils_core.get_brush_link(context, types="brush") if has_brush and has_brush.image_tool in {'DRAW', 'FILL'} and \ has_brush.blend not in {'ERASE_ALPHA', 'ADD_ALPHA'}: - menu.add_item().operator(ColorPickerPopup.bl_idname, icon="COLOR") - menu.add_item().separator() + layout.row().operator(ColorPickerPopup.bl_idname, icon="COLOR") + layout.row().separator() - icons = get_current_brush_icon(has_brush.image_tool) if \ + icons = brushes.brush_icon[mode][has_brush.image_tool] if \ has_brush else "BRUSH_DATA" - self.draw_brushes(menu, has_brush, icons, context) + self.draw_brushes(layout, has_brush, icons, context) if has_brush: # if the active brush is unlinked these menus don't do anything if has_brush and has_brush.image_tool in {'MASK'}: - menu.add_item().menu(BrushWeightMenu.bl_idname, text="Mask Value") + layout.row().menu(BrushWeightMenu.bl_idname, text="Mask Value") if has_brush and has_brush.image_tool not in {'FILL'}: - menu.add_item().menu(BrushRadiusMenu.bl_idname) + layout.row().menu(BrushRadiusMenu.bl_idname) - menu.add_item().menu(BrushStrengthMenu.bl_idname) + layout.row().menu(BrushStrengthMenu.bl_idname) if has_brush and has_brush.image_tool in {'DRAW'}: - menu.add_item().menu(BrushModeMenu.bl_idname) + layout.row().menu(BrushModeMenu.bl_idname) + + layout.row().menu("VIEW3D_MT_sv3_texture_menu") + layout.row().menu("VIEW3D_MT_sv3_stroke_options") + layout.row().menu("VIEW3D_MT_sv3_brush_curve_menu") - menu.add_item().menu("VIEW3D_MT_sv3_texture_menu") - menu.add_item().menu("VIEW3D_MT_sv3_stroke_options") - menu.add_item().menu("VIEW3D_MT_sv3_brush_curve_menu") + layout.row().menu("VIEW3D_MT_sv3_master_symmetry_menu") - menu.add_item().menu("VIEW3D_MT_sv3_master_symmetry_menu") + def particle(self, layout, context): + particle_edit = context.tool_settings.particle_edit - def particle(self, menu, context): - if context.tool_settings.particle_edit.tool == 'NONE': - menu.add_item().label("No Brush Selected", icon="INFO") - menu.add_item().separator() - menu.add_item().menu("VIEW3D_MT_sv3_brushes_menu", + if particle_edit.tool == 'NONE': + layout.row().label("No Brush Selected", icon="INFO") + layout.row().separator() + layout.row().menu("VIEW3D_MT_sv3_brushes_menu", text="Select Brush", icon="BRUSH_DATA") else: - menu.add_item().menu("VIEW3D_MT_sv3_brushes_menu", + layout.row().menu("VIEW3D_MT_sv3_brushes_menu", icon="BRUSH_DATA") - menu.add_item().menu(BrushRadiusMenu.bl_idname) + layout.row().menu(BrushRadiusMenu.bl_idname) - if context.tool_settings.particle_edit.tool != 'ADD': - menu.add_item().menu(BrushStrengthMenu.bl_idname) + if particle_edit.tool != 'ADD': + layout.row().menu(BrushStrengthMenu.bl_idname) else: - menu.add_item().menu(ParticleCountMenu.bl_idname) - menu.add_item().separator() - menu.add_item().prop(context.tool_settings.particle_edit, - "use_default_interpolate", toggle=True) + layout.row().menu(ParticleCountMenu.bl_idname) + layout.row().separator() + layout.row().prop(particle_edit, "use_default_interpolate", toggle=True) - menu.add_item().prop(context.tool_settings.particle_edit.brush, - "steps", slider=True) - menu.add_item().prop(context.tool_settings.particle_edit, - "default_key_count", slider=True) + layout.row().prop(particle_edit.brush, "steps", slider=True) + layout.row().prop(particle_edit, "default_key_count", slider=True) - if context.tool_settings.particle_edit.tool == 'LENGTH': - menu.add_item().separator() - menu.add_item().menu(ParticleLengthMenu.bl_idname) + if particle_edit.tool == 'LENGTH': + layout.row().separator() + layout.row().menu(ParticleLengthMenu.bl_idname) - if context.tool_settings.particle_edit.tool == 'PUFF': - menu.add_item().separator() - menu.add_item().menu(ParticlePuffMenu.bl_idname) - menu.add_item().prop(context.tool_settings.particle_edit.brush, - "use_puff_volume", toggle=True) + if particle_edit.tool == 'PUFF': + layout.row().separator() + layout.row().menu(ParticlePuffMenu.bl_idname) + layout.row().prop(particle_edit.brush, "use_puff_volume", toggle=True) class BrushRadiusMenu(Menu): @@ -234,43 +179,43 @@ class BrushRadiusMenu(Menu): bl_idname = "VIEW3D_MT_sv3_brush_radius_menu" bl_description = "Change the size of the brushes" - def init(self, context): - if utils_core.get_mode() == utils_core.particle_edit: - settings = [["100", 100], - ["70", 70], - ["50", 50], - ["30", 30], - ["20", 20], - ["10", 10]] + def init(self): + if utils_core.get_mode() == 'PARTICLE_EDIT': + settings = (("100", 100), + ("70", 70), + ("50", 50), + ("30", 30), + ("20", 20), + ("10", 10)) datapath = "tool_settings.particle_edit.brush.size" - proppath = context.tool_settings.particle_edit.brush + proppath = bpy.context.tool_settings.particle_edit.brush else: - settings = [["200", 200], - ["150", 150], - ["100", 100], - ["50", 50], - ["35", 35], - ["10", 10]] + settings = (("200", 200), + ("150", 150), + ("100", 100), + ("50", 50), + ("35", 35), + ("10", 10)) datapath = "tool_settings.unified_paint_settings.size" - proppath = context.tool_settings.unified_paint_settings + proppath = bpy.context.tool_settings.unified_paint_settings return settings, datapath, proppath def draw(self, context): - settings, datapath, proppath = self.init(context) - menu = utils_core.Menu(self) + settings, datapath, proppath = self.init() + layout = self.layout # add the top slider - menu.add_item().prop(proppath, "size", slider=True) - menu.add_item().separator() + layout.row().prop(proppath, "size", slider=True) + layout.row().separator() # add the rest of the menu items for i in range(len(settings)): utils_core.menuprop( - menu.add_item(), settings[i][0], settings[i][1], + layout.row(), settings[i][0], settings[i][1], datapath, icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' ) @@ -280,52 +225,53 @@ class BrushStrengthMenu(Menu): bl_label = "Strength" bl_idname = "VIEW3D_MT_sv3_brush_strength_menu" - def init(self, context): - settings = [["1.0", 1.0], - ["0.7", 0.7], - ["0.5", 0.5], - ["0.3", 0.3], - ["0.2", 0.2], - ["0.1", 0.1]] + def init(self): + mode = utils_core.get_mode() + settings = (("1.0", 1.0), + ("0.7", 0.7), + ("0.5", 0.5), + ("0.3", 0.3), + ("0.2", 0.2), + ("0.1", 0.1)) - proppath = utils_core.get_brush_link(context, types="brush") + proppath = utils_core.get_brush_link(bpy.context, types="brush") - if utils_core.get_mode() == utils_core.sculpt: + if mode == 'SCULPT': datapath = "tool_settings.sculpt.brush.strength" - elif utils_core.get_mode() == utils_core.vertex_paint: + elif mode == 'VERTEX_PAINT': datapath = "tool_settings.vertex_paint.brush.strength" - elif utils_core.get_mode() == utils_core.weight_paint: + elif mode == 'WEIGHT_PAINT': datapath = "tool_settings.weight_paint.brush.strength" - elif utils_core.get_mode() == utils_core.texture_paint: + elif mode == 'TEXTURE_PAINT': datapath = "tool_settings.image_paint.brush.strength" else: datapath = "tool_settings.particle_edit.brush.strength" - proppath = context.tool_settings.particle_edit.brush + proppath = bpy.context.tool_settings.particle_edit.brush return settings, datapath, proppath def draw(self, context): - settings, datapath, proppath = self.init(context) - menu = utils_core.Menu(self) + settings, datapath, proppath = self.init() + layout = self.layout # add the top slider if proppath: - menu.add_item().prop(proppath, "strength", slider=True) - menu.add_item().separator() + layout.row().prop(proppath, "strength", slider=True) + layout.row().separator() # add the rest of the menu items for i in range(len(settings)): utils_core.menuprop( - menu.add_item(), settings[i][0], settings[i][1], + layout.row(), settings[i][0], settings[i][1], datapath, icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' ) else: - menu.add_item().label("No brushes available", icon="INFO") + layout.row().label("No brushes available", icon="INFO") class BrushModeMenu(Menu): @@ -333,41 +279,51 @@ class BrushModeMenu(Menu): bl_idname = "VIEW3D_MT_sv3_brush_mode_menu" def init(self): + mode = utils_core.get_mode() has_brush = utils_core.get_brush_link(bpy.context, types="brush") - if utils_core.get_mode() == utils_core.sculpt: + if mode == 'SCULPT': enum = has_brush.bl_rna.properties['sculpt_plane'].enum_items if \ has_brush else None path = "tool_settings.sculpt.brush.sculpt_plane" - - elif utils_core.get_mode() == utils_core.texture_paint: + + elif mode == 'VERTEX_PAINT': + enum = has_brush.bl_rna.properties['vertex_tool'].enum_items if \ + has_brush else None + path = "tool_settings.vertex_paint.brush.vertex_tool" + + elif mode == 'WEIGHT_PAINT': + enum = has_brush.bl_rna.properties['vertex_tool'].enum_items if \ + has_brush else None + path = "tool_settings.weight_paint.brush.vertex_tool" + + elif mode == 'TEXTURE_PAINT': enum = has_brush.bl_rna.properties['blend'].enum_items if \ has_brush else None path = "tool_settings.image_paint.brush.blend" else: - enum = has_brush.bl_rna.properties['vertex_tool'].enum_items if \ - has_brush else None - path = "tool_settings.vertex_paint.brush.vertex_tool" + enum = None + path = "" return enum, path def draw(self, context): enum, path = self.init() - menu = utils_core.Menu(self) + layout = self.layout colum_n = utils_core.addon_settings(lists=False) - menu.add_item().label(text="Brush Mode") - menu.add_item().separator() + layout.row().label(text="Brush Mode") + layout.row().separator() if enum: - if utils_core.get_mode() == utils_core.texture_paint: - column_flow = menu.add_item("column_flow", columns=colum_n) + if utils_core.get_mode() == 'TEXTURE_PAINT': + column_flow = layout.column_flow(columns=colum_n) # add all the brush modes to the menu for brush in enum: utils_core.menuprop( - menu.add_item(parent=column_flow), brush.name, + column_flow.row(), brush.name, brush.identifier, path, icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' ) @@ -375,12 +331,12 @@ class BrushModeMenu(Menu): # add all the brush modes to the menu for brush in enum: utils_core.menuprop( - menu.add_item(), brush.name, + layout.row(), brush.name, brush.identifier, path, icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' ) else: - menu.add_item().label("No brushes available", icon="INFO") + layout.row().label("No brushes available", icon="INFO") class BrushAutosmoothMenu(Menu): @@ -388,74 +344,80 @@ class BrushAutosmoothMenu(Menu): bl_idname = "VIEW3D_MT_sv3_brush_autosmooth_menu" def init(self): - settings = [["1.0", 1.0], - ["0.7", 0.7], - ["0.5", 0.5], - ["0.3", 0.3], - ["0.2", 0.2], - ["0.1", 0.1]] + settings = (("1.0", 1.0), + ("0.7", 0.7), + ("0.5", 0.5), + ("0.3", 0.3), + ("0.2", 0.2), + ("0.1", 0.1)) return settings def draw(self, context): settings = self.init() - menu = utils_core.Menu(self) + layout = self.layout has_brush = utils_core.get_brush_link(context, types="brush") if has_brush: # add the top slider - menu.add_item().prop(has_brush, "auto_smooth_factor", slider=True) - menu.add_item().separator() + layout.row().prop(has_brush, "auto_smooth_factor", slider=True) + layout.row().separator() # add the rest of the menu items for i in range(len(settings)): utils_core.menuprop( - menu.add_item(), settings[i][0], settings[i][1], + layout.row(), settings[i][0], settings[i][1], "tool_settings.sculpt.brush.auto_smooth_factor", icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' ) else: - menu.add_item().label("No Smooth options available", icon="INFO") + layout.row().label("No Smooth options available", icon="INFO") class BrushWeightMenu(Menu): bl_label = "Weight" bl_idname = "VIEW3D_MT_sv3_brush_weight_menu" - def draw(self, context): - if utils_core.get_mode() == utils_core.weight_paint: - brush = context.tool_settings.unified_paint_settings + def init(self): + settings = (("1.0", 1.0), + ("0.7", 0.7), + ("0.5", 0.5), + ("0.3", 0.3), + ("0.2", 0.2), + ("0.1", 0.1)) + + if utils_core.get_mode() == 'WEIGHT_PAINT': + brush = bpy.context.tool_settings.unified_paint_settings brushstr = "tool_settings.unified_paint_settings.weight" name = "Weight" + else: - brush = context.tool_settings.image_paint.brush + brush = bpy.context.tool_settings.image_paint.brush brushstr = "tool_settings.image_paint.brush.weight" name = "Mask Value" - menu = utils_core.Menu(self) - settings = [["1.0", 1.0], - ["0.7", 0.7], - ["0.5", 0.5], - ["0.3", 0.3], - ["0.2", 0.2], - ["0.1", 0.1]] + return settings, brush, brushstr, name + + def draw(self, context): + settings, brush, brushstr, name = self.init() + layout = self.layout + if brush: # add the top slider - menu.add_item().prop(brush, - "weight", text=name, slider=True) - menu.add_item().separator() + layout.row().prop(brush, "weight", text=name, slider=True) + layout.row().separator() # add the rest of the menu items for i in range(len(settings)): utils_core.menuprop( - menu.add_item(), settings[i][0], settings[i][1], + layout.row(), settings[i][0], settings[i][1], brushstr, icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' ) else: - menu.add_item().label("No brush available", icon="INFO") + layout.row().label("No brush available", icon="INFO") class ParticleCountMenu(Menu): @@ -463,28 +425,28 @@ class ParticleCountMenu(Menu): bl_idname = "VIEW3D_MT_sv3_particle_count_menu" def init(self): - settings = [["50", 50], - ["25", 25], - ["10", 10], - ["5", 5], - ["3", 3], - ["1", 1]] + settings = (("50", 50), + ("25", 25), + ("10", 10), + ("5", 5), + ("3", 3), + ("1", 1)) return settings def draw(self, context): settings = self.init() - menu = utils_core.Menu(self) + layout = self.layout # add the top slider - menu.add_item().prop(context.tool_settings.particle_edit.brush, + layout.row().prop(context.tool_settings.particle_edit.brush, "count", slider=True) - menu.add_item().separator() + layout.row().separator() # add the rest of the menu items for i in range(len(settings)): utils_core.menuprop( - menu.add_item(), settings[i][0], settings[i][1], + layout.row(), settings[i][0], settings[i][1], "tool_settings.particle_edit.brush.count", icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' @@ -496,14 +458,14 @@ class ParticleLengthMenu(Menu): bl_idname = "VIEW3D_MT_sv3_particle_length_menu" def draw(self, context): - menu = utils_core.Menu(self) + layout = self.layout path = "tool_settings.particle_edit.brush.length_mode" # add the menu items for item in context.tool_settings.particle_edit.brush. \ bl_rna.properties['length_mode'].enum_items: utils_core.menuprop( - menu.add_item(), item.name, item.identifier, path, + layout.row(), item.name, item.identifier, path, icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' @@ -515,14 +477,14 @@ class ParticlePuffMenu(Menu): bl_idname = "VIEW3D_MT_sv3_particle_puff_menu" def draw(self, context): - menu = utils_core.Menu(self) + layout = self.layout path = "tool_settings.particle_edit.brush.puff_mode" # add the menu items for item in context.tool_settings.particle_edit.brush. \ bl_rna.properties['puff_mode'].enum_items: utils_core.menuprop( - menu.add_item(), item.name, item.identifier, path, + layout.row(), item.name, item.identifier, path, icon='RADIOBUT_OFF', disable=True, disable_icon='RADIOBUT_ON' @@ -551,7 +513,14 @@ class FlipColorsAll(Operator): color.hsv = orig_sec secondary_color.hsv = orig_prim else: - bpy.ops.paint.brush_colors_flip() + color = context.tool_settings.image_paint.brush.color + secondary_color = context.tool_settings.image_paint.brush.secondary_color + + orig_prim = color.hsv + orig_sec = secondary_color.hsv + + color.hsv = orig_sec + secondary_color.hsv = orig_prim return {'FINISHED'} @@ -570,46 +539,52 @@ class ColorPickerPopup(Operator): @classmethod def poll(self, context): return utils_core.get_mode() in ( - utils_core.vertex_paint, - utils_core.texture_paint + 'VERTEX_PAINT', + 'TEXTURE_PAINT' ) def check(self, context): return True - def draw(self, context): - menu = utils_core.Menu(self) - - if utils_core.get_mode() == utils_core.texture_paint: - settings = context.tool_settings.image_paint + def init(self): + if utils_core.get_mode() == 'TEXTURE_PAINT': + settings = bpy.context.tool_settings.image_paint brush = getattr(settings, "brush", None) else: - settings = context.tool_settings.vertex_paint + settings = bpy.context.tool_settings.vertex_paint brush = settings.brush brush = getattr(settings, "brush", None) + return settings, brush + + def draw(self, context): + layout = self.layout + settings, brush = self.init() + + if brush: - menu.add_item().template_color_picker(brush, "color", value_slider=True) - menu.add_item("row", align=True).prop(brush, "color", text="") - menu.current_item.prop(brush, "secondary_color", text="") + layout.row().template_color_picker(brush, "color", value_slider=True) + prim_sec_row = layout.row(align=True) + prim_sec_row.prop(brush, "color", text="") + prim_sec_row.prop(brush, "secondary_color", text="") - if utils_core.get_mode() == utils_core.vertex_paint: - menu.current_item.operator( + if utils_core.get_mode() == 'VERTEX_PAINT': + prim_sec_row.operator( FlipColorsAll.bl_idname, icon='FILE_REFRESH', text="" ).is_tex = False else: - menu.current_item.operator( + prim_sec_row.operator( FlipColorsAll.bl_idname, icon='FILE_REFRESH', text="" ).is_tex = True if settings.palette: - menu.add_item("column").template_palette(settings, "palette", color=True) + layout.column().template_palette(settings, "palette", color=True) - menu.add_item().template_ID(settings, "palette", new="palette.new") + layout.row().template_ID(settings, "palette", new="palette.new") else: - menu.add_item().label("No brushes currently available", icon="INFO") + layout.row().label("No brushes currently available", icon="INFO") return @@ -625,10 +600,10 @@ class BrushMenuPopup(Operator): @classmethod def poll(self, context): return utils_core.get_mode() in ( - utils_core.vertex_paint, - utils_core.texture_paint, - utils_core.sculpt, - utils_core.weight_paint + 'VERTEX_PAINT', + 'TEXTURE_PAINT', + 'SCULPT', + 'WEIGHT_PAINT' ) def check(self, context): |