forked from bartvdbraak/blender
GP: Add new popover with layers panel
This commit is contained in:
parent
b8d55a570e
commit
ce1b57227d
@ -22,6 +22,7 @@ from bpy.types import Menu, Panel, UIList
|
|||||||
from rna_prop_ui import PropertyPanel
|
from rna_prop_ui import PropertyPanel
|
||||||
from .properties_grease_pencil_common import (
|
from .properties_grease_pencil_common import (
|
||||||
GreasePencilOnionPanel,
|
GreasePencilOnionPanel,
|
||||||
|
GPENCIL_UL_layer,
|
||||||
)
|
)
|
||||||
|
|
||||||
###############################
|
###############################
|
||||||
@ -66,39 +67,6 @@ class DATA_PT_gpencil(DataButtonsPanel, Panel):
|
|||||||
layout.template_ID(gpd_owner, "data")
|
layout.template_ID(gpd_owner, "data")
|
||||||
|
|
||||||
|
|
||||||
class GPENCIL_UL_layer(UIList):
|
|
||||||
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
|
|
||||||
# assert(isinstance(item, bpy.types.GPencilLayer)
|
|
||||||
gpl = item
|
|
||||||
gpd = context.gpencil_data
|
|
||||||
|
|
||||||
if self.layout_type in {'DEFAULT', 'COMPACT'}:
|
|
||||||
if gpl.lock:
|
|
||||||
layout.active = False
|
|
||||||
|
|
||||||
row = layout.row(align=True)
|
|
||||||
if gpl.is_parented:
|
|
||||||
icon = 'BONE_DATA'
|
|
||||||
else:
|
|
||||||
icon = 'BLANK1'
|
|
||||||
|
|
||||||
row.label(text="", icon=icon)
|
|
||||||
row.prop(gpl, "info", text="", emboss=False)
|
|
||||||
|
|
||||||
row = layout.row(align=True)
|
|
||||||
row.prop(gpl, "lock", text="", emboss=False)
|
|
||||||
row.prop(gpl, "hide", text="", emboss=False)
|
|
||||||
row.prop(gpl, "unlock_color", text="", emboss=False)
|
|
||||||
if gpl.use_onion_skinning is False:
|
|
||||||
icon = 'GHOST_DISABLED'
|
|
||||||
else:
|
|
||||||
icon = 'GHOST_ENABLED'
|
|
||||||
subrow = row.row(align=True)
|
|
||||||
subrow.prop(gpl, "use_onion_skinning", text="", icon=icon, emboss=False)
|
|
||||||
subrow.active = gpd.use_onion_skinning
|
|
||||||
elif self.layout_type == 'GRID':
|
|
||||||
layout.alignment = 'CENTER'
|
|
||||||
layout.label(text="", icon_value=icon)
|
|
||||||
|
|
||||||
|
|
||||||
class GPENCIL_MT_layer_specials(Menu):
|
class GPENCIL_MT_layer_specials(Menu):
|
||||||
@ -397,7 +365,6 @@ classes = (
|
|||||||
DATA_PT_gpencil_display,
|
DATA_PT_gpencil_display,
|
||||||
DATA_PT_custom_props_gpencil,
|
DATA_PT_custom_props_gpencil,
|
||||||
|
|
||||||
GPENCIL_UL_layer,
|
|
||||||
GPENCIL_UL_vgroups,
|
GPENCIL_UL_vgroups,
|
||||||
|
|
||||||
GPENCIL_MT_layer_specials,
|
GPENCIL_MT_layer_specials,
|
||||||
|
@ -805,6 +805,41 @@ class GreasePencilToolsPanel:
|
|||||||
gpencil_stroke_placement_settings(context, layout)
|
gpencil_stroke_placement_settings(context, layout)
|
||||||
|
|
||||||
|
|
||||||
|
class GPENCIL_UL_layer(UIList):
|
||||||
|
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
|
||||||
|
# assert(isinstance(item, bpy.types.GPencilLayer)
|
||||||
|
gpl = item
|
||||||
|
gpd = context.gpencil_data
|
||||||
|
|
||||||
|
if self.layout_type in {'DEFAULT', 'COMPACT'}:
|
||||||
|
if gpl.lock:
|
||||||
|
layout.active = False
|
||||||
|
|
||||||
|
row = layout.row(align=True)
|
||||||
|
if gpl.is_parented:
|
||||||
|
icon = 'BONE_DATA'
|
||||||
|
else:
|
||||||
|
icon = 'BLANK1'
|
||||||
|
|
||||||
|
row.label(text="", icon=icon)
|
||||||
|
row.prop(gpl, "info", text="", emboss=False)
|
||||||
|
|
||||||
|
row = layout.row(align=True)
|
||||||
|
row.prop(gpl, "lock", text="", emboss=False)
|
||||||
|
row.prop(gpl, "hide", text="", emboss=False)
|
||||||
|
row.prop(gpl, "unlock_color", text="", emboss=False)
|
||||||
|
if gpl.use_onion_skinning is False:
|
||||||
|
icon = 'GHOST_DISABLED'
|
||||||
|
else:
|
||||||
|
icon = 'GHOST_ENABLED'
|
||||||
|
subrow = row.row(align=True)
|
||||||
|
subrow.prop(gpl, "use_onion_skinning", text="", icon=icon, emboss=False)
|
||||||
|
subrow.active = gpd.use_onion_skinning
|
||||||
|
elif self.layout_type == 'GRID':
|
||||||
|
layout.alignment = 'CENTER'
|
||||||
|
layout.label(text="", icon_value=icon)
|
||||||
|
|
||||||
|
|
||||||
classes = (
|
classes = (
|
||||||
GPENCIL_MT_pie_tool_palette,
|
GPENCIL_MT_pie_tool_palette,
|
||||||
GPENCIL_MT_pie_settings_palette,
|
GPENCIL_MT_pie_settings_palette,
|
||||||
@ -819,6 +854,7 @@ classes = (
|
|||||||
GPENCIL_MT_gpencil_draw_delete,
|
GPENCIL_MT_gpencil_draw_delete,
|
||||||
|
|
||||||
GPENCIL_UL_annotation_layer,
|
GPENCIL_UL_annotation_layer,
|
||||||
|
GPENCIL_UL_layer,
|
||||||
)
|
)
|
||||||
|
|
||||||
if __name__ == "__main__": # only for live edit.
|
if __name__ == "__main__": # only for live edit.
|
||||||
|
@ -19,7 +19,9 @@
|
|||||||
# <pep8 compliant>
|
# <pep8 compliant>
|
||||||
import bpy
|
import bpy
|
||||||
from bpy.types import Header, Menu, Panel
|
from bpy.types import Header, Menu, Panel
|
||||||
|
from .properties_grease_pencil_common import (
|
||||||
|
GPENCIL_UL_layer,
|
||||||
|
)
|
||||||
|
|
||||||
class TOPBAR_HT_upper_bar(Header):
|
class TOPBAR_HT_upper_bar(Header):
|
||||||
bl_space_type = 'TOPBAR'
|
bl_space_type = 'TOPBAR'
|
||||||
@ -147,6 +149,15 @@ class TOPBAR_HT_lower_bar(Header):
|
|||||||
# we just want them not to be confused with tool options.
|
# we just want them not to be confused with tool options.
|
||||||
mode = context.mode
|
mode = context.mode
|
||||||
|
|
||||||
|
# grease pencil layer
|
||||||
|
gpl = context.active_gpencil_layer
|
||||||
|
if gpl and gpl.info is not None:
|
||||||
|
txt = gpl.info
|
||||||
|
if len(txt) > 10:
|
||||||
|
txt = txt[:7] + '..' + txt[-2:]
|
||||||
|
else:
|
||||||
|
txt = ""
|
||||||
|
|
||||||
if mode == 'SCULPT':
|
if mode == 'SCULPT':
|
||||||
layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".sculpt_mode", category="")
|
layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".sculpt_mode", category="")
|
||||||
elif mode == 'PAINT_VERTEX':
|
elif mode == 'PAINT_VERTEX':
|
||||||
@ -173,7 +184,19 @@ class TOPBAR_HT_lower_bar(Header):
|
|||||||
layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".particlemode", category="")
|
layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".particlemode", category="")
|
||||||
elif mode == 'OBJECT':
|
elif mode == 'OBJECT':
|
||||||
layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".objectmode", category="")
|
layout.popover_group(space_type='PROPERTIES', region_type='WINDOW', context=".objectmode", category="")
|
||||||
|
elif mode in ('GPENCIL_EDIT', 'GPENCIL_WEIGHT'):
|
||||||
|
layout.label(text="Layer:")
|
||||||
|
layout.popover(
|
||||||
|
panel="TOPBAR_PT_gpencil_layers",
|
||||||
|
text=txt
|
||||||
|
)
|
||||||
elif mode == 'GPENCIL_PAINT':
|
elif mode == 'GPENCIL_PAINT':
|
||||||
|
layout.label(text="Layer:")
|
||||||
|
layout.popover(
|
||||||
|
panel="TOPBAR_PT_gpencil_layers",
|
||||||
|
text=txt
|
||||||
|
)
|
||||||
|
|
||||||
layout.prop(context.tool_settings, "gpencil_stroke_placement_view3d", text='')
|
layout.prop(context.tool_settings, "gpencil_stroke_placement_view3d", text='')
|
||||||
if context.tool_settings.gpencil_stroke_placement_view3d in ('ORIGIN', 'CURSOR'):
|
if context.tool_settings.gpencil_stroke_placement_view3d in ('ORIGIN', 'CURSOR'):
|
||||||
layout.prop(context.tool_settings.gpencil_sculpt, "lockaxis", text='')
|
layout.prop(context.tool_settings.gpencil_sculpt, "lockaxis", text='')
|
||||||
@ -182,6 +205,11 @@ class TOPBAR_HT_lower_bar(Header):
|
|||||||
layout.prop(context.tool_settings, "use_gpencil_additive_drawing", text="", icon='FREEZE')
|
layout.prop(context.tool_settings, "use_gpencil_additive_drawing", text="", icon='FREEZE')
|
||||||
|
|
||||||
elif mode == 'GPENCIL_SCULPT':
|
elif mode == 'GPENCIL_SCULPT':
|
||||||
|
layout.label(text="Layer:")
|
||||||
|
layout.popover(
|
||||||
|
panel="TOPBAR_PT_gpencil_layers",
|
||||||
|
text=txt
|
||||||
|
)
|
||||||
layout.prop(context.tool_settings.gpencil_sculpt, "lockaxis", text='')
|
layout.prop(context.tool_settings.gpencil_sculpt, "lockaxis", text='')
|
||||||
|
|
||||||
|
|
||||||
@ -262,6 +290,71 @@ class _draw_left_context_mode:
|
|||||||
layout.prop(brush, "use_puff_volume")
|
layout.prop(brush, "use_puff_volume")
|
||||||
|
|
||||||
|
|
||||||
|
class TOPBAR_PT_gpencil_layers(Panel):
|
||||||
|
bl_space_type = 'VIEW_3D'
|
||||||
|
bl_region_type = 'HEADER'
|
||||||
|
bl_label = "Layers"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def poll(cls, context):
|
||||||
|
if context.gpencil_data is None:
|
||||||
|
return False
|
||||||
|
|
||||||
|
ob = context.object
|
||||||
|
if ob is not None and ob.type == 'GPENCIL':
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def draw(self, context):
|
||||||
|
layout = self.layout
|
||||||
|
gpd = context.gpencil_data
|
||||||
|
|
||||||
|
# Grease Pencil data...
|
||||||
|
if (gpd is None) or (not gpd.layers):
|
||||||
|
layout.operator("gpencil.layer_add", text="New Layer")
|
||||||
|
else:
|
||||||
|
self.draw_layers(context, layout, gpd)
|
||||||
|
|
||||||
|
def draw_layers(self, context, layout, gpd):
|
||||||
|
row = layout.row()
|
||||||
|
|
||||||
|
col = row.column()
|
||||||
|
if len(gpd.layers) >= 2:
|
||||||
|
layer_rows = 5
|
||||||
|
else:
|
||||||
|
layer_rows = 2
|
||||||
|
col.template_list("GPENCIL_UL_layer", "", gpd, "layers", gpd.layers, "active_index", rows=layer_rows)
|
||||||
|
|
||||||
|
col = row.column()
|
||||||
|
|
||||||
|
sub = col.column(align=True)
|
||||||
|
sub.operator("gpencil.layer_add", icon='ZOOMIN', text="")
|
||||||
|
sub.operator("gpencil.layer_remove", icon='ZOOMOUT', text="")
|
||||||
|
|
||||||
|
gpl = context.active_gpencil_layer
|
||||||
|
if gpl:
|
||||||
|
sub.menu("GPENCIL_MT_layer_specials", icon='DOWNARROW_HLT', text="")
|
||||||
|
|
||||||
|
if len(gpd.layers) > 1:
|
||||||
|
col.separator()
|
||||||
|
|
||||||
|
sub = col.column(align=True)
|
||||||
|
sub.operator("gpencil.layer_move", icon='TRIA_UP', text="").type = 'UP'
|
||||||
|
sub.operator("gpencil.layer_move", icon='TRIA_DOWN', text="").type = 'DOWN'
|
||||||
|
|
||||||
|
col.separator()
|
||||||
|
|
||||||
|
sub = col.column(align=True)
|
||||||
|
sub.operator("gpencil.layer_isolate", icon='LOCKED', text="").affect_visibility = False
|
||||||
|
sub.operator("gpencil.layer_isolate", icon='HIDE_OFF', text="").affect_visibility = True
|
||||||
|
|
||||||
|
row = layout.row(align=True)
|
||||||
|
if gpl:
|
||||||
|
row.prop(gpl, "opacity", text="Opacity", slider=True)
|
||||||
|
|
||||||
|
|
||||||
class TOPBAR_MT_editor_menus(Menu):
|
class TOPBAR_MT_editor_menus(Menu):
|
||||||
bl_idname = "TOPBAR_MT_editor_menus"
|
bl_idname = "TOPBAR_MT_editor_menus"
|
||||||
bl_label = ""
|
bl_label = ""
|
||||||
@ -756,6 +849,7 @@ classes = (
|
|||||||
TOPBAR_MT_window,
|
TOPBAR_MT_window,
|
||||||
TOPBAR_MT_help,
|
TOPBAR_MT_help,
|
||||||
TOPBAR_PT_active_tool,
|
TOPBAR_PT_active_tool,
|
||||||
|
TOPBAR_PT_gpencil_layers,
|
||||||
)
|
)
|
||||||
|
|
||||||
if __name__ == "__main__": # only for live edit.
|
if __name__ == "__main__": # only for live edit.
|
||||||
|
Loading…
Reference in New Issue
Block a user