Krita Source Code Documentation
Loading...
Searching...
No Matches
mixer_slider_docker.py
Go to the documentation of this file.
1'''
2 SPDX-FileCopyrightText: 2019 Tusooa Zhu <tusooa@vista.aero>
3
4 This file is part of Krita-docker-color-slider.
5
6 SPDX-License-Identifier: GPL-3.0-or-later
7'''
8try:
9 from PyQt6.QtGui import QColor
10 from PyQt6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton
11except:
12 from PyQt5.QtGui import QColor
13 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton
14
15from krita import Krita, DockWidget, ManagedColor, DockWidgetFactory, DockWidgetFactoryBase
16from builtins import i18n, Application
17
18from .slider_line import SliderLine
19from .ui_mixer_slider_docker import UIMixerSliderDocker
20
21
22class MixerSliderDocker(DockWidget):
23 # Init the docker
24
25 def __init__(self):
26 super(MixerSliderDocker, self).__init__()
27
28 main_program = Krita.instance()
29 settings = main_program.readSetting("", "MixerSliderColors",
30 "RGBA,U8,sRGB-elle-V2-srgbtrc.icc,1,0.8,0.4,1|" +
31 "RGBA,U8,sRGB-elle-V2-srgbtrc.icc,0,0,0,1") # alpha=1 == non-transparent
32
33 self.default_left_color = self.qcolor_to_managedcolor(QColor.fromRgbF(0.4, 0.8, 1, 1))
34 self.default_right_color = self.qcolor_to_managedcolor(QColor.fromRgbF(0, 0, 0, 1))
35
36 # make base-widget and layout
37 self.widget = QWidget()
38 self.sliders = []
39 self.top_layout = QVBoxLayout()
40 self.main_layout = QHBoxLayout()
41 self.top_layout.addLayout(self.main_layout)
42 self.top_layout.addStretch(0)
43 self.settings_button = QPushButton()
44 icon = main_program.icon("configure")
45 self.settings_button.setIcon(icon)
46 self.settings_button.setToolTip(i18n('Change settings'))
47 self.settings_button.setMaximumSize(30, 30)
48 self.main_layout.addWidget(self.settings_button)
49 self.layout = QVBoxLayout()
50 self.layout.setSpacing(0)
51 self.main_layout.addLayout(self.layout)
52 for line in settings.split(";"):
53 colors = line.split('|')
54 if len(colors) < 2: # discard old configurations
55 continue
56 left_color = self.parse_color(colors[0].split(','))
57 right_color = self.parse_color(colors[1].split(','))
58 widget = SliderLine(left_color, right_color, self)
59 self.sliders.append(widget)
60 self.layout.addWidget(widget)
61
62 self.widget.setLayout(self.top_layout)
63 self.setWindowTitle(i18n("Mixer Slider Docker"))
64 self.setWidget(self.widget)
65 [x.show() for x in self.sliders]
66
67 self.settings_button.clicked.connect(self.init_uiinit_ui)
68
70 if self.ui.line_edit is not None:
71 num_sliders = int(self.ui.line_edit.text())
72 if len(self.sliders) > num_sliders:
73 for extra_line in self.sliders[num_sliders:]:
74 self.layout.removeWidget(extra_line)
75 extra_line.setParent(None)
76
77 self.sliders = self.sliders[0:num_sliders]
78 elif len(self.sliders) < num_sliders:
79 for i in range(num_sliders - len(self.sliders)):
80 widget = SliderLine(self.default_left_color, self.default_right_color, self)
81 self.sliders.append(widget)
82 self.layout.addWidget(widget)
83 self.write_settings()
84
85 def get_color_space(self):
86 if self.canvas() is not None:
87 if self.canvas().view() is not None:
88 canvas_color = self.canvas().view().foregroundColor()
89 return ManagedColor(canvas_color.colorModel(), canvas_color.colorDepth(), canvas_color.colorProfile())
90 return ManagedColor('RGBA', 'U8', 'sRGB-elle-V2-srgbtrc.icc')
91
92 def init_ui(self):
94 self.ui.initialize(self)
95
96 def write_settings(self):
97 main_program = Krita.instance()
98 setting = ';'.join(
99 [self.color_to_settings(line.left) + '|' + self.color_to_settings(line.right)
100 for line in self.sliders])
101
102 main_program.writeSetting("", "MixerSliderColors", setting)
103
104 def color_to_settings(self, managedcolor):
105 return ','.join([managedcolor.colorModel(),
106 managedcolor.colorDepth(),
107 managedcolor.colorProfile()] +
108 [str(c) for c in managedcolor.components()])
109
110 def parse_color(self, array):
111 color = ManagedColor(array[0], array[1], array[2])
112 color.setComponents([float(x) for x in array[3:]])
113 return color
114
115 def canvasChanged(self, canvas):
116 pass
117
118 def qcolor_to_managedcolor(self, qcolor):
119 mc = ManagedColor.fromQColor(qcolor, self.canvas())
120 return mc
121
122 def managedcolor_to_qcolor(self, managedcolor):
123 return managedcolor.colorForCanvas(self.canvas())
124
125Application.addDockWidgetFactory(DockWidgetFactory("mixer_slider_docker", DockWidgetFactoryBase.DockPosition.DockRight, MixerSliderDocker))
static Krita * instance()
instance retrieve the singleton instance of the Application object.
Definition Krita.cpp:390
static ManagedColor * fromQColor(const QColor &qcolor, Canvas *canvas=0)
fromQColor is the (approximate) reverse of colorForCanvas()