From 9f86bcff621298f82bdb11eda7d904ad3ada53ad Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Thu, 20 May 2021 12:29:13 +0200 Subject: [PATCH] inputs are handled inside ColorPickerWidget --- .../color_widgets/color_picker_widget.py | 141 ++++++++++++------ 1 file changed, 93 insertions(+), 48 deletions(-) diff --git a/openpype/widgets/color_widgets/color_picker_widget.py b/openpype/widgets/color_widgets/color_picker_widget.py index 5786c529ed..7158a426a4 100644 --- a/openpype/widgets/color_widgets/color_picker_widget.py +++ b/openpype/widgets/color_widgets/color_picker_widget.py @@ -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)