def __init__(self, mixer, hue_steps=None, *args): QtGui.QLabel.__init__(self, *args) self.mixer = mixer self.hue_steps = hue_steps if hue_steps is None: self.ring_width_coef = 0.8 self.steps_inner_coef = 0.8 else: self.ring_width_coef = 0.85 self.steps_inner_coef = 0.7 self.ring = HueRing(mixer, width_coef=self.ring_width_coef) if hue_steps is None: self.steps = None else: self.steps = HueStepsRing(mixer, steps=hue_steps, outer_coef=self.ring_width_coef, inner_coef=self.steps_inner_coef) self.square = HueGradient(mixer, 0.0) self.mouse_pressed = False self.selected_sv = None self.selected_hue = 0.0 self._prev_color = colors.Color(0, 0, 0) self.selected_color = colors.Color(0, 0, 0) self.harmony = None self._harmony_parameter = 0.5 self.harmonized = [] self.setMinimumSize(100, 100) self.setAcceptDrops(True) self.class_selector = None self.harmonies_selector = None self._sequence = 0
def paintEvent(self, event): w, h = self.size().width(), self.size().height() ring = self.ring.get(w, h) if self.steps is not None: steps = self.steps.get(w, h) else: steps = None m = min(w, h) iw = ih = m * self.steps_inner_coef / sqrt(2.0) #print "Selector: m = {}, iw = ih = {}".format(m, iw) square = self.square.get(iw, ih) dx = (w - iw) / 2.0 dy = (h - ih) / 2.0 self.ls_square = QtCore.QRectF(dx, dy, iw, ih) qp = QtGui.QPainter() qp.begin(self) qp.drawImage(0, 0, ring) if steps is not None: qp.drawImage(0, 0, steps) qp.drawImage(dx, dy, square) R = m / 2.0 r = self.ring_width_coef * R x1, y1 = self._polar(r, self.selected_hue) x2, y2 = self._polar(R, self.selected_hue) qp.setPen(colors.Color(0, 0, 0)) qp.drawLine(x1, y1, x2, y2) if self.selected_sv is not None: s, v = self.selected_sv x0 = s * iw + dx y0 = v * ih + dy x, y = x0 - 3, y0 - 3 w = h = 6 qp.setBrush(QtGui.QColor(255, 255, 255, 127)) qp.setPen(colors.Color(0, 0, 0)) qp.drawEllipse(x, y, w, h) if self.harmony is not None and self.selected_color is not None: h_selected = self.mixer.getHue(self.selected_color) clrs = self.harmony.get(self.selected_color, self._harmony_parameter) for clr in clrs: h, s, v = self.mixer.getShade(clr) if abs(h - h_selected) < 0.01: x0 = s * iw + dx y0 = v * ih + dy x, y = x0 - 3, y0 - 3 w = h = 6 qp.setPen(colors.Color(0, 0, 0)) qp.drawRect(x, y, w, h) else: x0, y0 = self._polar(r, h * 2.0 * pi) x, y = x0 - 3, y0 - 3 w = h = 6 qp.setPen(colors.Color(0, 0, 0)) qp.drawRect(x, y, w, h) qp.end()
def dropEvent(self, event): if event.mimeData().hasColor(): qcolor = QtGui.QColor(event.mimeData().colorData()) r, g, b, _ = qcolor.getRgb() #print(qcolor.getRgb()) color = colors.Color(r, g, b) event.acceptProposedAction() #print(color) self.setColor(color)
def __init__(self, mixer, *args): QtGui.QLabel.__init__(self, *args) self.mixer = mixer self.ring = HueRing(mixer) self.square = HueGradient(mixer, 0.0) self.mouse_pressed = False self.selected_sv = None self.selected_hue = 0.0 self._prev_color = colors.Color(0, 0, 0) self.selected_color = colors.Color(0, 0, 0) self.harmony = None self._harmony_parameter = 0.5 self.harmonized = [] self.setMinimumSize(100, 100) self.setAcceptDrops(True) self.class_selector = None self.harmonies_selector = None self._sequence = 0
def on_click(self): #print("CLICK") current = self.getColor() if current is not None: clr = QtGui.QColorDialog.getColor(current) else: clr = QtGui.QColorDialog.getColor() r, g, b, a = clr.getRgb() self.setColor(colors.Color(r, g, b)) self.repaint() if not self.model.to_set_color(): self.selected.emit()
def dropEvent(self, event): if event.mimeData().hasColor(): qcolor = QtGui.QColor(event.mimeData().colorData()) r, g, b, _ = qcolor.getRgb() color = colors.Color(r, g, b) if event.mimeData().hasFormat("application/x-metainfo"): data = event.mimeData().data("application/x-metainfo") color.meta.set_from_xml(str(data)) self.on_drop_color(color) self.repaint() if not self.model.to_set_color(): self.selected.emit()