diff --git a/src/airunner/widgets/brush/brush_container_widget.py b/src/airunner/widgets/brush/brush_container_widget.py
index c23ae65f3..629c56ea4 100644
--- a/src/airunner/widgets/brush/brush_container_widget.py
+++ b/src/airunner/widgets/brush/brush_container_widget.py
@@ -16,5 +16,5 @@ def brush(self):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.ui.brush_size_slider.setProperty("current_value", self.app.brush_size)
+ self.ui.brush_size_slider.setProperty("current_value", self.app.brush_settings["size"])
self.ui.brush_size_slider.initialize()
diff --git a/src/airunner/widgets/brush/templates/brush_widget.ui b/src/airunner/widgets/brush/templates/brush_widget.ui
index c5466d1a9..a6fe15788 100644
--- a/src/airunner/widgets/brush/templates/brush_widget.ui
+++ b/src/airunner/widgets/brush/templates/brush_widget.ui
@@ -47,7 +47,7 @@
Brush Size
- action_slider_changed
+ handle_value_change
brush_settings.size
diff --git a/src/airunner/widgets/brush/templates/brush_widget_ui.py b/src/airunner/widgets/brush/templates/brush_widget_ui.py
index f0b1efdc9..6652cc8c5 100644
--- a/src/airunner/widgets/brush/templates/brush_widget_ui.py
+++ b/src/airunner/widgets/brush/templates/brush_widget_ui.py
@@ -25,7 +25,7 @@ def setupUi(self, brush_widget):
self.brush_size_slider.setProperty("slider_page_step", 10)
self.brush_size_slider.setProperty("spinbox_single_step", 1)
self.brush_size_slider.setProperty("spinbox_page_step", 10)
- self.brush_size_slider.setProperty("slider_callback", "action_slider_changed")
+ self.brush_size_slider.setProperty("slider_callback", "handle_value_change")
self.brush_size_slider.setProperty("settings_property", "brush_settings.size")
self.brush_size_slider.setProperty("display_as_float", False)
self.brush_size_slider.setObjectName("brush_size_slider")
diff --git a/src/airunner/widgets/canvas_plus/canvas_plus_widget.py b/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
index 4105dfcf7..b85f51c94 100644
--- a/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
+++ b/src/airunner/widgets/canvas_plus/canvas_plus_widget.py
@@ -12,6 +12,8 @@
from PyQt6.QtCore import QThread, pyqtSignal
from PyQt6.QtCore import QLineF
from PyQt6.QtWidgets import QGraphicsItemGroup
+from PyQt6.QtCore import QRectF, QSizeF
+from PyQt6.QtGui import QPainterPath
from airunner.aihandler.logger import Logger
from airunner.cursors.circle_brush import CircleCursor
@@ -197,24 +199,40 @@ def mouseReleaseEvent(self, event):
class CustomScene(QGraphicsScene):
def __init__(self, parent=None):
+ self.app = parent.app
super().__init__(parent)
- self.drawing = False
- self.last_point = QPointF()
+ self.image = QImage(800, 600, QImage.Format.Format_ARGB32)
+ self.image.fill(Qt.GlobalColor.white)
+ self.item = QGraphicsPixmapItem(QPixmap.fromImage(self.image))
+ self.addItem(self.item)
+
+ def drawAt(self, position):
+ painter = QPainter(self.image)
+ print(self.app.brush_settings["size"])
+ painter.setPen(QPen(Qt.GlobalColor.black, self.app.brush_settings["size"], Qt.PenStyle.SolidLine, Qt.PenCapStyle.RoundCap))
+ painter.drawPoint(position)
+ painter.end()
+ self.item.setPixmap(QPixmap.fromImage(self.image))
+
+ def eraseAt(self, position):
+ painter = QPainter(self.image)
+ painter.setPen(QPen(Qt.GlobalColor.transparent, self.app.brush_settings["size"], Qt.PenStyle.SolidLine, Qt.PenCapStyle.RoundCap))
+ painter.setCompositionMode(QPainter.CompositionMode.CompositionMode_Clear)
+ painter.drawPoint(position)
+ painter.end()
+ self.item.setPixmap(QPixmap.fromImage(self.image))
def mousePressEvent(self, event):
- if event.button() == Qt.MouseButton.LeftButton:
- self.drawing = True
- self.last_point = event.scenePos()
+ if self.app.current_tool == "brush":
+ self.drawAt(event.scenePos())
+ elif self.app.current_tool == "eraser":
+ self.eraseAt(event.scenePos())
def mouseMoveEvent(self, event):
- if self.drawing:
- new_point = event.scenePos()
- self.addLine(QLineF(self.last_point, new_point), QPen(Qt.GlobalColor.red, 5))
- self.last_point = new_point
-
- def mouseReleaseEvent(self, event):
- if event.button() == Qt.MouseButton.LeftButton:
- self.drawing = False
+ if self.app.current_tool == "brush":
+ self.drawAt(event.scenePos())
+ elif self.app.current_tool == "eraser":
+ self.eraseAt(event.scenePos())
class CanvasPlusWidget(CanvasBaseWidget):
@@ -345,6 +363,12 @@ def __init__(self, *args, **kwargs):
self.app.line_width_changed_signal.connect(self.line_width_changed)
self.app.line_color_changed_signal.connect(self.line_color_changed)
self.app.canvas_color_changed_signal.connect(self.canvas_color_changed)
+ self.app.window_resized_signal.connect(self.window_resized)
+ self.canvas_container.resizeEvent = self.window_resized
+
+ def window_resized(self, event):
+ self.redraw_lines = True
+ self.do_draw()
def toggle_grid(self, val):
self.do_draw()
@@ -457,7 +481,7 @@ def resizeEvent(self, event):
def initialize(self):
# Create a QGraphicsScene object
- self.scene = CustomScene()
+ self.scene = CustomScene(parent=self)
self.view = self.canvas_container
original_mouse_event = self.view.mouseMoveEvent
diff --git a/src/airunner/widgets/generator_form/generator_form_widget.py b/src/airunner/widgets/generator_form/generator_form_widget.py
index 7cdff120e..fca0deb28 100644
--- a/src/airunner/widgets/generator_form/generator_form_widget.py
+++ b/src/airunner/widgets/generator_form/generator_form_widget.py
@@ -76,9 +76,9 @@ def latents_seed(self):
@latents_seed.setter
def latents_seed(self, val):
- generator_settings = self.app.settings_manager.generator
+ generator_settings = self.app.generator_settings
generator_settings["latents_seed"] = val
- self.app.settings_manager.generator = generator_settings
+ self.app.generator_settings = generator_settings
self.app.standard_image_panel.ui.seed_widget_latents.ui.lineEdit.setText(str(val))
@property
@@ -87,9 +87,9 @@ def seed(self):
@seed.setter
def seed(self, val):
- generator_settings = self.app.settings_manager.generator
+ generator_settings = self.app.generator_settings
generator_settings["seed"] = val
- self.app.settings_manager.generator = generator_settings
+ self.app.generator_settings = generator_settings
self.app.standard_image_panel.ui.seed_widget.ui.lineEdit.setText(str(val))
@property
diff --git a/src/airunner/widgets/seed/seed_widget.py b/src/airunner/widgets/seed/seed_widget.py
index dc0ba1701..975a086bb 100644
--- a/src/airunner/widgets/seed/seed_widget.py
+++ b/src/airunner/widgets/seed/seed_widget.py
@@ -7,13 +7,6 @@ class SeedWidget(BaseWidget):
widget_class_ = Ui_seed_widget
name = "seed_widget"
- # def initialize(self, generator_section, generator_name):
- # self.ui.lineEdit.setText(str(self.seed))
- # self.app.settings_manager.generator_section = generator_section
- # self.app.settings_manager.generator_name = generator_name
- # self.ui.random_button.setChecked(self.app.generator_settings["random_seed"])
- # self.ui.lineEdit.setEnabled(not self.app.generator_settings["random_seed"])
-
def update_seed(self):
self.ui.lineEdit.setText(str(self.seed))
@@ -28,11 +21,3 @@ def action_value_changed_seed(self, value):
class LatentsSeedWidget(SeedWidget):
setting_name = "generator.random_latents_seed"
-
- # def initialize(self, generator_section, generator_name):
- # self.app.settings_manager.generator_section = generator_section
- # self.app.settings_manager.generator_name = generator_name
- # self.ui.label.setText("Image Seed")
- # self.update_seed()
- # self.ui.random_button.setChecked(self.app.generator_settings["random_latents_seed"])
- # self.ui.lineEdit.setEnabled(not self.app.generator_settings["random_latents_seed"])
diff --git a/src/airunner/windows/main/main_window.py b/src/airunner/windows/main/main_window.py
index eb2ab63db..cb94a2abe 100644
--- a/src/airunner/windows/main/main_window.py
+++ b/src/airunner/windows/main/main_window.py
@@ -20,7 +20,7 @@
from airunner.aihandler.logger import Logger as logger
from airunner.aihandler.pyqt_client import OfflineClient
from airunner.aihandler.qtvar import MessageHandlerVar
-from airunner.aihandler.settings import LOG_LEVEL
+from airunner.aihandler.settings import DEFAULT_BRUSH_PRIMARY_COLOR, DEFAULT_BRUSH_SECONDARY_COLOR, LOG_LEVEL
from airunner.airunner_api import AIRunnerAPI
from airunner.data.models import DEFAULT_PATHS, LLMGenerator
from airunner.filters.windows.filter_base import FilterBase
@@ -168,6 +168,7 @@ def add_event(self, *args, **kwargs):
image_data = pyqtSignal(dict)
load_image = pyqtSignal(str)
load_image_object = pyqtSignal(object)
+ window_resized_signal = pyqtSignal(object)
generator = None
_generator = None
@@ -269,30 +270,18 @@ def tome_sd_ratio(self):
def tome_sd_ratio(self, val):
self.application_settings.setValue("tome_sd_ratio", val)
-
@property
- def brush_size(self):
- return self.application_settings.value("brush_size", 1, type=int)
-
- @brush_size.setter
- def brush_size(self, val):
- self.application_settings.setValue("brush_size", val)
-
- @property
- def brush_primary_color(self):
- return self.application_settings.value("brush_primary_color", "#000000")
-
- @brush_primary_color.setter
- def brush_primary_color(self, val):
- self.application_settings.setValue("brush_primary_color", val)
+ def brush_settings(self):
+ return self.application_settings.value("brush_settings", dict(
+ size=1,
+ primary_color=DEFAULT_BRUSH_PRIMARY_COLOR,
+ secondary_color=DEFAULT_BRUSH_SECONDARY_COLOR,
+ ))
- @property
- def brush_secondary_color(self):
- return self.application_settings.value("brush_secondary_color", "#ffffff")
-
- @brush_secondary_color.setter
- def brush_secondary_color(self, val):
- self.application_settings.setValue("brush_secondary_color", val)
+ @brush_settings.setter
+ def brush_settings(self, val):
+ print("SET BRUSH_SETTINGS", val)
+ self.application_settings.setValue("brush_settings", val)
@property
def ai_mode(self):
@@ -462,6 +451,9 @@ def set_path_settings(self, key, val):
path_settings = self.path_settings
path_settings[key] = val
self.path_settings = path_settings
+
+ def resizeEvent(self, event):
+ self.window_resized_signal.emit(event)
@property
def resize_on_paste(self):
@@ -1500,7 +1492,7 @@ def handle_button_clicked(self, kwargs):
self.toggle_tool(kwargs["tool"])
def toggle_tool(self, tool):
- self.settings_manager.set_value("settings.current_tool", tool)
+ self.current_tool = tool
def initialize_mixins(self):
#self.canvas = Canvas()