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:
Diffstat (limited to 'release/scripts/startup/bl_ui/space_view3d_toolbar.py')
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py1014
1 files changed, 304 insertions, 710 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 718365ec99d..6ace1466883 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -19,26 +19,30 @@
# <pep8 compliant>
from bpy.types import Menu, Panel, UIList
from bl_ui.properties_grease_pencil_common import (
- GreasePencilStrokeEditPanel,
- GreasePencilStrokeSculptPanel,
GreasePencilSculptOptionsPanel,
- GreasePencilAppearancePanel,
+ GreasePencilDisplayPanel,
)
from bl_ui.properties_paint_common import (
UnifiedPaintPanel,
- brush_mask_texture_settings,
- brush_texpaint_common,
- brush_texpaint_common_color,
- brush_texpaint_common_gradient,
- brush_texpaint_common_clone,
- brush_texpaint_common_options,
+ BrushSelectPanel,
+ ClonePanel,
+ TextureMaskPanel,
+ ColorPalettePanel,
+ StrokePanel,
+ SmoothStrokePanel,
+ FalloffPanel,
+ DisplayPanel,
brush_texture_settings,
+ brush_mask_texture_settings,
+ brush_settings,
+ brush_settings_advanced,
+ draw_color_settings,
)
from bl_ui.utils import PresetPanel
class VIEW3D_MT_brush_context_menu(Menu):
- bl_label = "Material Specials"
+ bl_label = "Brush Specials"
def draw(self, context):
layout = self.layout
@@ -110,9 +114,8 @@ def draw_vpaint_symmetry(layout, vpaint):
col.use_property_decorate = False
col.prop(vpaint, "radial_symmetry", text="Radial")
-# Most of these panels should not be visible in GP edit modes
-
+# Most of these panels should not be visible in GP edit modes
def is_not_gpencil_edit_mode(context):
is_gpmode = (
context.active_object and
@@ -318,27 +321,41 @@ class VIEW3D_PT_tools_posemode_options(View3DPanel, Panel):
# ********** default tools for paint modes ****************
+class TEXTURE_UL_texpaintslots(UIList):
+ def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index):
+ # mat = data
-class View3DPaintPanel(UnifiedPaintPanel):
- bl_space_type = 'VIEW_3D'
- bl_region_type = 'UI'
+ if self.layout_type in {'DEFAULT', 'COMPACT'}:
+ layout.prop(item, "name", text="", emboss=False, icon_value=icon)
+ elif self.layout_type == 'GRID':
+ layout.alignment = 'CENTER'
+ layout.label(text="")
+
+class View3DPaintPanel(View3DPanel, UnifiedPaintPanel):
bl_category = "Tool"
+class View3DPaintBrushPanel(View3DPaintPanel):
+ @classmethod
+ def poll(cls, context):
+ mode = cls.get_brush_mode(context)
+ return mode is not None
+
+
class VIEW3D_PT_tools_particlemode(Panel, View3DPaintPanel):
bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_label = "Particle tools"
+ bl_label = "Particle Tool"
bl_options = {'HIDE_HEADER'}
@classmethod
def poll(cls, context):
- settings = cls.paint_settings(context)
+ settings = context.tool_settings.particle_edit
return (settings and settings.brush and context.particle_edit_object)
def draw(self, context):
layout = self.layout
- settings = self.paint_settings(context)
+ settings = context.tool_settings.particle_edit
brush = settings.brush
tool = settings.tool
@@ -371,19 +388,15 @@ class VIEW3D_PT_tools_particlemode(Panel, View3DPaintPanel):
# TODO, move to space_view3d.py
-class VIEW3D_PT_tools_brush(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_label = "Brush"
+class VIEW3D_PT_tools_brush_select(Panel, View3DPaintBrushPanel, BrushSelectPanel):
+ bl_context = ".paint_common"
+ bl_label = "Brushes"
- @classmethod
- def poll(cls, context):
- settings = cls.paint_settings(context)
- return (settings and
- settings.brush and
- (context.sculpt_object or
- context.vertex_paint_object or
- context.weight_paint_object or
- context.image_paint_object))
+
+# TODO, move to space_view3d.py
+class VIEW3D_PT_tools_brush_settings(Panel, View3DPaintBrushPanel):
+ bl_context = ".paint_common"
+ bl_label = "Brush Settings"
def draw(self, context):
layout = self.layout
@@ -394,158 +407,29 @@ class VIEW3D_PT_tools_brush(Panel, View3DPaintPanel):
settings = self.paint_settings(context)
brush = settings.brush
- if not self.is_popover:
- row = layout.row()
- row.column().template_ID_preview(settings, "brush", new="brush.add", rows=3, cols=8)
- row.menu("VIEW3D_MT_brush_context_menu", icon='DOWNARROW_HLT', text="")
-
- # Sculpt Mode #
- if context.sculpt_object and brush:
- from bl_ui.properties_paint_common import (
- brush_basic_sculpt_settings,
- )
-
- capabilities = brush.sculpt_capabilities
-
- col = layout.column()
-
- if not self.is_popover:
- brush_basic_sculpt_settings(col, context, brush)
-
- # normal_radius_factor
- col.separator()
- row = col.row()
- row.prop(brush, "normal_radius_factor", slider=True)
-
- if brush.sculpt_tool == 'ELASTIC_DEFORM':
- col.separator()
- row = col.row()
- row.prop(brush, "elastic_deform_type")
- row = col.row()
- row.prop(brush, "elastic_deform_volume_preservation", slider=True)
- elif brush.sculpt_tool == 'POSE':
- row = col.row()
- row.prop(brush, "pose_offset")
- row = col.row()
- row.prop(brush, "pose_smooth_iterations")
- elif brush.sculpt_tool == 'SCRAPE':
- row = col.row()
- row.prop(brush, "invert_to_scrape_fill", text = "Invert to Fill")
- elif brush.sculpt_tool == 'FILL':
- row = col.row()
- row.prop(brush, "invert_to_scrape_fill", text = "Invert to Scrape")
- elif brush.sculpt_tool == 'GRAB':
- col.separator()
- row = col.row()
- row.prop(brush, "use_grab_active_vertex")
- elif brush.sculpt_tool == 'MULTIPLANE_SCRAPE':
- row = col.row()
- row.prop(brush, "multiplane_scrape_angle")
- row = col.row()
- row.prop(brush, "use_multiplane_scrape_dynamic")
- row = col.row()
- row.prop(brush, "show_multiplane_scrape_planes_preview")
-
- # topology_rake_factor
- if (
- capabilities.has_topology_rake and
- context.sculpt_object.use_dynamic_topology_sculpting
- ):
- row = col.row()
- row.prop(brush, "topology_rake_factor", slider=True)
-
- # auto_smooth_factor and use_inverse_smooth_pressure
- if capabilities.has_auto_smooth:
- row = col.row(align=True)
- row.prop(brush, "auto_smooth_factor", slider=True)
- row.prop(brush, "use_inverse_smooth_pressure", toggle=True, text="")
-
- # normal_weight
- if capabilities.has_normal_weight:
- row = col.row(align=True)
- row.prop(brush, "normal_weight", slider=True)
-
- # crease_pinch_factor
- if capabilities.has_pinch_factor:
- row = col.row(align=True)
- if brush.sculpt_tool in {'BLOB', 'SNAKE_HOOK'}:
- row.prop(brush, "crease_pinch_factor", slider=True, text="Magnify")
- else:
- row.prop(brush, "crease_pinch_factor", slider=True, text="Pinch")
+ brush_settings(layout.column(), context, brush, popover=self.is_popover)
- # rake_factor
- if capabilities.has_rake_factor:
- row = col.row(align=True)
- row.prop(brush, "rake_factor", slider=True)
-
- if brush.sculpt_tool == 'MASK':
- col.prop(brush, "mask_tool")
-
- # plane_offset, use_offset_pressure, use_plane_trim, plane_trim
- if capabilities.has_plane_offset:
- row = col.row(align=True)
- row.prop(brush, "plane_offset", slider=True)
- row.prop(brush, "use_offset_pressure", text="")
-
- col.separator()
-
- row = col.row()
- row.prop(brush, "use_plane_trim", text="Plane Trim")
- row = col.row()
- row.active = brush.use_plane_trim
- row.prop(brush, "plane_trim", slider=True, text="Distance")
-
- # height
- if capabilities.has_height:
- row = col.row()
- row.prop(brush, "height", slider=True, text="Height")
-
- # use_persistent, set_persistent_base
- if capabilities.has_persistence:
- ob = context.sculpt_object
- do_persistent = True
-
- # not supported yet for this case
- for md in ob.modifiers:
- if md.type == 'MULTIRES':
- do_persistent = False
- break
-
- if do_persistent:
- col.prop(brush, "use_persistent")
- col.operator("sculpt.set_persistent_base")
-
- # Texture Paint Mode #
-
- elif context.image_paint_object and brush:
- brush_texpaint_common(self, context, layout, brush, settings, projpaint=True)
-
- # Weight Paint Mode #
- elif context.weight_paint_object and brush:
- from bl_ui.properties_paint_common import (
- brush_basic_wpaint_settings,
- )
-
- col = layout.column()
+class VIEW3D_PT_tools_brush_settings_advanced(Panel, View3DPaintBrushPanel):
+ bl_context = ".paint_common"
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
+ bl_label = "Advanced"
+ bl_options = {'DEFAULT_CLOSED'}
- if not self.is_popover:
- brush_basic_wpaint_settings(col, context, brush)
+ def draw(self, context):
+ layout = self.layout
- # Vertex Paint Mode #
- elif context.vertex_paint_object and brush:
- from bl_ui.properties_paint_common import (
- brush_basic_vpaint_settings,
- )
+ layout.use_property_split = True
+ layout.use_property_decorate = False # No animation.
- col = layout.column()
+ settings = UnifiedPaintPanel.paint_settings(context)
+ brush = settings.brush
- if not self.is_popover:
- brush_basic_vpaint_settings(col, context, brush)
+ brush_settings_advanced(layout.column(), context, brush, self.is_popover)
class VIEW3D_PT_tools_brush_color(Panel, View3DPaintPanel):
bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_parent_id = "VIEW3D_PT_tools_brush"
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
bl_label = "Color Picker"
@classmethod
@@ -565,138 +449,22 @@ class VIEW3D_PT_tools_brush_color(Panel, View3DPaintPanel):
settings = self.paint_settings(context)
brush = settings.brush
- if context.vertex_paint_object:
- brush_texpaint_common_color(self, context, layout, brush, settings, projpaint=True)
+ draw_color_settings(context, layout, brush, color_type = not context.vertex_paint_object)
- else:
- layout.prop(brush, "color_type", expand=True)
- if brush.color_type == 'COLOR':
- brush_texpaint_common_color(self, context, layout, brush, settings, projpaint=True)
- elif brush.color_type == 'GRADIENT':
- brush_texpaint_common_gradient(self, context, layout, brush, settings, projpaint=True)
-
-
-class VIEW3D_PT_tools_brush_swatches(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_parent_id = "VIEW3D_PT_tools_brush"
+class VIEW3D_PT_tools_brush_swatches(Panel, View3DPaintPanel, ColorPalettePanel):
+ bl_context = ".paint_common"
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
bl_label = "Color Palette"
bl_options = {'DEFAULT_CLOSED'}
- @classmethod
- def poll(cls, context):
- settings = cls.paint_settings(context)
- brush = settings.brush
- if context.image_paint_object:
- capabilities = brush.image_paint_capabilities
- return capabilities.has_color
-
- elif context.vertex_paint_object:
- capabilities = brush.vertex_paint_capabilities
- return capabilities.has_color
- def draw(self, context):
- layout = self.layout
- settings = self.paint_settings(context)
-
- layout.template_ID(settings, "palette", new="palette.new")
- if settings.palette:
- layout.template_palette(settings, "palette", color=True)
-
-
-class VIEW3D_PT_tools_brush_clone(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_parent_id = "VIEW3D_PT_tools_brush"
+class VIEW3D_PT_tools_brush_clone(Panel, View3DPaintPanel, ClonePanel):
+ bl_context = ".paint_common"
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
bl_label = "Clone from Paint Slot"
bl_options = {'DEFAULT_CLOSED'}
- @classmethod
- def poll(cls, context):
- settings = cls.paint_settings(context)
- brush = settings.brush
-
- return brush.image_tool == 'CLONE'
-
- def draw_header(self, context):
- settings = self.paint_settings(context)
- self.layout.prop(settings, "use_clone_layer", text="")
-
- def draw(self, context):
- layout = self.layout
- settings = self.paint_settings(context)
- brush = settings.brush
-
- layout.active = settings.use_clone_layer
-
- brush_texpaint_common_clone(self, context, layout, brush, settings, projpaint=True)
-
-
-class VIEW3D_PT_tools_brush_options(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_parent_id = "VIEW3D_PT_tools_brush"
- bl_label = "Options"
- bl_options = {'DEFAULT_CLOSED'}
-
- def draw(self, context):
- layout = self.layout
- tool_settings = context.tool_settings
- settings = self.paint_settings(context)
- brush = settings.brush
- capabilities = brush.sculpt_capabilities
-
- layout.use_property_split = True
- layout.use_property_decorate = False # No animation.
-
- col = layout.column()
-
- if context.image_paint_object and brush:
- brush_texpaint_common_options(self, context, layout, brush, settings, projpaint=True)
-
- elif context.sculpt_object and brush:
- col.prop(brush, "use_automasking_topology")
- if capabilities.has_accumulate:
- col.prop(brush, "use_accumulate")
-
- UnifiedPaintPanel.prop_unified_size(col, context, brush, "use_locked_size")
-
- if capabilities.has_sculpt_plane:
- col.prop(brush, "sculpt_plane")
- col.prop(brush, "use_original_normal")
- col.prop(brush, "use_original_plane")
-
- col.prop(brush, "use_frontface", text="Front Faces Only")
- col.prop(brush, "use_projected")
-
- elif context.weight_paint_object and brush:
-
- if brush.weight_tool != 'SMEAR':
- col.prop(brush, "use_accumulate")
-
- col.prop(brush, "use_frontface", text="Front Faces Only")
- col.prop(brush, "use_projected")
- col.prop(tool_settings, "use_auto_normalize", text="Auto Normalize")
- col.prop(tool_settings, "use_multipaint", text="Multi-Paint")
-
- elif context.vertex_paint_object and brush:
-
- if brush.vertex_tool != 'SMEAR':
- col.prop(brush, "use_accumulate")
-
- col.prop(brush, "use_alpha")
- col.prop(brush, "use_frontface", text="Front Faces Only")
- col.prop(brush, "use_projected")
-
-
-class TEXTURE_UL_texpaintslots(UIList):
- def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index):
- # mat = data
-
- if self.layout_type in {'DEFAULT', 'COMPACT'}:
- layout.prop(item, "name", text="", emboss=False, icon_value=icon)
- elif self.layout_type == 'GRID':
- layout.alignment = 'CENTER'
- layout.label(text="")
-
class VIEW3D_MT_tools_projectpaint_uvlayer(Menu):
bl_label = "Clone Layer"
@@ -782,9 +550,8 @@ class VIEW3D_PT_slots_projectpaint(View3DPanel, Panel):
layout.separator()
layout.operator("image.save_all_modified", text="Save All Images", icon='FILE_TICK')
-# TODO, move to space_view3d.py
-
+# TODO, move to space_view3d.py
class VIEW3D_PT_stencil_projectpaint(View3DPanel, Panel):
bl_category = "Tool"
bl_context = ".imagepaint" # dot on purpose (access from topbar)
@@ -836,73 +603,17 @@ class VIEW3D_PT_stencil_projectpaint(View3DPanel, Panel):
# TODO, move to space_view3d.py
-class VIEW3D_PT_tools_brush_display(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_label = "Display"
+class VIEW3D_PT_tools_brush_display(Panel, View3DPaintBrushPanel, DisplayPanel):
+ bl_context = ".paint_common"
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
+ bl_label = "Cursor"
bl_options = {'DEFAULT_CLOSED'}
- @classmethod
- def poll(cls, context):
- settings = cls.paint_settings(context)
- return (settings and
- settings.brush and
- (context.sculpt_object or
- context.vertex_paint_object or
- context.weight_paint_object or
- context.image_paint_object))
-
- def draw(self, context):
- layout = self.layout
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- settings = self.paint_settings(context)
- brush = settings.brush
- tex_slot = brush.texture_slot
- tex_slot_mask = brush.mask_texture_slot
-
- col = layout.column()
-
- row = col.row(align=True)
-
- sub = row.row(align=True)
- sub.prop(brush, "cursor_overlay_alpha", text="Curve Alpha")
- sub.prop(brush, "use_cursor_overlay_override", toggle=True, text="", icon='BRUSH_DATA')
- row.prop(
- brush, "use_cursor_overlay", text="", toggle=True,
- icon='HIDE_OFF' if brush.use_cursor_overlay else 'HIDE_ON',
- )
-
- col.active = brush.brush_capabilities.has_overlay
-
- if context.image_paint_object or context.sculpt_object or context.vertex_paint_object:
- row = col.row(align=True)
-
- sub = row.row(align=True)
- sub.prop(brush, "texture_overlay_alpha", text="Texture Alpha")
- sub.prop(brush, "use_primary_overlay_override", toggle=True, text="", icon='BRUSH_DATA')
- if tex_slot.map_mode != 'STENCIL':
- row.prop(
- brush, "use_primary_overlay", text="", toggle=True,
- icon='HIDE_OFF' if brush.use_primary_overlay else 'HIDE_ON',
- )
-
- if context.image_paint_object:
- row = col.row(align=True)
-
- sub = row.row(align=True)
- sub.prop(brush, "mask_overlay_alpha", text="Mask Texture Alpha")
- sub.prop(brush, "use_secondary_overlay_override", toggle=True, text="", icon='BRUSH_DATA')
- if tex_slot_mask.map_mode != 'STENCIL':
- row.prop(
- brush, "use_secondary_overlay", text="", toggle=True,
- icon='HIDE_OFF' if brush.use_secondary_overlay else 'HIDE_ON',
- )
-
# TODO, move to space_view3d.py
class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
+ bl_context = ".paint_common"
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
bl_label = "Texture"
bl_options = {'DEFAULT_CLOSED'}
@@ -926,9 +637,10 @@ class VIEW3D_PT_tools_brush_texture(Panel, View3DPaintPanel):
# TODO, move to space_view3d.py
-class VIEW3D_PT_tools_mask_texture(Panel, View3DPaintPanel):
+class VIEW3D_PT_tools_mask_texture(Panel, View3DPaintPanel, TextureMaskPanel):
bl_category = "Tool"
bl_context = ".imagepaint" # dot on purpose (access from topbar)
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
bl_label = "Texture Mask"
bl_options = {'DEFAULT_CLOSED'}
@@ -950,151 +662,27 @@ class VIEW3D_PT_tools_mask_texture(Panel, View3DPaintPanel):
# TODO, move to space_view3d.py
-class VIEW3D_PT_tools_brush_stroke(Panel, View3DPaintPanel):
+class VIEW3D_PT_tools_brush_stroke(Panel, View3DPaintPanel, StrokePanel):
bl_context = ".paint_common" # dot on purpose (access from topbar)
bl_label = "Stroke"
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
bl_options = {'DEFAULT_CLOSED'}
- @classmethod
- def poll(cls, context):
- settings = cls.paint_settings(context)
- return (settings and
- settings.brush and
- (context.sculpt_object or
- context.vertex_paint_object or
- context.weight_paint_object or
- context.image_paint_object))
- def draw(self, context):
- layout = self.layout
-
- settings = self.paint_settings(context)
- brush = settings.brush
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- col = layout.column()
-
- col.prop(brush, "stroke_method")
-
- if brush.use_anchor:
- col.prop(brush, "use_edge_to_edge", text="Edge To Edge")
-
- if brush.use_airbrush:
- col.prop(brush, "rate", text="Rate", slider=True)
-
- if brush.use_space:
- row = col.row(align=True)
- row.prop(brush, "spacing", text="Spacing")
- row.prop(brush, "use_pressure_spacing", toggle=True, text="")
- col.prop(brush, "dash_ratio")
- col.prop(brush, "dash_samples")
-
- if brush.use_line or brush.use_curve:
- row = col.row(align=True)
- row.prop(brush, "spacing", text="Spacing")
- col.prop(brush, "dash_ratio")
- col.prop(brush, "dash_samples")
-
- if brush.use_curve:
- col.template_ID(brush, "paint_curve", new="paintcurve.new")
- col.operator("paintcurve.draw")
-
- if context.sculpt_object:
-
- if brush.sculpt_capabilities.has_space_attenuation:
- col.prop(brush, "use_space_attenuation")
-
- col.prop(brush, "use_scene_spacing")
-
- if brush.sculpt_capabilities.has_jitter:
-
- row = col.row(align=True)
- if brush.use_relative_jitter:
- row.prop(brush, "jitter", slider=True)
- else:
- row.prop(brush, "jitter_absolute")
- row.prop(brush, "use_relative_jitter", icon_only=True)
- row.prop(brush, "use_pressure_jitter", toggle=True, text="")
-
- else:
-
- row = col.row(align=True)
- if brush.use_relative_jitter:
- row.prop(brush, "jitter", slider=True)
- else:
- row.prop(brush, "jitter_absolute")
- row.prop(brush, "use_relative_jitter", icon_only=True)
- row.prop(brush, "use_pressure_jitter", toggle=True, text="")
-
- col.prop(settings, "input_samples")
-
-
-class VIEW3D_PT_tools_brush_stroke_smooth_stroke(Panel, View3DPaintPanel):
+class VIEW3D_PT_tools_brush_stroke_smooth_stroke(Panel, View3DPaintPanel, SmoothStrokePanel):
bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_label = "Smooth Stroke"
+ bl_label = "Stabilize Stroke"
bl_parent_id = "VIEW3D_PT_tools_brush_stroke"
bl_options = {'DEFAULT_CLOSED'}
- @classmethod
- def poll(cls, context):
- settings = cls.paint_settings(context)
- brush = settings.brush
- if brush.brush_capabilities.has_smooth_stroke:
- return True
-
- def draw_header(self, context):
- settings = self.paint_settings(context)
- brush = settings.brush
-
- self.layout.prop(brush, "use_smooth_stroke", text="")
-
- def draw(self, context):
- layout = self.layout
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- settings = self.paint_settings(context)
- brush = settings.brush
-
- col = layout.column()
- col.active = brush.use_smooth_stroke
- col.prop(brush, "smooth_stroke_radius", text="Radius", slider=True)
- col.prop(brush, "smooth_stroke_factor", text="Factor", slider=True)
-
# TODO, move to space_view3d.py
-class VIEW3D_PT_tools_brush_falloff(Panel, View3DPaintPanel):
+class VIEW3D_PT_tools_brush_falloff(Panel, View3DPaintPanel, FalloffPanel):
bl_context = ".paint_common" # dot on purpose (access from topbar)
+ bl_parent_id = "VIEW3D_PT_tools_brush_settings"
bl_label = "Falloff"
bl_options = {'DEFAULT_CLOSED'}
- @classmethod
- def poll(cls, context):
- settings = cls.paint_settings(context)
- return (settings and settings.brush and settings.brush.curve)
-
- def draw(self, context):
- layout = self.layout
- settings = self.paint_settings(context)
- brush = settings.brush
-
- col = layout.column(align=True)
- row = col.row(align=True)
- row.prop(brush, "curve_preset", text="")
-
- if brush.curve_preset == 'CUSTOM':
- layout.template_curve_mapping(brush, "curve", brush=True)
-
- col = layout.column(align=True)
- row = col.row(align=True)
- row.operator("brush.curve_preset", icon='SMOOTHCURVE', text="").shape = 'SMOOTH'
- row.operator("brush.curve_preset", icon='SPHERECURVE', text="").shape = 'ROUND'
- row.operator("brush.curve_preset", icon='ROOTCURVE', text="").shape = 'ROOT'
- row.operator("brush.curve_preset", icon='SHARPCURVE', text="").shape = 'SHARP'
- row.operator("brush.curve_preset", icon='LINCURVE', text="").shape = 'LINE'
- row.operator("brush.curve_preset", icon='NOCURVE', text="").shape = 'MAX'
-
class VIEW3D_PT_tools_brush_falloff_frontface(View3DPaintPanel, Panel):
bl_context = ".imagepaint" # dot on purpose (access from topbar)
@@ -1265,8 +853,6 @@ class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel):
col.operator("object.voxel_remesh", text="Remesh")
# TODO, move to space_view3d.py
-
-
class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
bl_context = ".sculpt_mode" # dot on purpose (access from topbar)
bl_label = "Options"
@@ -1293,24 +879,6 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
col = flow.column()
col.prop(sculpt, "use_deform_only")
-
-class VIEW3D_PT_sculpt_options_unified(Panel, View3DPaintPanel):
- bl_context = ".sculpt_mode" # dot on purpose (access from topbar)
- bl_parent_id = "VIEW3D_PT_sculpt_options"
- bl_label = "Unified Brush"
-
- @classmethod
- def poll(cls, context):
- return (context.sculpt_object and context.tool_settings.sculpt)
-
- def draw(self, context):
- layout = self.layout
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- self.unified_paint_settings(layout, context)
-
-
class VIEW3D_PT_sculpt_options_gravity(Panel, View3DPaintPanel):
bl_context = ".sculpt_mode" # dot on purpose (access from topbar)
bl_parent_id = "VIEW3D_PT_sculpt_options"
@@ -1409,64 +977,6 @@ class VIEW3D_PT_sculpt_symmetry_for_topbar(Panel):
draw = VIEW3D_PT_sculpt_symmetry.draw
-class VIEW3D_PT_tools_brush_display_show_brush(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_label = "Show Brush"
- bl_parent_id = "VIEW3D_PT_tools_brush_display"
- bl_options = {'DEFAULT_CLOSED'}
-
- def draw_header(self, context):
- settings = self.paint_settings(context)
-
- self.layout.prop(settings, "show_brush", text="")
-
- def draw(self, context):
- layout = self.layout
-
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- settings = self.paint_settings(context)
- brush = settings.brush
-
- col = layout.column()
- col.active = settings.show_brush
-
- if context.sculpt_object and context.tool_settings.sculpt:
- if brush.sculpt_capabilities.has_secondary_color:
- col.prop(brush, "cursor_color_add", text="Add")
- col.prop(brush, "cursor_color_subtract", text="Subtract")
- else:
- col.prop(brush, "cursor_color_add", text="Color")
- else:
- col.prop(brush, "cursor_color_add", text="Color")
-
-
-class VIEW3D_PT_tools_brush_display_custom_icon(Panel, View3DPaintPanel):
- bl_context = ".paint_common" # dot on purpose (access from topbar)
- bl_label = "Custom Icon"
- bl_parent_id = "VIEW3D_PT_tools_brush_display"
- bl_options = {'DEFAULT_CLOSED'}
-
- def draw_header(self, context):
- settings = self.paint_settings(context)
- brush = settings.brush
-
- self.layout.prop(brush, "use_custom_icon", text="")
-
- def draw(self, context):
- layout = self.layout
-
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- settings = self.paint_settings(context)
- brush = settings.brush
-
- col = layout.column()
- col.active = brush.use_custom_icon
- col.prop(brush, "icon_filepath", text="")
-
# ********** default tools for weight-paint ****************
@@ -1512,6 +1022,10 @@ class VIEW3D_PT_tools_weightpaint_options(Panel, View3DPaintPanel):
wpaint = tool_settings.weight_paint
col = layout.column()
+
+ col.prop(tool_settings, "use_auto_normalize", text="Auto Normalize")
+ col.prop(tool_settings, "use_multipaint", text="Multi-Paint")
+
col.prop(wpaint, "use_group_restrict")
obj = context.weight_paint_object
@@ -1523,19 +1037,6 @@ class VIEW3D_PT_tools_weightpaint_options(Panel, View3DPaintPanel):
row.prop(mesh, "use_mirror_topology")
-class VIEW3D_PT_tools_weightpaint_options_unified(Panel, View3DPaintPanel):
- bl_context = ".weightpaint"
- bl_label = "Unified Brush"
- bl_parent_id = "VIEW3D_PT_tools_weightpaint_options"
-
- def draw(self, context):
- layout = self.layout
-
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- self.unified_paint_settings(layout, context)
-
# ********** default tools for vertex-paint ****************
@@ -1545,16 +1046,16 @@ class VIEW3D_PT_tools_vertexpaint_options(Panel, View3DPaintPanel):
bl_label = "Options"
bl_options = {'DEFAULT_CLOSED'}
+ @classmethod
+ def poll(self, context):
+ # This is currently unused, since there aren't any Vertex Paint mode specific options.
+ return False
+
def draw(self, context):
layout = self.layout
-
- layout.label(text="Unified Brush")
-
layout.use_property_split = True
layout.use_property_decorate = False
- self.unified_paint_settings(layout, context)
-
# TODO, move to space_view3d.py
class VIEW3D_PT_tools_vertexpaint_symmetry(Panel, View3DPaintPanel):
@@ -1676,19 +1177,6 @@ class VIEW3D_PT_tools_imagepaint_options(View3DPaintPanel, Panel):
col.prop(ipaint, "use_backface_culling", text="Backface Culling")
-class VIEW3D_PT_tools_imagepaint_options_unified(Panel, View3DPaintPanel):
- bl_context = ".imagepaint" # dot on purpose (access from topbar)
- bl_parent_id = "VIEW3D_PT_tools_imagepaint_options"
- bl_label = "Unified Brush"
-
- def draw(self, context):
- layout = self.layout
- layout.use_property_split = True
- layout.use_property_decorate = False
-
- self.unified_paint_settings(layout, context)
-
-
class VIEW3D_PT_tools_imagepaint_options_cavity(View3DPaintPanel, Panel):
bl_context = ".imagepaint" # dot on purpose (access from topbar)
bl_label = "Cavity Mask"
@@ -1719,13 +1207,14 @@ class VIEW3D_PT_imagepaint_options(View3DPaintPanel):
@classmethod
def poll(cls, context):
+ # This is currently unused, since there aren't any Vertex Paint mode specific options.
+ return False
return (context.image_paint_object and context.tool_settings.image_paint)
def draw(self, context):
layout = self.layout
-
- col = layout.column()
- self.unified_paint_settings(col, context)
+ layout.use_property_split = True
+ layout.use_property_decorate = False
class VIEW3D_MT_tools_projectpaint_stencil(Menu):
@@ -1842,15 +1331,13 @@ class VIEW3D_PT_tools_particlemode_options_display(View3DPanel, Panel):
# Grease Pencil drawing brushes
-class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel):
+class GreasePencilPanel:
bl_context = ".greasepencil_paint"
- bl_label = "Brush"
bl_category = "Tool"
@classmethod
def poll(cls, context):
- is_3d_view = context.space_data.type == 'VIEW_3D'
- if is_3d_view:
+ if context.space_data.type in ('VIEW_3D', 'PROPERTIES'):
if context.gpencil_data is None:
return False
@@ -1859,6 +1346,10 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel):
else:
return True
+
+class VIEW3D_PT_tools_grease_pencil_brush_select(Panel, View3DPanel, GreasePencilPanel):
+ bl_label = "Brushes"
+
def draw(self, context):
layout = self.layout
layout.use_property_split = True
@@ -1868,14 +1359,39 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel):
gpencil_paint = tool_settings.gpencil_paint
row = layout.row()
- col = row.column()
- col.template_ID_preview(gpencil_paint, "brush", new="brush.add_gpencil", rows=3, cols=8)
+ row.column().template_ID_preview(gpencil_paint, "brush", new="brush.add_gpencil", rows=3, cols=8)
col = row.column()
- brush = gpencil_paint.brush
+ col.operator("gpencil.brush_presets_create", icon='PRESET_NEW', text="")
+
+ if context.mode == 'PAINT_GPENCIL':
+ brush = tool_settings.gpencil_paint.brush
+ gp_settings = brush.gpencil_settings
+
+ col.prop(brush, "use_custom_icon", toggle=True, icon='FILE_IMAGE', text="")
+
+ if(brush.use_custom_icon):
+ layout.row().prop(brush, "icon_filepath", text="")
+ else:
+ layout.row().prop(gp_settings, "gp_icon", text="Icon")
+
+
+class VIEW3D_PT_tools_grease_pencil_brush_settings(Panel, View3DPanel, GreasePencilPanel):
+ bl_label = "Brush Settings"
- sub = col.column(align=True)
- sub.operator("gpencil.brush_presets_create", icon='PRESET_NEW', text="")
+ # What is the point of brush presets? Seems to serve the exact same purpose as brushes themselves??
+ def draw_header_preset(self, _context):
+ VIEW3D_PT_gpencil_brush_presets.draw_panel_header(self.layout)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
+ tool_settings = context.scene.tool_settings
+ gpencil_paint = tool_settings.gpencil_paint
+
+ brush = gpencil_paint.brush
if brush is not None:
gp_settings = brush.gpencil_settings
@@ -1895,63 +1411,68 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel):
from bl_ui.properties_paint_common import (
brush_basic_gpencil_paint_settings,
)
- tool = context.workspace.tools.from_space_view3d_mode(context.mode, create=False)
- brush_basic_gpencil_paint_settings(layout, context, brush, tool, compact=True, is_toolbar=False)
+ brush_basic_gpencil_paint_settings(layout, context, brush, compact=False)
-# Grease Pencil drawing brushes options
-class VIEW3D_PT_tools_grease_pencil_brush_option(View3DPanel, Panel):
+class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel):
bl_context = ".greasepencil_paint"
- bl_label = "Options"
+ bl_label = "Advanced"
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings'
bl_category = "Tool"
+ bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context):
brush = context.tool_settings.gpencil_paint.brush
- return brush is not None and brush.gpencil_tool not in {'ERASE', 'FILL'}
-
- def draw_header_preset(self, _context):
- VIEW3D_PT_gpencil_brush_presets.draw_panel_header(self.layout)
+ return brush is not None and brush.gpencil_tool != 'ERASE'
def draw(self, context):
layout = self.layout
layout.use_property_split = True
layout.use_property_decorate = False
- brush = context.tool_settings.gpencil_paint.brush
+ tool_settings = context.scene.tool_settings
+ gpencil_paint = tool_settings.gpencil_paint
+ brush = gpencil_paint.brush
+ gp_settings = brush.gpencil_settings
+ col = layout.column(align=True)
if brush is not None:
- gp_settings = brush.gpencil_settings
- col = layout.column(align=True)
- col.prop(gp_settings, "input_samples")
- col.separator()
+ if brush.gpencil_tool != 'FILL':
+ col.prop(gp_settings, "input_samples")
+ col.separator()
- col.prop(gp_settings, "active_smooth_factor")
- col.separator()
+ col.prop(gp_settings, "active_smooth_factor")
+ col.separator()
- col.prop(gp_settings, "angle", slider=True)
- col.prop(gp_settings, "angle_factor", text="Factor", slider=True)
+ col.prop(gp_settings, "angle", slider=True)
+ col.prop(gp_settings, "angle_factor", text="Factor", slider=True)
- ob = context.object
- if ob and brush.gpencil_settings.use_material_pin is False:
- ma = ob.active_material
- elif brush.gpencil_settings.material:
- ma = brush.gpencil_settings.material
- else:
+ ob = context.object
ma = None
+ if ob and brush.gpencil_settings.use_material_pin is False:
+ ma = ob.active_material
+ elif brush.gpencil_settings.material:
+ ma = brush.gpencil_settings.material
- col.separator()
- subcol = col.column(align=True)
- if ma and ma.grease_pencil.mode == 'LINE':
- subcol.enabled = False
- subcol.prop(gp_settings, "gradient_factor", slider=True)
- subcol.prop(gp_settings, "gradient_shape")
+ col.separator()
+ subcol = col.column(align=True)
+ if ma and ma.grease_pencil.mode == 'LINE':
+ subcol.enabled = False
+ subcol.prop(gp_settings, "gradient_factor", slider=True)
+ subcol.prop(gp_settings, "gradient_shape")
+
+ elif brush.gpencil_tool == 'FILL':
+ col.prop(gp_settings, "fill_factor", text="Resolution")
+ if gp_settings.fill_draw_mode != 'STROKE':
+ col.prop(gp_settings, "show_fill", text="Ignore Transparent Strokes")
+ col.prop(gp_settings, "fill_threshold", text="Threshold")
-class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(View3DPanel, Panel):
+class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(Panel, View3DPanel):
bl_context = ".greasepencil_paint"
- bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_option'
- bl_label = "Stabilize"
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings'
+ bl_label = "Stabilize Stroke"
bl_category = "Tool"
bl_options = {'DEFAULT_CLOSED'}
@@ -1961,6 +1482,8 @@ class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(View3DPanel, Panel):
return brush is not None and brush.gpencil_tool == 'DRAW'
def draw_header(self, context):
+ if self.is_popover: return
+
brush = context.tool_settings.gpencil_paint.brush
gp_settings = brush.gpencil_settings
self.layout.prop(gp_settings, "use_settings_stabilizer", text="")
@@ -1972,24 +1495,34 @@ class VIEW3D_PT_tools_grease_pencil_brush_stabilizer(View3DPanel, Panel):
brush = context.tool_settings.gpencil_paint.brush
gp_settings = brush.gpencil_settings
- layout.active = gp_settings.use_settings_stabilizer
- layout.prop(brush, "smooth_stroke_radius", text="Radius", slider=True)
- layout.prop(brush, "smooth_stroke_factor", text="Factor", slider=True)
+ if self.is_popover:
+ row = layout.row()
+ row.prop(gp_settings, "use_settings_stabilizer", text="")
+ row.label(text=self.bl_label)
+
+ col = layout.column()
+ col.active = gp_settings.use_settings_stabilizer
+ col.prop(brush, "smooth_stroke_radius", text="Radius", slider=True)
+ col.prop(brush, "smooth_stroke_factor", text="Factor", slider=True)
-class VIEW3D_PT_tools_grease_pencil_brush_settings(View3DPanel, Panel):
+
+class VIEW3D_PT_tools_grease_pencil_brush_post_processing(View3DPanel, Panel):
bl_context = ".greasepencil_paint"
- bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_option'
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings'
bl_label = "Post-Processing"
bl_category = "Tool"
+ bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(cls, context):
brush = context.tool_settings.gpencil_paint.brush
- return brush is not None and brush.gpencil_tool != 'ERASE'
+ return brush is not None and brush.gpencil_tool not in ('ERASE', 'FILL')
def draw_header(self, context):
+ if self.is_popover: return
+
brush = context.tool_settings.gpencil_paint.brush
gp_settings = brush.gpencil_settings
self.layout.prop(gp_settings, "use_settings_postprocess", text="")
@@ -2001,30 +1534,37 @@ class VIEW3D_PT_tools_grease_pencil_brush_settings(View3DPanel, Panel):
brush = context.tool_settings.gpencil_paint.brush
gp_settings = brush.gpencil_settings
- layout.active = gp_settings.use_settings_postprocess
- col = layout.column(align=True)
- col.prop(gp_settings, "pen_smooth_factor")
- col.prop(gp_settings, "pen_smooth_steps")
+ if self.is_popover:
+ row = layout.row()
+ row.prop(gp_settings, "use_settings_postprocess", text="")
+ row.label(text=self.bl_label)
- col = layout.column(align=True)
- col.prop(gp_settings, "pen_thick_smooth_factor")
- col.prop(gp_settings, "pen_thick_smooth_steps", text="Iterations")
+ col = layout.column()
+ col.active = gp_settings.use_settings_postprocess
- col = layout.column(align=True)
- col.prop(gp_settings, "pen_subdivision_steps")
- col.prop(gp_settings, "random_subdiv", text="Randomness", slider=True)
+ col1 = col.column(align=True)
+ col1.prop(gp_settings, "pen_smooth_factor")
+ col1.prop(gp_settings, "pen_smooth_steps")
- col = layout.column(align=True)
- col.prop(gp_settings, "simplify_factor")
+ col1 = col.column(align=True)
+ col1.prop(gp_settings, "pen_thick_smooth_factor")
+ col1.prop(gp_settings, "pen_thick_smooth_steps", text="Iterations")
- col = layout.column(align=True)
- col.prop(gp_settings, "trim")
+ col1 = col.column(align=True)
+ col1.prop(gp_settings, "pen_subdivision_steps")
+ col1.prop(gp_settings, "random_subdiv", text="Randomness", slider=True)
+
+ col1 = col.column(align=True)
+ col1.prop(gp_settings, "simplify_factor")
+
+ col1 = col.column(align=True)
+ col1.prop(gp_settings, "trim")
class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
bl_context = ".greasepencil_paint"
- bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_option'
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings'
bl_label = "Randomize"
bl_category = "Tool"
bl_options = {'DEFAULT_CLOSED'}
@@ -2032,9 +1572,11 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
@classmethod
def poll(cls, context):
brush = context.tool_settings.gpencil_paint.brush
- return brush is not None and brush.gpencil_tool != 'ERASE'
+ return brush is not None and brush.gpencil_tool not in ('ERASE', 'FILL')
def draw_header(self, context):
+ if self.is_popover: return
+
brush = context.tool_settings.gpencil_paint.brush
gp_settings = brush.gpencil_settings
self.layout.prop(gp_settings, "use_settings_random", text="")
@@ -2046,13 +1588,20 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
brush = context.tool_settings.gpencil_paint.brush
gp_settings = brush.gpencil_settings
- layout.active = gp_settings.use_settings_random
- layout.prop(gp_settings, "random_pressure", text="Pressure", slider=True)
- layout.prop(gp_settings, "random_strength", text="Strength", slider=True)
- layout.prop(gp_settings, "uv_random", text="UV", slider=True)
+ if self.is_popover:
+ row = layout.row()
+ row.prop(gp_settings, "use_settings_random", text="")
+ row.label(text=self.bl_label)
- row = layout.row(align=True)
+ col = layout.column()
+ col.active = gp_settings.use_settings_random
+
+ col.prop(gp_settings, "random_pressure", text="Pressure", slider=True)
+ col.prop(gp_settings, "random_strength", text="Strength", slider=True)
+ col.prop(gp_settings, "uv_random", text="UV", slider=True)
+
+ row = col.row(align=True)
row.prop(gp_settings, "pen_jitter", slider=True)
row.prop(gp_settings, "use_jitter_pressure", text="", icon='STYLUS_PRESSURE')
@@ -2060,6 +1609,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_random(View3DPanel, Panel):
# Grease Pencil drawingcurves
class VIEW3D_PT_tools_grease_pencil_brushcurves(View3DPanel, Panel):
bl_context = ".greasepencil_paint"
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings'
bl_label = "Curves"
bl_category = "Tool"
bl_options = {'DEFAULT_CLOSED'}
@@ -2124,12 +1674,6 @@ class VIEW3D_PT_tools_grease_pencil_brushcurves_jitter(View3DPanel, Panel):
use_negative_slope=True)
-# Grease Pencil stroke editing tools
-class VIEW3D_PT_tools_grease_pencil_edit(GreasePencilStrokeEditPanel, Panel):
- bl_space_type = 'VIEW_3D'
- bl_category = "Tool"
-
-
# Grease Pencil stroke interpolation tools
class VIEW3D_PT_tools_grease_pencil_interpolate(Panel):
bl_space_type = 'VIEW_3D'
@@ -2178,18 +1722,47 @@ class VIEW3D_PT_tools_grease_pencil_interpolate(Panel):
# Grease Pencil stroke sculpting tools
-class VIEW3D_PT_tools_grease_pencil_sculpt(GreasePencilStrokeSculptPanel, View3DPanel, Panel):
+
+class VIEW3D_PT_tools_grease_pencil_sculpt_select(Panel, View3DPanel):
bl_context = ".greasepencil_sculpt"
- bl_category = "Tools"
- bl_label = "Brush"
+ bl_label = "Brushes"
bl_category = "Tool"
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
+ settings = context.tool_settings.gpencil_sculpt
+ brush = settings.brush
+
+ layout.template_icon_view(settings, "sculpt_tool", show_labels=True)
+
+
+class VIEW3D_PT_tools_grease_pencil_sculpt_settings(Panel, View3DPanel):
+ bl_context = ".greasepencil_sculpt"
+ bl_category = "Tool"
+ bl_label = "Brush Settings"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
+ settings = context.tool_settings.gpencil_sculpt
+ brush = settings.brush
+
+ if not self.is_popover:
+ from bl_ui.properties_paint_common import (
+ brush_basic_gpencil_sculpt_settings,
+ )
+ brush_basic_gpencil_sculpt_settings(layout, context, brush)
# Grease Pencil weight painting tools
-class VIEW3D_PT_tools_grease_pencil_weight_paint(View3DPanel, Panel):
+
+class VIEW3D_PT_tools_grease_pencil_weight_paint_select(View3DPanel, Panel):
bl_context = ".greasepencil_weight"
- bl_category = "Tools"
- bl_label = "Brush"
+ bl_label = "Brushes"
bl_category = "Tool"
def draw(self, context):
@@ -2202,42 +1775,58 @@ class VIEW3D_PT_tools_grease_pencil_weight_paint(View3DPanel, Panel):
layout.template_icon_view(settings, "weight_tool", show_labels=True)
- col = layout.column()
+
+class VIEW3D_PT_tools_grease_pencil_weight_paint_settings(Panel, View3DPanel):
+ bl_context = ".greasepencil_weight"
+ bl_category = "Tool"
+ bl_label = "Brush Settings"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ layout.use_property_decorate = False
+
+ settings = context.tool_settings.gpencil_sculpt
+ brush = settings.brush
+
if not self.is_popover:
from bl_ui.properties_paint_common import (
brush_basic_gpencil_weight_settings,
)
- brush_basic_gpencil_weight_settings(col, context, brush)
+ brush_basic_gpencil_weight_settings(layout, context, brush)
-# Grease Pencil Brush Appearance (one for each mode)
-class VIEW3D_PT_tools_grease_pencil_paint_appearance(GreasePencilAppearancePanel, View3DPanel, Panel):
- bl_context = ".greasepencil_paint"
- bl_label = "Display"
+class VIEW3D_PT_tools_grease_pencil_sculpt_options(GreasePencilSculptOptionsPanel, Panel, View3DPanel):
+ bl_context = ".greasepencil_sculpt"
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_sculpt_settings'
bl_category = "Tool"
+ bl_label = "Sculpt Strokes"
-class VIEW3D_PT_tools_grease_pencil_sculpt_appearance(GreasePencilAppearancePanel, View3DPanel, Panel):
- bl_context = ".greasepencil_sculpt"
- bl_label = "Display"
+# Grease Pencil Brush Appearance (one for each mode)
+class VIEW3D_PT_tools_grease_pencil_paint_appearance(GreasePencilDisplayPanel, Panel, View3DPanel):
+ bl_context = ".greasepencil_paint"
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings'
+ bl_label = "Cursor"
bl_category = "Tool"
-class VIEW3D_PT_tools_grease_pencil_sculpt_options(GreasePencilSculptOptionsPanel, View3DPanel, Panel):
+class VIEW3D_PT_tools_grease_pencil_sculpt_appearance(GreasePencilDisplayPanel, Panel, View3DPanel):
bl_context = ".greasepencil_sculpt"
- bl_label = "Sculpt Strokes"
- bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_sculpt'
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_sculpt_settings'
+ bl_label = "Cursor"
bl_category = "Tool"
-class VIEW3D_PT_tools_grease_pencil_weight_appearance(GreasePencilAppearancePanel, View3DPanel, Panel):
+class VIEW3D_PT_tools_grease_pencil_weight_appearance(GreasePencilDisplayPanel, Panel, View3DPanel):
bl_context = ".greasepencil_weight"
- bl_label = "Display"
+ bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_weight_paint_settings'
bl_category = "Tool"
+ bl_label = "Cursor"
-class VIEW3D_PT_gpencil_brush_presets(PresetPanel, Panel):
+class VIEW3D_PT_gpencil_brush_presets(Panel, PresetPanel):
"""Brush settings"""
bl_label = "Brush Presets"
preset_subdir = "gpencil_brush"
@@ -2255,12 +1844,14 @@ classes = (
VIEW3D_PT_tools_curveedit_options_stroke,
VIEW3D_PT_tools_armatureedit_options,
VIEW3D_PT_tools_posemode_options,
+
VIEW3D_PT_slots_projectpaint,
- VIEW3D_PT_tools_brush,
+ VIEW3D_PT_tools_brush_select,
+ VIEW3D_PT_tools_brush_settings,
VIEW3D_PT_tools_brush_color,
VIEW3D_PT_tools_brush_swatches,
+ VIEW3D_PT_tools_brush_settings_advanced,
VIEW3D_PT_tools_brush_clone,
- VIEW3D_PT_tools_brush_options,
TEXTURE_UL_texpaintslots,
VIEW3D_MT_tools_projectpaint_uvlayer,
VIEW3D_PT_stencil_projectpaint,
@@ -2272,49 +1863,52 @@ classes = (
VIEW3D_PT_tools_brush_falloff_frontface,
VIEW3D_PT_tools_brush_falloff_normal,
VIEW3D_PT_tools_brush_display,
- VIEW3D_PT_tools_brush_display_show_brush,
- VIEW3D_PT_tools_brush_display_custom_icon,
+
VIEW3D_PT_sculpt_dyntopo,
VIEW3D_PT_sculpt_dyntopo_remesh,
VIEW3D_PT_sculpt_voxel_remesh,
VIEW3D_PT_sculpt_symmetry,
VIEW3D_PT_sculpt_symmetry_for_topbar,
VIEW3D_PT_sculpt_options,
- VIEW3D_PT_sculpt_options_unified,
VIEW3D_PT_sculpt_options_gravity,
+
VIEW3D_PT_tools_weightpaint_symmetry,
VIEW3D_PT_tools_weightpaint_symmetry_for_topbar,
VIEW3D_PT_tools_weightpaint_options,
- VIEW3D_PT_tools_weightpaint_options_unified,
+
VIEW3D_PT_tools_vertexpaint_symmetry,
VIEW3D_PT_tools_vertexpaint_symmetry_for_topbar,
VIEW3D_PT_tools_vertexpaint_options,
+
VIEW3D_PT_tools_imagepaint_symmetry,
VIEW3D_PT_tools_imagepaint_options,
VIEW3D_PT_tools_imagepaint_options_cavity,
- VIEW3D_PT_tools_imagepaint_options_unified,
VIEW3D_PT_tools_imagepaint_options_external,
VIEW3D_MT_tools_projectpaint_stencil,
+
VIEW3D_PT_tools_particlemode,
VIEW3D_PT_tools_particlemode_options,
VIEW3D_PT_tools_particlemode_options_shapecut,
VIEW3D_PT_tools_particlemode_options_display,
VIEW3D_PT_gpencil_brush_presets,
- VIEW3D_PT_tools_grease_pencil_brush,
- VIEW3D_PT_tools_grease_pencil_brush_option,
+ VIEW3D_PT_tools_grease_pencil_brush_select,
VIEW3D_PT_tools_grease_pencil_brush_settings,
+ VIEW3D_PT_tools_grease_pencil_brush_advanced,
+ VIEW3D_PT_tools_grease_pencil_brush_post_processing,
VIEW3D_PT_tools_grease_pencil_brush_stabilizer,
VIEW3D_PT_tools_grease_pencil_brush_random,
VIEW3D_PT_tools_grease_pencil_brushcurves,
VIEW3D_PT_tools_grease_pencil_brushcurves_sensitivity,
VIEW3D_PT_tools_grease_pencil_brushcurves_strength,
VIEW3D_PT_tools_grease_pencil_brushcurves_jitter,
- VIEW3D_PT_tools_grease_pencil_sculpt,
- VIEW3D_PT_tools_grease_pencil_weight_paint,
VIEW3D_PT_tools_grease_pencil_paint_appearance,
+ VIEW3D_PT_tools_grease_pencil_sculpt_select,
+ VIEW3D_PT_tools_grease_pencil_sculpt_settings,
VIEW3D_PT_tools_grease_pencil_sculpt_options,
VIEW3D_PT_tools_grease_pencil_sculpt_appearance,
+ VIEW3D_PT_tools_grease_pencil_weight_paint_select,
+ VIEW3D_PT_tools_grease_pencil_weight_paint_settings,
VIEW3D_PT_tools_grease_pencil_weight_appearance,
VIEW3D_PT_tools_grease_pencil_interpolate,
)