more work on canvas(flet ui)

This commit is contained in:
aedhcarrick 2022-12-15 15:49:41 -06:00
parent 58db3ffe02
commit 2cc91e3d07
5 changed files with 57 additions and 51 deletions

View File

@ -18,6 +18,8 @@ class Canvas(ft.Container):
self.overlay.canvas_size.content.color = self.page.text_color self.overlay.canvas_size.content.color = self.page.text_color
self.overlay.canvas_size.content.size = self.page.text_size self.overlay.canvas_size.content.size = self.page.text_size
self.add_layer_image(self.page.canvas_background)
self.center_canvas()
self.refresh_canvas() self.refresh_canvas()
def refresh_canvas(self): def refresh_canvas(self):
@ -26,9 +28,14 @@ class Canvas(ft.Container):
def set_current_tool(self,tool): def set_current_tool(self,tool):
self.page.current_tool = tool self.page.current_tool = tool
def add_layer_image(self, image):
self.image_stack.add_layer_image(image)
self.update()
def center_canvas(self): def center_canvas(self):
self.image_stack.left = (self.page.workspace_width * 0.5) - (self.page.canvas_size[0] * 0.5), width, height = self.page.get_viewport_size()
self.image_stack.top = (self.page.workspace_height * 0.5) - (self.page.canvas_size[1] * 0.5), self.image_stack.left = (width * 0.5) - 2048
self.image_stack.top = (height * 0.5) - 2048
canvas.update() canvas.update()
def pan_canvas(self): def pan_canvas(self):
@ -47,34 +54,54 @@ class CanvasOverlay(ft.Stack):
self.update() self.update()
class ImageStack(ft.GestureDetector): class ImageStack(ft.GestureDetector):
def add_layer_image(self): def add_layer_image(self, image):
pass layer_image = LayerImage(
mouse_cursor = ft.MouseCursor.GRAB,
drag_interval = 50,
on_pan_update = self.drag_layer,
left = 0,
top = 0,
width = image.width,
height = image.height,
content = ft.Image(
src_base64 = flet_utils.convert_image_to_base64(image),
width = image.width,
height = image.height,
gapless_playback = True,
),
)
self.content.controls.append(layer_image)
def center_layer(self, e):
class LayerImage(ft.GestureDetector): width, height = self.page.get_viewport_size()
def center_layer(self): self.left = (width * 0.5) - (self.width * 0.5),
self.left = (self.page.workspace_width * 0.5) - (self.page.canvas_size[0] * 0.5), self.top = (height * 0.5) - (self.height * 0.5),
self.top = (self.page.workspace_height * 0.5) - (self.page.canvas_size[1] * 0.5),
canvas.update() canvas.update()
def drag_layer(self): def drag_layer(self, e):
pass pass
def resize_layer(self): def resize_layer(self, e):
pass pass
def draw_on_layer(self): def draw_on_layer(self, e):
pass pass
def paint_on_layer(self): def paint_on_layer(self, e):
pass pass
class LayerImage(ft.GestureDetector):
pass
def pan_canvas(e):
canvas.pan_canvas(e)
image_stack = ImageStack( image_stack = ImageStack(
mouse_cursor = ft.MouseCursor.GRAB, # mouse_cursor = ft.MouseCursor.GRAB,
drag_interval = 50, drag_interval = 50,
on_pan_update = None, on_pan_update = pan_canvas,
on_scroll = None, width = 4096,
height = 4096,
left = 0, left = 0,
top = 0, top = 0,
content = ft.Stack(), content = ft.Stack(),
@ -115,6 +142,11 @@ canvas_tools = ft.Container(
), ),
top = 4, top = 4,
right = 4, right = 4,
padding = 4,
border_radius = 10,
opacity = 0.5,
bgcolor = 'black',
) )
canvas_tools.zoom_in = zoom_in_button canvas_tools.zoom_in = zoom_in_button
@ -135,7 +167,6 @@ canvas = Canvas(
image_stack, image_stack,
canvas_overlay, canvas_overlay,
], ],
clip_behavior = None,
), ),
clip_behavior = 'antiAlias', clip_behavior = 'antiAlias',
alignment = ft.alignment.center, alignment = ft.alignment.center,

View File

@ -63,9 +63,8 @@ class Messages(ft.Container):
message_list.controls.append(msg) message_list.controls.append(msg)
self.prune_messages() self.prune_messages()
message_list = ft.Column( message_list = ft.ListView(
spacing = 0, spacing = 4,
scroll = 'auto',
auto_scroll = True, auto_scroll = True,
controls = [], controls = [],
) )

View File

@ -68,8 +68,8 @@ class ToolManager(ft.Container):
self.tool_properties.padding = self.page.container_padding self.tool_properties.padding = self.page.container_padding
self.tool_properties.margin = self.page.container_margin self.tool_properties.margin = self.page.container_margin
self.dragbar.content.width = self.page.vertical_divider_width self.dragbar.width = self.page.vertical_divider_width
self.dragbar.content.color = self.page.tertiary_color self.dragbar.color = self.page.tertiary_color
def resize_tool_manager(self, e: ft.DragUpdateEvent): def resize_tool_manager(self, e: ft.DragUpdateEvent):
self.page.tool_manager_width = max(50, self.page.tool_manager_width + e.delta_x) self.page.tool_manager_width = max(50, self.page.tool_manager_width + e.delta_x)
@ -176,7 +176,6 @@ tool_manager = ToolManager(
tool_properties, tool_properties,
], ],
alignment = 'start', alignment = 'start',
horizontal_alignment = 'center',
expand = True, expand = True,
), ),
tool_manager_dragbar, tool_manager_dragbar,
@ -189,5 +188,5 @@ tool_manager = ToolManager(
tool_manager.toolbox = toolbox tool_manager.toolbox = toolbox
tool_manager.tool_divider = tool_divider.content.content tool_manager.tool_divider = tool_divider.content.content
tool_manager.tool_properties = tool_properties tool_manager.tool_properties = tool_properties
tool_manager.dragbar = tool_manager_dragbar tool_manager.dragbar = tool_manager_dragbar.content

View File

@ -91,7 +91,7 @@ def get_image_from_uploads(name):
def get_canvas_background(path): def get_canvas_background(path):
image = Image.open(path) image = Image.open(path)
image = image.resize((512,512)) image = image.resize((4096,4096))
image = image.convert("RGBA") image = image.convert("RGBA")
return image return image

View File

@ -80,7 +80,6 @@ def main(page: ft.Page):
# layouts # layouts
def set_layout(e): def set_layout(e):
page.current_layout = e.control.value page.current_layout = e.control.value
set_property_panel_options()
page.update() page.update()
page.set_layout = set_layout page.set_layout = set_layout
@ -91,19 +90,16 @@ def main(page: ft.Page):
# asset manager # asset manager
page.asset_manager = asset_manager page.asset_manager = asset_manager
page.layer_list = []
page.visible_layer_list = []
page.active_layer_list = []
# canvas # canvas
page.canvas = canvas page.canvas = canvas
page.canvas_background = flet_utils.get_canvas_background('webui/flet/assets/images/templategrid_albedo.png') page.canvas_background = flet_utils.get_canvas_background('webui/flet/assets/images/templategrid_albedo.png')
page.canvas_size = (512,512) page.canvas_size = [512,512]
def get_viewport_size(): def get_viewport_size():
viewport_width = page.width - (page.tool_manager_width + (page.vertical_divider_width * 3) + page.left_panel_width + page.right_panel_width) viewport_width = page.width - (page.tool_manager_width + (page.vertical_divider_width * 3) + page.left_panel_width + page.right_panel_width)
viewport_height = page.height - (page.appbar_height * 3) - page.bottom_panel_height viewport_height = page.height - (page.titlebar_height * 3) - page.bottom_panel_height
return (viewport_width, viewport_height) return viewport_width, viewport_height
page.get_viewport_size = get_viewport_size page.get_viewport_size = get_viewport_size
@ -288,25 +284,6 @@ def main(page: ft.Page):
# layouts ############################################################ # layouts ############################################################
def set_current_tools():
layout = page.current_layout
if layout == 'Default':
set_tools(default_tools)
elif layout == 'Textual Inversion':
set_tools(textual_inversion_tools)
elif layout == 'Node Editor':
set_tools(node_editor_tools)
tool_manager.update()
def set_property_panel_options():
layout = page.current_layout
if layout == 'Default':
set_properties(default_properties)
elif layout == 'Textual Inversion':
set_properties(textual_inversion_properties)
elif layout == 'Node Editor':
set_properties(node_editor_properties)
default_layout = ft.Row( default_layout = ft.Row(
controls = [ controls = [
tool_manager, tool_manager,