Пример #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)
Пример #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))
Пример #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))
Пример #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
Пример #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()
Пример #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))
Пример #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))
Пример #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)

    """
Пример #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
Пример #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) 
  
  
  """
Пример #11
0
def get_half_alpha(brush: QBrush) -> QBrush:
    color = brush.color()
    color.setAlphaF(0.5)
    brush.setColor(color)
    return brush
Пример #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()