Esempio n. 1
0
    def setBackground(self, background: QBrush):
        if not isinstance(background, QBrush):
            background = QBrush(background)

        color = background.color()
        self.setData(Qt.DisplayRole,
                     f"RGB{color.red(), color.green(), color.blue()} [{color.name()}]")
        super().setBackground(background)
Esempio n. 2
0
 def __set_brushAlpha(self, alpha: int):
     """
     Args:
         alpha: Description
     """
     brush = QBrush(self.item.brush())
     color = QColor(brush.color())
     color.setAlpha(alpha)
     self.item.setBrush(QBrush(color))
Esempio n. 3
0
 def __set_brushAlpha(self, alpha: int):
     """
     Args:
         alpha: Description
     """
     brush = QBrush(self.item.brush())
     color = QColor(brush.color())
     color.setAlpha(alpha)
     self.item.setBrush(QBrush(color))
Esempio n. 4
0
def brush_darker(brush, factor):
    """Return a copy of the brush darkened by factor.
    """
    grad = brush.gradient()
    if grad:
        return QBrush(gradient_darker(grad, factor))
    else:
        brush = QBrush(brush)
        brush.setColor(brush.color().darker(factor))
        return brush
Esempio n. 5
0
class CarreMosaiQ(QGraphicsRectItem):

    _pen = QPen(QColor(COULEUR_CONTOUR))
    _pen.setCosmetic(True)

    nbInstances = 0
    instanceSurvolee = None

    def __init__(self, x, y, c):
        super(CarreMosaiQ, self).__init__(0, 0, c, c)
        QGraphicsRectItem.__init__(self, 0, 0, c, c)
        self.setPos(x, y)
        self.setPen(CarreMosaiQ._pen)
        couleur = QColor(*(randint(*PLAGE_COULEURS) for _ in 'RGB'))
        self.brush = QBrush(couleur)
        self.setBrush(self.brush)
        self.setAcceptHoverEvents(True)
        self.setCursor(Qt.PointingHandCursor)
        CarreMosaiQ.nbInstances += 1

    def hoverEnterEvent(self, event):
        couleur = self.brush.color().lighter(FACTEUR_ECLAIRCISSSEMENT)
        self.setBrush(QBrush(couleur))
        CarreMosaiQ.instanceSurvolee = self

    def hoverLeaveEvent(self, event):
        self.setBrush(self.brush)
        CarreMosaiQ.instanceSurvolee = None

    def mousePressEvent(self, mouseEvent):
        if mouseEvent.button() == Qt.LeftButton:
            self.fragmente()
        elif mouseEvent.button() == Qt.RightButton:
            QGraphicsRectItem.hoverLeaveEvent(self, None)
            self.scene().removeItem(self)
        else:
            QGraphicsRectItem.mousePressEvent(self, mouseEvent)

    def fragmente(self):
        c = self.rect().width() / 2.
        x = self.x()
        y = self.y()
        scene = self.scene()
        scene.removeItem(self)
        CarreMosaiQ.nbInstances -= 1
        #self.setVisible(False)
        for (dx, dy) in ((0, 0), (c, 0), (0, c), (c, c)):
            scene.addItem(CarreMosaiQ(x + dx, y + dy, c))

    def taille(self):
        return self.rect().width()

    def tailleDansVue(self, vue):
        return vue.mapFromScene(self.taille(), 0).x() - vue.mapFromScene(
            0, 0).x()
Esempio n. 6
0
    def __set_brushAlpha(self, alpha):
        """Summary

        Args:
            alpha (TYPE): Description

        Returns:
            TYPE: Description
        """
        brush = QBrush(self.item.brush())
        color = QColor(brush.color())
        color.setAlpha(alpha)
        self.item.setBrush(QBrush(color))
Esempio n. 7
0
    def __set_brushAlpha(self, alpha):
        """Summary

        Args:
            alpha (TYPE): Description

        Returns:
            TYPE: Description
        """
        brush = QBrush(self.item.brush())
        color = QColor(brush.color())
        color.setAlpha(alpha)
        self.item.setBrush(QBrush(color))
Esempio n. 8
0
class BrushFormation(InstrumentFormation):
    ''' Specialize to Qt <QBrush> '''
    def __init__(self, parentSelector, role=""):

        InstrumentFormation.__init__(self,
                                     name="Brush",
                                     parentSelector=parentSelector,
                                     role=role)
        self.instrument = QBrush()
        self.styleProperties = [
            BaseStyleProperty("Color",
                              self.instrument.setColor,
                              self.selector,
                              resettableValueFactory=ResettableColorValue,
                              layoutFactory=ColorStylePropertyLayout,
                              default=self.instrument.color()),
            BaseStyleProperty(
                "Style",  # Was Pattern
                self.instrument.setStyle,
                self.selector,
                default=self.instrument.style(),
                # ResettableIntValue defaults and works
                layoutFactory=ComboBoxStylePropertyLayout,
                domainModel=config.BrushModel),
        ]
        '''
    sic, BrushPattern is called Style in Qt
    
    Need Pattern, since defaults to NoBrush and that means color is moot.
    If we just have Color, once it is set, no way to go back to unfilled.
    
    TODO: user friendly:  if user chooses color, ensure pattern is not NoBrush
    '''

        # TODO gradients and texture not working?

    def applyTo(self, morph):
        #print "setBrush on morph", self.instrument.color()

        # Morph knows it's scale and applies it to self instrument
        morph.scaleInstrument(self.instrument)  # No baseValue, defaults to 1
        # Tell Morph to use self.instrument to draw itself
        morph.setBrush(self.instrument)

    """
Esempio n. 9
0
 def fill(xml: QXmlStreamWriter, brush: QBrush, tag: str = "fill"):
     xml.writeStartElement(tag)
     if brush.gradient(
     ) is not None and brush.gradient().type() != QGradient.NoGradient:
         grad = brush.gradient()
         if grad.type() != QGradient.LinearGradient:
             xml.writeAttribute("gradient-rotation", "diagonal")
         else:
             if grad.start().x() == grad.finalStop().x():
                 xml.writeAttribute("gradient-rotation", "vertical")
             elif grad.start().y() == grad.finalStop().y():
                 xml.writeAttribute("gradient-rotation", "horizontal")
             else:
                 xml.writeAttribute("gradient-rotation", "diagonal")
         xml.writeAttribute("color", grad.stops()[0][1].name())
         xml.writeAttribute("gradient-color", grad.stops()[1][1].name())
     else:
         xml.writeAttribute("color", brush.color().name())
     xml.writeEndElement()  #fecha fill
Esempio n. 10
0
class BrushFormation(InstrumentFormation):
  ''' Specialize to Qt <QBrush> '''
  
  def __init__(self, parentSelector, role=""):
    
    InstrumentFormation.__init__(self, name="Brush", parentSelector=parentSelector, role=role)
    self.instrument = QBrush()
    self.styleProperties=[BaseStyleProperty("Color", self.instrument.setColor, self.selector,
                                            resettableValueFactory=ResettableColorValue,
                                            layoutFactory=ColorStylePropertyLayout,
                                            default=self.instrument.color()),
                          BaseStyleProperty("Style", # Was Pattern
                                            self.instrument.setStyle, self.selector,
                                            default=self.instrument.style(),
                                            # ResettableIntValue defaults and works
                                            layoutFactory=ComboBoxStylePropertyLayout,
                                            domainModel = config.BrushModel),]
    
    '''
    sic, BrushPattern is called Style in Qt
    
    Need Pattern, since defaults to NoBrush and that means color is moot.
    If we just have Color, once it is set, no way to go back to unfilled.
    
    TODO: user friendly:  if user chooses color, ensure pattern is not NoBrush
    '''
    
    # TODO gradients and texture not working?
  
  
  def applyTo(self, morph):
    #print "setBrush on morph", self.instrument.color()
    
    # Morph knows it's scale and applies it to self instrument
    morph.scaleInstrument(self.instrument)  # No baseValue, defaults to 1
    # Tell Morph to use self.instrument to draw itself
    morph.setBrush(self.instrument) 
  
  
  """
Esempio n. 11
0
def get_half_alpha(brush: QBrush) -> QBrush:
    color = brush.color()
    color.setAlphaF(0.5)
    brush.setColor(color)
    return brush
Esempio n. 12
0
class PFSNode(PFSElement):
    def __init__(self, id: str, x: int, y: int):
        PFSElement.__init__(self, id)
        self.setPos(x / 2, y / 2)
        self._width = 0
        self._height = 0
        self._pen = QPen(Qt.black)
        self._brush = QBrush(Qt.white, Qt.SolidPattern)
        self.emitter = PFSSenderSignal()
        self.changed = self.emitter.changed
        self.deleted = self.emitter.deleted
        self.penEdited = self.emitter.penEdited

    def move(self, x, y):
        self.moveBy(x / 2, y / 2)
        self.changed.emit()
        for it in self.scene().items():
            print(str(it.__class__) + " " + str(it.shape().boundingRect()))

    def setPenColor(self, color: QColor):
        self._pen.setColor(color)
        self.scene().update()

    def setPenStyle(self, style: Qt):
        self._pen.setStyle(style)
        self.scene().update()
        self.penEdited.emit(self)

    def setPenWidth(self, width: str):
        self._pen.setWidth(float(width))
        self.scene().update()

    def setBrushColor(self, color: QColor):
        self._brush.setColor(color)
        self.scene().update()

    def changeElementPosX(self, prop):
        x = PFSUndoPropertyText(prop, self.moveX)
        self.scene()._page._net.undoStack.push(x)

    def changeElementPosY(self, prop):
        x = PFSUndoPropertyText(prop, self.moveY)
        self.scene()._page._net.undoStack.push(x)

    def changeElementWidth(self, prop):
        x = PFSUndoPropertyText(prop, self.resizeWidth)
        self.scene()._page._net.undoStack.push(x)

    def changeElementHeight(self, prop):
        x = PFSUndoPropertyText(prop, self.resizeHeight)
        self.scene()._page._net.undoStack.push(x)

    def changeLineColor(self):
        color = QColorDialog.getColor(self._pen.color(),
                                      self.scene()._page._net,
                                      "Escolha a cor do contorno")
        if color.isValid() and color != self._pen.color():
            x = PFSUndoPropertyButton(color, self._pen.color(),
                                      self.setPenColor)
            self.scene()._page._net.undoStack.push(x)

    def changeLineStyle(self, text):
        if text in self.PEN_LIST:
            x = PFSUndoPropertyCombo(self.PEN_LIST[text], self._pen.style(),
                                     self.setPenStyle)
            self.scene()._page._net.undoStack.push(x)

    def changeLineWidth(self, prop):
        x = PFSUndoPropertyText(prop, self.setPenWidth)
        self.scene()._page._net.undoStack.push(x)

    def changeFillColor(self):
        color = QColorDialog.getColor(self._brush.color(),
                                      self.scene()._page._net,
                                      "Escolha a cor do preenchimento")
        if color.isValid() and color != self._brush.color():
            x = PFSUndoPropertyButton(color, self._brush.color(),
                                      self.setBrushColor)
            self.scene()._page._net.undoStack.push(x)

    def moveX(self, txt, update=True):
        self.moveBy(float(txt) / 2, 0)
        if update:
            self.scene().update()

    def moveY(self, txt, update=True):
        self.moveBy(0, float(txt) / 2)
        if update:
            self.scene().update()

    def resizeWidth(self, txt):
        self._width = float(txt)
        self.changed.emit()
        self.scene().update()

    def resizeHeight(self, txt):
        self._height = float(txt)
        self.changed.emit()
        self.scene().update()