inputs are handled inside ColorPickerWidget

This commit is contained in:
iLLiCiTiT 2021-05-20 12:29:13 +02:00
parent cbed588a75
commit 9f86bcff62

View file

@ -6,7 +6,13 @@ from .color_view import ColorViewer
from .color_screen_pick import PickScreenColorWidget
from .color_inputs import (
ColorInputsWidget,
AlphaInputs
AlphaSlider,
AlphaInputs,
HEXInputs,
RGBInputs,
HSLInputs,
HSVInputs,
CMYKInputs
)
@ -16,24 +22,27 @@ class ColorPickerWidget(QtWidgets.QWidget):
def __init__(self, color=None, parent=None):
super(ColorPickerWidget, self).__init__(parent)
# Eye picked widget
pick_widget = PickScreenColorWidget()
# Color utils
utils_widget = QtWidgets.QWidget(self)
utils_layout = QtWidgets.QVBoxLayout(utils_widget)
bottom_utils_widget = QtWidgets.QWidget(utils_widget)
top_part = QtWidgets.QWidget(self)
left_side = QtWidgets.QWidget(top_part)
# Color triangle
color_triangle = QtColorTriangle(utils_widget)
color_triangle = QtColorTriangle(left_side)
# Color preview
color_view = ColorViewer(bottom_utils_widget)
color_view.setMaximumHeight(50)
alpha_slider = AlphaSlider(QtCore.Qt.Horizontal, left_side)
left_layout = QtWidgets.QVBoxLayout(left_side)
left_layout.setContentsMargins(0, 0, 0, 0)
left_layout.addWidget(color_triangle)
left_layout.addWidget(alpha_slider)
right_side = QtWidgets.QWidget(top_part)
# Eye picked widget
pick_widget = PickScreenColorWidget()
pick_widget.setMaximumHeight(50)
# Color pick button
btn_pick_color = QtWidgets.QPushButton(bottom_utils_widget)
btn_pick_color = QtWidgets.QPushButton(right_side)
icon_path = os.path.join(
os.path.dirname(os.path.abspath(__file__)),
"eyedropper.png"
@ -41,50 +50,62 @@ class ColorPickerWidget(QtWidgets.QWidget):
btn_pick_color.setIcon(QtGui.QIcon(icon_path))
btn_pick_color.setToolTip("Pick a color")
# Color inputs widget
color_inputs = ColorInputsWidget(self)
# Color preview
color_view = ColorViewer(right_side)
color_view.setMaximumHeight(50)
# Alpha inputs
alpha_input_wrapper_widget = QtWidgets.QWidget(self)
alpha_input_wrapper_layout = QtWidgets.QVBoxLayout(
alpha_input_wrapper_widget
)
row = 0
right_layout = QtWidgets.QGridLayout(right_side)
right_layout.setContentsMargins(0, 0, 0, 0)
right_layout.addWidget(btn_pick_color, row, 0)
right_layout.addWidget(color_view, row, 1)
alpha_inputs = AlphaInputs(alpha_input_wrapper_widget)
alpha_input_wrapper_layout.addWidget(alpha_inputs)
alpha_input_wrapper_layout.addWidget(QtWidgets.QWidget(), 1)
color_inputs_color = QtGui.QColor()
col_inputs_by_label = [
("HEX", HEXInputs(color_inputs_color, right_side)),
("RGB", RGBInputs(color_inputs_color, right_side)),
("HSL", HSLInputs(color_inputs_color, right_side)),
("HSV", HSVInputs(color_inputs_color, right_side))
]
color_input_fields = []
for label, input_field in col_inputs_by_label:
row += 1
right_layout.addWidget(QtWidgets.QLabel(label, right_side), row, 0)
right_layout.addWidget(input_field, row, 1)
input_field.value_changed.connect(
self._on_color_input_value_change
)
color_input_fields.append(input_field)
bottom_utils_layout = QtWidgets.QHBoxLayout(bottom_utils_widget)
bottom_utils_layout.setContentsMargins(0, 0, 0, 0)
bottom_utils_layout.addWidget(color_view, 1)
bottom_utils_layout.addWidget(btn_pick_color, 0)
utils_layout.addWidget(bottom_utils_widget, 0)
utils_layout.addWidget(color_triangle, 1)
row += 1
alpha_inputs = AlphaInputs(right_side)
right_layout.addWidget(QtWidgets.QLabel("Alpha", right_side), row, 0)
right_layout.addWidget(alpha_inputs, row, 1)
layout = QtWidgets.QHBoxLayout(self)
layout.addWidget(utils_widget, 1)
layout.addWidget(color_inputs, 0)
layout.addWidget(alpha_input_wrapper_widget, 0)
layout.setSpacing(5)
layout.addWidget(left_side, 1)
layout.addWidget(right_side, 0)
color_view.set_color(color_triangle.cur_color)
color_inputs.set_color(color_triangle.cur_color)
color_triangle.color_changed.connect(self.triangle_color_changed)
alpha_slider.valueChanged.connect(self._on_alpha_slider_change)
pick_widget.color_selected.connect(self.on_color_change)
color_inputs.color_changed.connect(self.on_color_change)
alpha_inputs.alpha_changed.connect(self.alpha_changed)
alpha_inputs.alpha_changed.connect(self._on_alpha_inputs_changed)
btn_pick_color.released.connect(self.pick_color)
self.color_input_fields = color_input_fields
self.color_inputs_color = color_inputs_color
self.pick_widget = pick_widget
self.utils_widget = utils_widget
self.bottom_utils_widget = bottom_utils_widget
self.color_triangle = color_triangle
self.alpha_slider = alpha_slider
self.color_view = color_view
self.btn_pick_color = btn_pick_color
self.color_inputs = color_inputs
self.alpha_inputs = alpha_inputs
self.btn_pick_color = btn_pick_color
if color:
self.set_color(color)
@ -92,9 +113,7 @@ class ColorPickerWidget(QtWidgets.QWidget):
def showEvent(self, event):
super(ColorPickerWidget, self).showEvent(event)
triangle_width = int((
self.utils_widget.height() - self.bottom_utils_widget.height()
) / 5 * 4)
triangle_width = int(self.height() / 5 * 4)
self.color_triangle.setMinimumWidth(triangle_width)
def color(self):
@ -109,12 +128,38 @@ class ColorPickerWidget(QtWidgets.QWidget):
def triangle_color_changed(self, color):
self.color_view.set_color(color)
self.color_inputs.set_color(color)
if self.color_inputs_color != color:
self.color_inputs_color.setRgb(
color.red(), color.green(), color.blue()
)
for color_input in self.color_input_fields:
color_input.color_changed()
def on_color_change(self, color):
self.color_view.set_color(color)
self.color_triangle.set_color(color)
self.color_inputs.set_color(color)
if self.color_inputs_color != color:
self.color_inputs_color.setRgb(
color.red(), color.green(), color.blue()
)
for color_input in self.color_input_fields:
color_input.color_changed()
def alpha_changed(self, alpha):
self.color_view.set_alpha(alpha)
def _on_color_input_value_change(self):
for input_field in self.color_input_fields:
input_field.color_changed()
self.on_color_change(QtGui.QColor(self.color_inputs_color))
def alpha_changed(self, value):
self.color_view.set_alpha(value)
if self.alpha_slider.value() != value:
self.alpha_slider.setValue(value)
if self.alpha_inputs.alpha_value != value:
self.alpha_inputs.set_alpha(value)
def _on_alpha_inputs_changed(self, value):
self.alpha_changed(value)
def _on_alpha_slider_change(self, value):
self.alpha_changed(value)