def paint( self, painter, option, widget ): """ Overloads the paint method from QGraphicsPathItem to \ handle custom drawing of the path using this items \ pens and polygons. :param painter <QPainter> :param option <QGraphicsItemStyleOption> :param widget <QWidget> """ # following the arguments required by Qt # pylint: disable-msg=W0613 painter.setOpacity(self.opacity()) # show the connection selected if ( not self.isEnabled() ): pen = QPen(self.disabledPen()) elif ( self.isSelected() ): pen = QPen(self.highlightPen()) else: pen = QPen(self.pen()) if ( self._textItem ): self._textItem.setOpacity(self.opacity()) self._textItem.setDefaultTextColor(pen.color().darker(110)) # rebuild first if necessary if ( self.isDirty() ): self.setPath(self.rebuild()) # store the initial hint hint = painter.renderHints() painter.setRenderHint( painter.Antialiasing ) pen.setWidthF(1.25) painter.setPen(pen) painter.drawPath(self.path()) # redraw the polys to force-fill them for poly in self._polygons: if ( not poly.isClosed() ): continue painter.setBrush(pen.color()) painter.drawPolygon(poly) # restore the render hints painter.setRenderHints(hint)
def generate_pens(basecolor): pen = QPen(basecolor, 1) pen.setCosmetic(True) shadow_pen = QPen(pen.color().lighter(160), 2.5) shadow_pen.setCosmetic(True) return pen, shadow_pen
def __updateStyleState(self): """ Update the arrows' brush, pen, ... based on it's state """ if self.isSelected(): color = self.__color.darker(150) pen = QPen(QColor(96, 158, 215), Qt.DashDotLine) pen.setWidthF(1.25) pen.setCosmetic(True) self.__shadow.setColor(pen.color().darker(150)) else: color = self.__color pen = QPen(Qt.NoPen) self.__shadow.setColor(QColor(63, 63, 63, 180)) self.__arrowItem.setBrush(color) self.__arrowItem.setPen(pen)
def plot_curves(self, target, clf_idx): if (target, clf_idx) not in self._curve_data: curve = LiftCurve_from_results(self.results, clf_idx, target) color = self.colors[clf_idx] pen = QPen(color, 1) pen.setCosmetic(True) shadow_pen = QPen(pen.color().lighter(160), 2.5) shadow_pen.setCosmetic(True) item = pg.PlotDataItem( curve.points[0], curve.points[1], pen=pen, shadowPen=shadow_pen, symbol="+", symbolSize=3, symbolPen=shadow_pen, antialias=True ) hull_item = pg.PlotDataItem( curve.hull[0], curve.hull[1], pen=pen, antialias=True ) self._curve_data[target, clf_idx] = \ PlotCurve(curve, item, hull_item) return self._curve_data[target, clf_idx]
class FeatureHighlightItem(QgsMapCanvasItem): # Code ported from QGIS QgsHighlight def __init__(self, mapCanvas, feature, layer): super(FeatureHighlightItem, self).__init__(mapCanvas) self._mapCanvas = None # QgsMapCanvas self._brush = QBrush() self._pen = QPen() self._feature = None # QgsFeature() self._layer = None # QgsMapLayer() self._buffer = 0.0 self._minWidth = 0.0 self._mapCanvas = mapCanvas if (not layer or not feature or not isinstance(feature, QgsFeature) or not feature.geometry() or feature.geometry().isEmpty() or not feature.geometry().isGeosValid()): return self._feature = QgsFeature(feature) # Force deep copy self._layer = layer self.setLineColor(Application.highlightLineColor()) self.setFillColor(Application.highlightFillColor()) self._minWidth = Application.highlightMinimumWidth() self._buffer = Application.highlightBuffer() if self._mapCanvas.mapSettings().hasCrsTransformEnabled(): ct = self._mapCanvas.mapSettings().layerTransform(self._layer) if ct: self._feature.geometry().transform(ct) self.updateRect() self.update() def remove(self): self._mapCanvas.scene().removeItem(self) def setLineWidth(self, width): self._pen.setWidth(width) def setLineColor(self, color): self._pen.setColor(color) def setFillColor(self, fillColor): self._brush.setColor(fillColor) self._brush.setStyle(Qt.SolidPattern) def setBuffer(self, buff): self._buffer = buff def setMinWidth(self, width): self._minWidth = width def layer(self): return self._layer def updatePosition(self): pass # protected: def paint(self, painter, option=None, widget=None): # Override if not self._feature: return mapSettings = self._mapCanvas.mapSettings() context = QgsRenderContext.fromMapSettings(mapSettings) renderer = self._getRenderer(context, self._pen.color(), self._brush.color()) if renderer: context.setPainter(painter) renderer.startRender(context, self._layer.fields()) renderer.renderFeature(self._feature, context) renderer.stopRender(context) def updateRect(self): if self._feature and self._feature.constGeometry(): m2p = self._mapCanvas.mapSettings().mapToPixel() topLeft = m2p.toMapPoint(0, 0) res = m2p.mapUnitsPerPixel() imageSize = self._mapCanvas.mapSettings().outputSize() rect = QgsRectangle(topLeft.x(), topLeft.y(), topLeft.x() + imageSize.width() * res, topLeft.y() - imageSize.height() * res) self.setRect(rect) self.setVisible(True) else: self.setRect(QgsRectangle()) # private: def _setSymbol(self, symbol, context, color, fillColor): if not symbol: return for symbolLayer in reversed(symbol.symbolLayers()): if symbolLayer: if symbolLayer.subSymbol(): self._setSymbol(symbolLayer.subSymbol(), context, color, fillColor) else: symbolLayer.setColor(color) symbolLayer.setOutlineColor(color) symbolLayer.setFillColor(fillColor) if isinstance(symbolLayer, QgsSimpleMarkerSymbolLayerV2): symbolLayer.setOutlineWidth( self._getSymbolWidth( context, symbolLayer.outlineWidth(), symbolLayer.outlineWidthUnit())) if symbolLayer.type() == QgsSymbolV2.Line: symbolLayer.setWidth( self._getSymbolWidth(context, symbolLayer.width(), symbolLayer.widthUnit())) if symbolLayer.type() == QgsSymbolV2.Fill: symbolLayer.setBorderWidth( self._getSymbolWidth(context, symbolLayer.borderWidth(), symbolLayer.outputUnit())) symbolLayer.removeDataDefinedProperty('color') symbolLayer.removeDataDefinedProperty('color_border') def _getSymbolWidth(self, context, width, unit): scale = 1.0 if unit == QgsSymbolV2.MapUnit: scale = QgsSymbolLayerV2Utils.lineWidthScaleFactor( context, QgsSymbolV2.MM) / QgsSymbolLayerV2Utils.lineWidthScaleFactor( context, QgsSymbolV2.MapUnit) width = max(width + 2 * self._buffer * scale, self._minWidth * scale) return width def _getRenderer(self, context, color, fillColor): renderer = None if self._layer and self._layer.rendererV2(): renderer = self._layer.rendererV2().clone() if renderer: for symbol in renderer.symbols2(context): self._setSymbol(symbol, context, color, fillColor) return renderer
class Theme(object): # enum PortType THEME_PORT_SQUARE = 0 THEME_PORT_POLYGON = 1 # enum List THEME_MODERN_DARK = 0 THEME_MODERN_DARK_TINY = 1 THEME_MODERN_DARK_TEXT = 2 THEME_MODERN_LIGHT = 3 THEME_CLASSIC_DARK = 4 THEME_PROTOCLASSIC_DARK = 5 THEME_NEOCLASSIC_DARK = 6 THEME_OOSTUDIO = 7 THEME_MAX = 8 # enum BackgroundType THEME_BG_SOLID = 0 THEME_BG_GRADIENT = 1 def __init__(self, idx): object.__init__(self) self.idx = idx # Default theme settings # Canvas self.canvas_bg = QColor(0, 0, 0) # Boxes self.box_pen = QPen(QColor(143 - 70, 143 - 70, 143 - 70), 1, Qt.SolidLine) self.box_pen_sel = QPen(QColor(143, 143, 143), 1, Qt.CustomDashLine, Qt.RoundCap) self.box_pen_sel.setDashPattern([3, 4]) self.box_bg_1 = QColor(30, 34, 36) self.box_bg_2 = QColor(30, 34, 36) self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = QColor(255, 255, 255, 60) self.box_header_pixmap = None self.box_header_height = 19 self.box_header_spacing = 0 self.box_rounding = 0.0 self.box_bottom_space = 3 self.box_text = QPen(QColor(255, 255, 255), 0) self.box_text_sel = self.box_text self.box_font_name = "Sans" self.box_font_size = 9 self.box_font_state = QFont.Normal self.box_bg_type = self.THEME_BG_GRADIENT self.box_use_icon = False # Ports self.port_text = QPen(QColor(250, 250, 250, 150), 0) self.port_hover = QColor(255, 255, 255, 150) self.port_bg_pixmap = None self.port_font_name = "Sans" self.port_font_size = 8 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_SQUARE self.port_audio_jack_bg = hsvAdjusted(QColor(41, 61, 99), saturation=120) self.port_audio_jack_bg_sel = QColor(255, 0, 0) self.port_midi_jack_bg = hsvAdjusted(QColor(120, 15, 16), saturation=150) self.port_midi_jack_bg_sel = QColor(255, 0, 0) self.port_midi_a2j_bg = hsvAdjusted(QColor(101, 47, 17), saturation=150) self.port_midi_a2j_bg_sel = QColor(255, 0, 0) self.port_midi_alsa_bg = hsvAdjusted(QColor(63, 112, 19), saturation=120) self.port_midi_alsa_bg_sel = QColor(255, 0, 0) port_pen = QPen(QColor(255, 255, 255, 50), 1) self.port_audio_jack_pen_sel = self.port_audio_jack_pen = QPen( hsvAdjustedRel(self.port_audio_jack_bg.lighter(180), saturation=-60), 1) self.port_midi_jack_pen_sel = self.port_midi_jack_pen = QPen( hsvAdjustedRel(self.port_midi_jack_bg.lighter(180), saturation=-60), 1) self.port_midi_a2j_pen_sel = self.port_midi_a2j_pen = QPen( hsvAdjustedRel(self.port_midi_a2j_bg.lighter(180), saturation=-60), 1) self.port_midi_alsa_pen_sel = self.port_midi_alsa_pen = QPen( hsvAdjustedRel(self.port_midi_alsa_bg.lighter(180), saturation=-60), 1) self.port_audio_jack_text = self.port_audio_jack_pen_sel self.port_audio_jack_text_sel = self.port_audio_jack_pen_sel self.port_midi_jack_text = self.port_midi_jack_pen_sel self.port_midi_jack_text_sel = self.port_midi_jack_pen_sel self.port_midi_a2j_text = self.port_midi_a2j_pen_sel self.port_midi_a2j_text_sel = self.port_midi_a2j_pen_sel self.port_midi_alsa_text = self.port_midi_alsa_pen_sel self.port_midi_alsa_text_sel = self.port_midi_alsa_pen_sel self.port_text_padding = 0 self.port_offset = 0 self.port_spacing = 1 self.port_spacingT = 0 self.port_rounding = 0.0 self.port_inglow_alpha = 0 self.port_inglow_size = 0 self.port_side_min_space = 3 # Lines self.line_audio_jack = QColor(53, 78, 116) self.line_audio_jack_sel = QColor(255, 0, 0) self.line_audio_jack_glow = QColor(255, 0, 0) self.line_midi_jack = QColor(139, 32, 32) self.line_midi_jack_sel = QColor(255, 0, 0) self.line_midi_jack_glow = QColor(255, 0, 0) self.line_midi_a2j = QColor(120, 65, 33) self.line_midi_a2j_sel = QColor(255, 0, 0) self.line_midi_a2j_glow = QColor(255, 0, 0) self.line_midi_alsa = QColor(81, 130, 36) self.line_midi_alsa_sel = QColor(255, 0, 0) self.line_midi_alsa_glow = QColor(255, 0, 0) self.rubberband_pen = QPen(QColor(147, 151, 143), 1, Qt.SolidLine) self.rubberband_brush = QColor(35, 61, 99, 100) if idx == self.THEME_MODERN_DARK: # Canvas self.canvas_bg = QColor(0, 0, 0) # Boxes self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine) self.box_pen_sel = QPen(QColor(206, 207, 208), 1, Qt.DashLine) self.box_bg_1 = QColor(32, 34, 35) self.box_bg_2 = QColor(43, 47, 48) self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = QColor(255, 255, 255, 60) self.box_header_pixmap = None self.box_header_height = 24 self.box_header_spacing = 0 self.box_rounding = 3.0 self.box_bottom_space = 3 self.box_text = QPen(QColor(240, 240, 240), 0) self.box_text_sel = self.box_text self.box_font_name = "Deja Vu Sans" self.box_font_size = 8 self.box_font_state = QFont.Bold self.box_bg_type = self.THEME_BG_GRADIENT self.box_use_icon = True # Ports self.port_text = QPen(QColor(250, 250, 250, 180), 0) self.port_hover = QColor(255, 255, 255, 80) self.port_bg_pixmap = None self.port_font_name = "Deja Vu Sans" self.port_font_size = 8 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_POLYGON self.port_audio_jack_pen = QPen(QColor(63, 90, 126), 1) self.port_audio_jack_pen_sel = QPen( QColor(63 + 30, 90 + 30, 126 + 30), 1) self.port_midi_jack_pen = QPen(QColor(159, 44, 42), 1) self.port_midi_jack_pen_sel = QPen( QColor(159 + 30, 44 + 30, 42 + 30), 1) self.port_midi_a2j_pen = QPen(QColor(137, 76, 43), 1) self.port_midi_a2j_pen_sel = QPen( QColor(137 + 30, 76 + 30, 43 + 30), 1) self.port_midi_alsa_pen = QPen(QColor(93, 141, 46), 1) self.port_midi_alsa_pen_sel = QPen( QColor(93 + 30, 141 + 30, 46 + 30), 1) self.port_audio_jack_bg = QColor(35, 61, 99) self.port_audio_jack_bg_sel = QColor(35 + 50, 61 + 50, 99 + 50) self.port_midi_jack_bg = QColor(120, 15, 16) self.port_midi_jack_bg_sel = QColor(120 + 50, 15 + 50, 16 + 50) self.port_midi_a2j_bg = QColor(101, 47, 16) self.port_midi_a2j_bg_sel = QColor(101 + 50, 47 + 50, 16 + 50) self.port_midi_alsa_bg = QColor(64, 112, 18) self.port_midi_alsa_bg_sel = QColor(64 + 50, 112 + 50, 18 + 50) self.port_audio_jack_text = self.port_text self.port_audio_jack_text_sel = self.port_text self.port_midi_jack_text = self.port_text self.port_midi_jack_text_sel = self.port_text self.port_midi_a2j_text = self.port_text self.port_midi_a2j_text_sel = self.port_text self.port_midi_alsa_text = self.port_text self.port_midi_alsa_text_sel = self.port_text self.port_text_padding = 1 self.port_offset = 0 self.port_spacing = 3 self.port_spacingT = 2 self.port_rounding = 0.0 # To not scale some line widths self.box_pen.setCosmetic(True) self.box_pen_sel.setCosmetic(True) self.port_audio_jack_pen.setCosmetic(True) self.port_audio_jack_pen_sel.setCosmetic(True) self.port_midi_jack_pen.setCosmetic(True) self.port_midi_jack_pen_sel.setCosmetic(True) self.port_midi_a2j_pen.setCosmetic(True) self.port_midi_a2j_pen_sel.setCosmetic(True) self.port_midi_alsa_pen.setCosmetic(True) self.port_midi_alsa_pen_sel.setCosmetic(True) # Lines self.line_audio_jack = QColor(63, 90, 126) self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90) self.line_audio_jack_glow = QColor(100, 100, 200) self.line_midi_jack = QColor(159, 44, 42) self.line_midi_jack_sel = QColor(159 + 90, 44 + 90, 42 + 90) self.line_midi_jack_glow = QColor(200, 100, 100) self.line_midi_a2j = QColor(137, 76, 43) self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90) self.line_midi_a2j_glow = QColor(166, 133, 133) self.line_midi_alsa = QColor(93, 141, 46) self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90) self.line_midi_alsa_glow = QColor(100, 200, 100) self.rubberband_pen = QPen(QColor(206, 207, 208), 1, Qt.SolidLine) self.rubberband_brush = QColor(76, 77, 78, 100) elif idx == self.THEME_MODERN_DARK_TINY: # Canvas self.canvas_bg = QColor(0, 0, 0) # Boxes self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine) self.box_pen_sel = QPen(QColor(206, 207, 208), 1, Qt.DashLine) self.box_bg_1 = QColor(32, 34, 35) self.box_bg_2 = QColor(43, 47, 48) self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = QColor(255, 255, 255, 60) self.box_header_pixmap = None self.box_header_height = 14 self.box_header_spacing = 0 self.box_rounding = 2.0 self.box_bottom_space = 2 self.box_text = QPen(QColor(240, 240, 240), 0) self.box_text_sel = self.box_text self.box_font_name = "Deja Vu Sans" self.box_font_size = 7 self.box_font_state = QFont.Bold self.box_bg_type = self.THEME_BG_GRADIENT self.box_use_icon = False # Ports self.port_text = QPen(QColor(250, 250, 250, 220), 0) self.port_hover = QColor(255, 255, 255, 80) self.port_bg_pixmap = None self.port_font_name = "Deja Vu Sans" self.port_font_size = 6 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_POLYGON self.port_audio_jack_pen = QPen(QColor(63, 90, 126), 1) self.port_audio_jack_pen_sel = QPen( QColor(63 + 30, 90 + 30, 126 + 30), 1) self.port_midi_jack_pen = QPen(QColor(159, 44, 42), 1) self.port_midi_jack_pen_sel = QPen( QColor(159 + 30, 44 + 30, 42 + 30), 1) self.port_midi_a2j_pen = QPen(QColor(137, 76, 43), 1) self.port_midi_a2j_pen_sel = QPen( QColor(137 + 30, 76 + 30, 43 + 30), 1) self.port_midi_alsa_pen = QPen(QColor(93, 141, 46), 1) self.port_midi_alsa_pen_sel = QPen( QColor(93 + 30, 141 + 30, 46 + 30), 1) self.port_audio_jack_bg = QColor(35, 61, 99) self.port_audio_jack_bg_sel = QColor(35 + 50, 61 + 50, 99 + 50) self.port_midi_jack_bg = QColor(120, 15, 16) self.port_midi_jack_bg_sel = QColor(120 + 50, 15 + 50, 16 + 50) self.port_midi_a2j_bg = QColor(101, 47, 16) self.port_midi_a2j_bg_sel = QColor(101 + 50, 47 + 50, 16 + 50) self.port_midi_alsa_bg = QColor(64, 112, 18) self.port_midi_alsa_bg_sel = QColor(64 + 50, 112 + 50, 18 + 50) self.port_audio_jack_text = self.port_text self.port_audio_jack_text_sel = self.port_text self.port_midi_jack_text = self.port_text self.port_midi_jack_text_sel = self.port_text self.port_midi_a2j_text = self.port_text self.port_midi_a2j_text_sel = self.port_text self.port_midi_alsa_text = self.port_text self.port_midi_alsa_text_sel = self.port_text self.port_text_padding = 1 self.port_offset = 0 self.port_spacing = -1 self.port_spacingT = 2 self.port_rounding = 0.0 # To not scale some line widths self.box_pen.setCosmetic(True) self.box_pen_sel.setCosmetic(True) self.port_audio_jack_pen.setCosmetic(True) self.port_audio_jack_pen_sel.setCosmetic(True) self.port_midi_jack_pen.setCosmetic(True) self.port_midi_jack_pen_sel.setCosmetic(True) self.port_midi_a2j_pen.setCosmetic(True) self.port_midi_a2j_pen_sel.setCosmetic(True) self.port_midi_alsa_pen.setCosmetic(True) self.port_midi_alsa_pen_sel.setCosmetic(True) # Lines self.line_audio_jack = QColor(63, 90, 126) self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90) self.line_audio_jack_glow = QColor(100, 100, 200) self.line_midi_jack = QColor(159, 44, 42) self.line_midi_jack_sel = QColor(159 + 90, 44 + 90, 42 + 90) self.line_midi_jack_glow = QColor(200, 100, 100) self.line_midi_a2j = QColor(137, 76, 43) self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90) self.line_midi_a2j_glow = QColor(166, 133, 133) self.line_midi_alsa = QColor(93, 141, 46) self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90) self.line_midi_alsa_glow = QColor(100, 200, 100) self.rubberband_pen = QPen(QColor(206, 207, 208), 1, Qt.SolidLine) self.rubberband_brush = QColor(76, 77, 78, 100) if idx == self.THEME_MODERN_DARK_TEXT: # Canvas self.canvas_bg = QColor(0, 0, 0) # Boxes self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine) self.box_pen_sel = QPen(QColor(206, 207, 208), 1, Qt.DashLine) self.box_bg_1 = QColor(15, 15, 15) self.box_bg_2 = self.box_bg_1 self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = QColor(255, 255, 255, 60) self.box_header_pixmap = None self.box_header_height = 14 self.box_header_spacing = 0 self.box_rounding = 3.0 self.box_bottom_space = 3 self.box_text = QPen(QColor(240, 240, 240), 0) self.box_text_sel = self.box_text self.box_font_name = "Deja Vu Sans" self.box_font_size = 7 self.box_font_state = QFont.Bold self.box_bg_type = self.THEME_BG_SOLID self.box_use_icon = False # Ports self.port_text = QPen(QColor(250, 250, 250, 180), 1) self.port_hover = QColor(255, 255, 255, 40) self.port_bg_pixmap = None self.port_font_name = "Deja Vu Sans" self.port_font_size = 6 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_SQUARE self.port_audio_jack_pen = Qt.NoPen self.port_audio_jack_pen_sel = Qt.NoPen self.port_midi_jack_pen = Qt.NoPen self.port_midi_jack_pen_sel = Qt.NoPen self.port_midi_a2j_pen = Qt.NoPen self.port_midi_a2j_pen_sel = Qt.NoPen self.port_midi_alsa_pen = Qt.NoPen self.port_midi_alsa_pen_sel = Qt.NoPen self.port_audio_jack_bg = QColor(0, 0, 0, 0) self.port_midi_jack_bg = QColor(0, 0, 0, 0) self.port_midi_a2j_bg = QColor(0, 0, 0, 0) self.port_midi_alsa_bg = QColor(0, 0, 0, 0) self.port_audio_jack_bg_sel = QColor(60, 71, 99) self.port_midi_jack_bg_sel = QColor(120, 70, 70) self.port_midi_a2j_bg_sel = QColor(120, 80, 60) self.port_midi_alsa_bg_sel = QColor(64, 112, 48) self.port_audio_jack_text = QPen( hsvAdjusted(QColor(63, 90, 126), value=255), 1) self.port_midi_jack_text = QPen( hsvAdjusted(QColor(159, 44, 42), value=255), 1) self.port_midi_a2j_text = QPen( hsvAdjusted(QColor(137, 76, 43), value=255), 1) self.port_midi_alsa_text = QPen( hsvAdjusted(QColor(93, 141, 46), value=255), 1) self.port_audio_jack_text_sel = QPen( self.port_audio_jack_text.color().lighter(130), 1) self.port_midi_jack_text_sel = QPen( self.port_midi_jack_text.color().lighter(150), 1) self.port_midi_a2j_text_sel = QPen( self.port_midi_a2j_text.color().lighter(150), 1) self.port_midi_alsa_text_sel = QPen( self.port_midi_alsa_text.color().lighter(150), 1) self.port_text_padding = 0 self.port_offset = 0 self.port_spacing = 0 self.port_spacingT = 2 self.port_rounding = 6.0 # Lines self.line_audio_jack = QColor(63, 90, 126) self.line_audio_jack_sel = QColor(63 + 90, 90 + 90, 126 + 90) self.line_audio_jack_glow = QColor(100, 100, 200) self.line_midi_jack = QColor(159, 44, 42) self.line_midi_jack_sel = QColor(159 + 90, 44 + 90, 42 + 90) self.line_midi_jack_glow = QColor(200, 100, 100) self.line_midi_a2j = QColor(137, 76, 43) self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90) self.line_midi_a2j_glow = QColor(166, 133, 133) self.line_midi_alsa = QColor(93, 141, 46) self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90) self.line_midi_alsa_glow = QColor(100, 200, 100) self.rubberband_pen = QPen(QColor(206, 207, 208), 1, Qt.SolidLine) self.rubberband_brush = QColor(76, 77, 78, 100) elif idx == self.THEME_MODERN_LIGHT: # Canvas self.canvas_bg = QColor(248, 249, 250) # Boxes self.box_pen = QPen(QColor(0, 0, 0, 60), 1, Qt.SolidLine) self.box_pen_sel = QPen(QColor(1, 2, 3), 2, Qt.DashLine) self.box_bg_1 = QColor(220, 220, 220) self.box_bg_2 = self.box_bg_1.darker(120) self.box_shadow = QColor(1, 1, 1, 100) self.box_hover = QColor(0, 0, 0, 60) self.box_header_pixmap = None self.box_header_height = 24 self.box_header_spacing = 0 self.box_rounding = 3.0 self.box_bottom_space = 3 self.box_text = QPen(QColor(1, 1, 1), 0) self.box_text_sel = self.box_text self.box_font_name = "Ubuntu" self.box_font_size = 10 self.box_font_state = QFont.Bold self.box_bg_type = self.THEME_BG_GRADIENT self.box_use_icon = True # Ports self.port_text = QPen(QColor(255, 255, 255, 220), 1) self.port_hover = QColor(0, 0, 0, 255) self.port_bg_pixmap = None self.port_font_name = "Ubuntu" self.port_font_size = 9 self.port_font_state = QFont.Bold self.port_mode = self.THEME_PORT_POLYGON # Port colors port_audio_jack_color = QColor.fromHsv(240, 214, 181) port_midi_jack_color = QColor.fromHsv(0, 214, 130) port_midi_a2j_color = QColor.fromHsv(22, 214, 102) port_midi_alsa_color = QColor.fromHsv(91, 214, 112) port_lineW = 1 port_pen_shade = 130 self.port_audio_jack_pen = QPen( port_audio_jack_color.darker(port_pen_shade), port_lineW) self.port_midi_jack_pen = QPen( port_midi_jack_color.darker(port_pen_shade), port_lineW) self.port_midi_a2j_pen = QPen( port_midi_a2j_color.darker(port_pen_shade), port_lineW) self.port_midi_alsa_pen = QPen( port_midi_alsa_color.darker(port_pen_shade), port_lineW) port_selW = 1.5 self.port_audio_jack_pen_sel = QPen( port_audio_jack_color.lighter(port_pen_shade), port_selW) self.port_midi_jack_pen_sel = QPen( port_midi_jack_color.lighter(port_pen_shade), port_selW) self.port_midi_a2j_pen_sel = QPen( port_midi_a2j_color.lighter(port_pen_shade), port_selW) self.port_midi_alsa_pen_sel = QPen( port_midi_alsa_color.lighter(port_pen_shade), port_selW) port_bg_shade = 170 self.port_audio_jack_bg = port_audio_jack_color self.port_midi_jack_bg = port_midi_jack_color self.port_midi_a2j_bg = port_midi_a2j_color self.port_midi_alsa_bg = port_midi_alsa_color self.port_audio_jack_bg_sel = hsvAdjustedRel( self.port_audio_jack_bg, saturation=-80).lighter(130) self.port_midi_jack_bg_sel = hsvAdjustedRel( self.port_midi_jack_bg, saturation=-80).lighter(130) self.port_midi_a2j_bg_sel = hsvAdjustedRel( self.port_midi_a2j_bg, saturation=-80).lighter(130) self.port_midi_alsa_bg_sel = hsvAdjustedRel( self.port_midi_alsa_bg, saturation=-80).lighter(130) self.port_audio_jack_text = QPen( hsvAdjustedRel(port_audio_jack_color, hue=-30, saturation=-70, value=70), 1) self.port_midi_jack_text = QPen( hsvAdjustedRel(port_midi_jack_color, hue=10, saturation=-70, value=70), 1) self.port_midi_a2j_text = QPen( hsvAdjustedRel(port_midi_a2j_color, hue=8, saturation=-70, value=70), 1) self.port_midi_alsa_text = QPen( hsvAdjustedRel(port_midi_alsa_color, hue=-8, saturation=-70, value=70), 1) self.port_audio_jack_text_sel = self.port_text self.port_midi_jack_text_sel = self.port_text self.port_midi_a2j_text_sel = self.port_text self.port_midi_alsa_text_sel = self.port_text self.port_text_padding = 0.5 self.port_offset = 0 self.port_spacing = 2 self.port_spacingT = 1 self.port_rounding = 0.0 # To not scale some line widths self.box_pen.setCosmetic(True) self.box_pen_sel.setCosmetic(True) self.port_audio_jack_pen.setCosmetic(True) self.port_audio_jack_pen_sel.setCosmetic(True) self.port_midi_jack_pen.setCosmetic(True) self.port_midi_jack_pen_sel.setCosmetic(True) self.port_midi_a2j_pen.setCosmetic(True) self.port_midi_a2j_pen_sel.setCosmetic(True) self.port_midi_alsa_pen.setCosmetic(True) self.port_midi_alsa_pen_sel.setCosmetic(True) # Lines self.line_audio_jack = QColor(63, 90, 126) self.line_audio_jack_sel = QColor(63 + 63, 90 + 90, 126 + 90) self.line_audio_jack_glow = QColor(100, 100, 200) self.line_midi_jack = QColor(159, 44, 42) self.line_midi_jack_sel = QColor(159 + 44, 44 + 90, 42 + 90) self.line_midi_jack_glow = QColor(200, 100, 100) self.line_midi_a2j = QColor(137, 43, 43) self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90) self.line_midi_a2j_glow = QColor(166, 133, 133) self.line_midi_alsa = QColor(93, 141, 46) self.line_midi_alsa_sel = QColor(93 + 90, 141 + 90, 46 + 90) self.line_midi_alsa_glow = QColor(100, 200, 100) self.rubberband_pen = QPen(QColor(76, 77, 78, 130), 1, Qt.SolidLine) self.rubberband_brush = QColor(76, 77, 78, 100) elif idx == self.THEME_CLASSIC_DARK: # Canvas self.canvas_bg = QColor(0, 0, 0) # Boxes self.box_pen = QPen(QColor(143 - 70, 143 - 70, 143 - 70), 2, Qt.SolidLine) self.box_pen_sel = QPen(QColor(143, 143, 143), 2, Qt.CustomDashLine, Qt.RoundCap) self.box_pen_sel.setDashPattern([1.5, 3]) self.box_bg_1 = QColor(30, 34, 36) self.box_bg_2 = QColor(30, 34, 36) self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = QColor(255, 255, 255, 60) self.box_header_pixmap = None self.box_header_height = 19 self.box_header_spacing = 0 self.box_rounding = 0 self.box_bottom_space = 3 self.box_text = QPen(QColor(255, 255, 255), 0) self.box_text_sel = self.box_text self.box_font_name = "Sans" self.box_font_size = 9 self.box_font_state = QFont.Normal self.box_bg_type = self.THEME_BG_GRADIENT self.box_use_icon = False # Ports self.port_text = QPen(QColor(250, 250, 250), 0) self.port_hover = QColor(255, 255, 255, 80) self.port_bg_pixmap = None self.port_font_name = "Sans" self.port_font_size = 8 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_SQUARE port_pen = Qt.NoPen self.port_audio_jack_pen = port_pen self.port_midi_jack_pen = port_pen self.port_midi_a2j_pen = port_pen self.port_midi_alsa_pen = port_pen self.port_audio_jack_pen_sel = port_pen self.port_midi_jack_pen_sel = port_pen self.port_midi_a2j_pen_sel = port_pen self.port_midi_alsa_pen_sel = port_pen self.port_audio_jack_bg = QColor(35, 61, 99) self.port_midi_jack_bg = QColor(120, 15, 16) self.port_midi_a2j_bg = QColor(101, 47, 17) self.port_midi_alsa_bg = QColor(63, 112, 19) self.port_audio_jack_bg_sel = hsvAdjustedRel( self.port_audio_jack_bg.lighter(150), saturation=-60) self.port_midi_jack_bg_sel = hsvAdjustedRel( self.port_midi_jack_bg.lighter(150), saturation=-60) self.port_midi_a2j_bg_sel = hsvAdjustedRel( self.port_midi_a2j_bg.lighter(150), saturation=-60) self.port_midi_alsa_bg_sel = hsvAdjustedRel( self.port_midi_alsa_bg.lighter(150), saturation=-60) self.port_audio_jack_text = self.port_text self.port_audio_jack_text_sel = self.port_text self.port_midi_jack_text = self.port_text self.port_midi_jack_text_sel = self.port_text self.port_midi_a2j_text = self.port_text self.port_midi_a2j_text_sel = self.port_text self.port_midi_alsa_text = self.port_text self.port_midi_alsa_text_sel = self.port_text self.port_text_padding = 0 self.port_offset = 0 self.port_spacing = 1 self.port_spacingT = 0 self.port_rounding = 0 # Lines self.line_audio_jack = QColor(53, 78, 116) self.line_audio_jack_sel = self.line_audio_jack.lighter(200) self.line_audio_jack_glow = self.line_audio_jack.lighter(180) self.line_midi_jack = QColor(139, 32, 32) self.line_midi_jack_sel = self.line_midi_jack.lighter(200) self.line_midi_jack_glow = self.line_midi_jack.lighter(180) self.line_midi_a2j = QColor(120, 65, 33) self.line_midi_a2j_sel = self.line_midi_a2j.lighter(200) self.line_midi_a2j_glow = self.line_midi_a2j.lighter(180) self.line_midi_alsa = QColor(81, 130, 36) self.line_midi_alsa_sel = self.line_midi_alsa.lighter(200) self.line_midi_alsa_glow = self.line_midi_alsa.lighter(180) self.rubberband_pen = QPen(QColor.fromHsv(191, 100, 120, 170), 2, Qt.SolidLine) self.rubberband_brush = QColor.fromHsv(191, 100, 99, 100) elif idx == self.THEME_PROTOCLASSIC_DARK: # Canvas self.canvas_bg = QColor(0, 0, 0) # Boxes self.box_bg_1 = QColor(30, 41, 58) self.box_bg_2 = QColor(30, 41, 58) self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = hsvAdjusted(self.box_bg_1, value=255, saturation=80) self.box_pen = QPen( hsvAdjusted(self.box_bg_1, value=180, saturation=60), 1, Qt.SolidLine) self.box_pen_sel = QPen(self.box_pen) self.box_pen_sel.setDashPattern([3, 4]) self.box_header_pixmap = None self.box_header_height = 19 self.box_header_spacing = 0 self.box_rounding = 0.0 self.box_bottom_space = 2 self.box_text = QPen( hsvAdjusted(self.box_bg_1, value=255, saturation=60), 1, Qt.SolidLine) self.box_text_sel = QPen( hsvAdjusted(self.box_bg_1, value=255, saturation=30), 1) self.box_font_name = "Dejavu Sans" self.box_font_size = 8 self.box_font_state = QFont.Normal self.box_bg_type = self.THEME_BG_GRADIENT self.box_use_icon = False # Ports self.port_text = QPen(QColor(255, 255, 255), 1) self.port_hover = QColor(255, 255, 255, 150) self.port_bg_pixmap = None self.port_font_name = "Dejavu Sans" self.port_font_size = 6 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_SQUARE self.port_audio_jack_bg = QColor(63, 88, 133) self.port_midi_jack_bg = hsvAdjusted(QColor(120, 15, 16), saturation=150) self.port_midi_a2j_bg = hsvAdjusted(QColor(101, 47, 17), saturation=150) self.port_midi_alsa_bg = hsvAdjusted(QColor(44, 141, 92), saturation=150, value=120) self.port_audio_jack_bg_sel = hsvAdjusted( self.port_audio_jack_bg.lighter(140), saturation=80) self.port_midi_jack_bg_sel = hsvAdjusted( self.port_midi_jack_bg.lighter(140), saturation=80) self.port_midi_a2j_bg_sel = hsvAdjusted( self.port_midi_a2j_bg.lighter(140), saturation=80) self.port_midi_alsa_bg_sel = hsvAdjusted( self.port_midi_alsa_bg.lighter(140), saturation=80) port_pen = QPen(QColor(255, 255, 255, 50), 1) self.port_audio_jack_pen_sel = self.port_audio_jack_pen = QPen( hsvAdjusted(self.port_audio_jack_bg.lighter(140), saturation=80), 1) self.port_midi_jack_pen_sel = self.port_midi_jack_pen = QPen( hsvAdjusted(self.port_midi_jack_bg.lighter(140), saturation=80), 1) self.port_midi_a2j_pen_sel = self.port_midi_a2j_pen = QPen( hsvAdjusted(self.port_midi_a2j_bg.lighter(140), saturation=80), 1) self.port_midi_alsa_pen_sel = self.port_midi_alsa_pen = QPen( hsvAdjusted(self.port_midi_alsa_bg.lighter(140), saturation=80), 1) self.port_audio_jack_text = QPen( hsvAdjusted(self.port_audio_jack_bg, saturation=40, value=255), 1) self.port_midi_jack_text = QPen( hsvAdjusted(self.port_midi_jack_bg, saturation=40, value=255), 1) self.port_midi_a2j_text = QPen( hsvAdjusted(self.port_midi_a2j_bg, saturation=40, value=255), 1) self.port_midi_alsa_text = QPen( hsvAdjusted(self.port_midi_alsa_bg, saturation=40, value=255), 1) self.port_audio_jack_text_sel = self.port_text self.port_midi_jack_text_sel = self.port_text self.port_midi_a2j_text_sel = self.port_text self.port_midi_alsa_text_sel = self.port_text self.port_text_padding = 1.5 self.port_offset = 0 self.port_spacing = 1 self.port_spacingT = 0 self.port_rounding = 0.0 self.port_inglow_alpha = 0 self.port_inglow_size = 0 # Lines self.line_audio_jack = self.port_audio_jack_bg self.line_audio_jack_sel = self.port_audio_jack_bg_sel self.line_audio_jack_glow = self.port_audio_jack_bg_sel self.line_midi_jack = self.port_midi_jack_bg self.line_midi_jack_sel = self.port_midi_jack_bg_sel self.line_midi_jack_glow = self.port_midi_jack_bg_sel self.line_midi_a2j = self.port_midi_a2j_bg self.line_midi_a2j_sel = self.port_midi_a2j_bg_sel self.line_midi_a2j_glow = self.port_midi_a2j_bg_sel self.line_midi_alsa = self.port_midi_alsa_bg self.line_midi_alsa_sel = self.port_midi_alsa_bg_sel self.line_midi_alsa_glow = self.port_midi_alsa_bg_sel self.rubberband_pen = QPen(self.box_pen) self.rubberband_pen.setDashPattern([3, 4]) self.rubberband_brush = QColor(0, 0, 0, 0) elif idx == self.THEME_NEOCLASSIC_DARK: # Canvas self.canvas_bg = QColor(0, 0, 0) # Boxes self.box_pen = QPen(QColor(143 - 70, 143 - 70, 143 - 70), 2, Qt.SolidLine) self.box_pen_sel = QPen(QColor(143, 143, 143), 2, Qt.CustomDashLine, Qt.RoundCap) self.box_pen_sel.setDashPattern([1.5, 3]) self.box_bg_1 = QColor(30, 34, 36) self.box_bg_2 = QColor(30, 34, 36) self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = QColor(255, 255, 255, 60) self.box_header_pixmap = None self.box_header_height = 19 self.box_header_spacing = 0 self.box_rounding = 4.0 self.box_bottom_space = 6 self.box_text = QPen(QColor(255, 255, 255), 0) self.box_text_sel = self.box_text self.box_font_name = "Sans" self.box_font_size = 8 self.box_font_state = QFont.Normal self.box_bg_type = self.THEME_BG_GRADIENT self.box_use_icon = False # Ports self.port_text = QPen(QColor(250, 250, 250), 0) self.port_hover = QColor(255, 255, 255, 80) self.port_bg_pixmap = None self.port_font_name = "Sans" self.port_font_size = 8 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_SQUARE port_dash = [4, 3] self.port_audio_jack_pen = QPen(QColor(55, 91, 149), 1) self.port_midi_jack_pen = QPen(QColor(150, 25, 26), 1) self.port_midi_a2j_pen = QPen(QColor(141, 67, 27), 1) self.port_midi_alsa_pen = QPen(QColor(83, 152, 29), 1) self.port_audio_jack_pen_sel = QPen( hsvAdjustedRel(QColor(55, 91, 149), saturation=-80, value=80), 1) self.port_midi_jack_pen_sel = QPen( hsvAdjustedRel(QColor(150, 25, 26), saturation=-80, value=80), 1) self.port_midi_a2j_pen_sel = QPen( hsvAdjustedRel(QColor(141, 67, 27), saturation=-80, value=80), 1) self.port_midi_alsa_pen_sel = QPen( hsvAdjustedRel(QColor(83, 152, 29), saturation=-80, value=80), 1) self.port_audio_jack_pen_sel.setDashPattern(port_dash) self.port_midi_jack_pen_sel.setDashPattern(port_dash) self.port_midi_a2j_pen_sel.setDashPattern(port_dash) self.port_midi_alsa_pen_sel.setDashPattern(port_dash) self.port_audio_jack_bg = QColor(35, 61, 99) self.port_midi_jack_bg = QColor(120, 15, 16) self.port_midi_a2j_bg = QColor(101, 47, 17) self.port_midi_alsa_bg = QColor(63, 112, 19) self.port_audio_jack_bg_sel = self.port_audio_jack_bg.darker(130) self.port_midi_jack_bg_sel = self.port_midi_jack_bg.darker(130) self.port_midi_a2j_bg_sel = self.port_midi_a2j_bg.darker(130) self.port_midi_alsa_bg_sel = self.port_midi_alsa_bg.darker(130) self.port_audio_jack_text = self.port_text self.port_audio_jack_text_sel = self.port_text self.port_midi_jack_text = self.port_text self.port_midi_jack_text_sel = self.port_text self.port_midi_a2j_text = self.port_text self.port_midi_a2j_text_sel = self.port_text self.port_midi_alsa_text = self.port_text self.port_midi_alsa_text_sel = self.port_text self.port_text_padding = 1 self.port_offset = 0 self.port_spacing = 1 self.port_spacingT = 0 self.port_rounding = 4.0 # Lines self.line_audio_jack = QColor(53, 78, 116) self.line_audio_jack_sel = self.line_audio_jack.lighter(200) self.line_audio_jack_glow = self.line_audio_jack.lighter(180) self.line_midi_jack = QColor(139, 32, 32) self.line_midi_jack_sel = self.line_midi_jack.lighter(200) self.line_midi_jack_glow = self.line_midi_jack.lighter(180) self.line_midi_a2j = QColor(120, 65, 33) self.line_midi_a2j_sel = self.line_midi_a2j.lighter(200) self.line_midi_a2j_glow = self.line_midi_a2j.lighter(180) self.line_midi_alsa = QColor(81, 130, 36) self.line_midi_alsa_sel = self.line_midi_alsa.lighter(200) self.line_midi_alsa_glow = self.line_midi_alsa.lighter(180) self.rubberband_pen = QPen(QColor.fromHsv(191, 100, 120, 170), 2, Qt.SolidLine) self.rubberband_brush = QColor.fromHsv(191, 100, 99, 100) elif idx == self.THEME_OOSTUDIO: # Canvas self.canvas_bg = QColor(11, 11, 11) # Boxes self.box_pen = QPen(QColor(76, 77, 78), 1, Qt.SolidLine) self.box_pen_sel = QPen(QColor(189, 122, 214), 1, Qt.DashLine) self.box_bg_1 = QColor(46, 46, 46) self.box_bg_2 = QColor(23, 23, 23) self.box_shadow = QColor(89, 89, 89, 180) self.box_hover = QColor(255, 255, 255, 60) self.box_header_pixmap = QPixmap( ":/bitmaps/canvas/frame_node_header.png") self.box_header_height = 22 self.box_header_spacing = 6 self.box_rounding = 3.0 self.box_bottom_space = 4 self.box_text = QPen(QColor(144, 144, 144), 0) self.box_text_sel = QPen(QColor(189, 122, 214), 0) self.box_font_name = "Deja Vu Sans" self.box_font_size = 8 self.box_font_state = QFont.Bold self.box_bg_type = self.THEME_BG_SOLID self.box_use_icon = False # Ports normalPortBG = QColor(46, 46, 46) selPortBG = QColor(23, 23, 23) self.port_text = QPen(QColor(155, 155, 155), 0) self.port_hover = QColor(255, 255, 255, 80) self.port_bg_pixmap = QPixmap(":/bitmaps/canvas/frame_port_bg.png") self.port_font_name = "Deja Vu Sans" self.port_font_size = 8 self.port_font_state = QFont.Normal self.port_mode = self.THEME_PORT_SQUARE self.port_audio_jack_pen = QPen(selPortBG, 2) self.port_audio_jack_pen_sel = QPen(QColor(1, 230, 238), 1) self.port_midi_jack_pen = QPen(selPortBG, 2) self.port_midi_jack_pen_sel = QPen(QColor(252, 118, 118), 1) self.port_midi_a2j_pen = QPen(selPortBG, 2) self.port_midi_a2j_pen_sel = QPen(QColor(137, 76, 43), 1) self.port_midi_alsa_pen = QPen(selPortBG, 2) self.port_midi_alsa_pen_sel = QPen(QColor(129, 244, 118), 0) self.port_audio_jack_bg = normalPortBG self.port_audio_jack_bg_sel = selPortBG self.port_midi_jack_bg = normalPortBG self.port_midi_jack_bg_sel = selPortBG self.port_midi_a2j_bg = normalPortBG self.port_midi_a2j_bg_sel = selPortBG self.port_midi_alsa_bg = normalPortBG self.port_midi_alsa_bg_sel = selPortBG self.port_audio_jack_text = self.port_text self.port_audio_jack_text_sel = self.port_audio_jack_pen_sel self.port_midi_jack_text = self.port_text self.port_midi_jack_text_sel = self.port_midi_jack_pen_sel self.port_midi_a2j_text = self.port_text self.port_midi_a2j_text_sel = self.port_midi_a2j_pen_sel self.port_midi_alsa_text = self.port_text self.port_midi_alsa_text_sel = self.port_midi_alsa_pen_sel # missing, ports 2 self.port_text_padding = 3 self.port_offset = -1 self.port_spacing = 3 self.port_spacingT = 0 self.port_rounding = 3.0 # Lines self.line_audio_jack = QColor(64, 64, 64) self.line_audio_jack_sel = QColor(1, 230, 238) self.line_audio_jack_glow = QColor(100, 200, 100) self.line_midi_jack = QColor(64, 64, 64) self.line_midi_jack_sel = QColor(252, 118, 118) self.line_midi_jack_glow = QColor(200, 100, 100) self.line_midi_a2j = QColor(64, 64, 64) self.line_midi_a2j_sel = QColor(137 + 90, 76 + 90, 43 + 90) self.line_midi_a2j_glow = QColor(166, 133, 133) self.line_midi_alsa = QColor(64, 64, 64) self.line_midi_alsa_sel = QColor(129, 244, 118) self.line_midi_alsa_glow = QColor(100, 200, 100) self.rubberband_pen = QPen(QColor(1, 230, 238), 2, Qt.SolidLine) self.rubberband_brush = QColor(90, 90, 90, 100) # Font-dependant port height port_font = QFont(self.port_font_name, self.port_font_size, self.port_font_state) self.port_height = QFontMetrics( port_font).height() + 2 * self.port_text_padding
class FeatureHighlightItem(QgsMapCanvasItem): # Code ported from QGIS QgsHighlight def __init__(self, mapCanvas, feature, layer): super(FeatureHighlightItem, self).__init__(mapCanvas) self._mapCanvas = None # QgsMapCanvas self._brush = QBrush() self._pen = QPen() self._feature = None # QgsFeature() self._layer = None # QgsMapLayer() self._buffer = 0.0 self._minWidth = 0.0 self._mapCanvas = mapCanvas if (not layer or not feature or not isinstance(feature, QgsFeature) or not feature.geometry() or feature.geometry().isEmpty() or not feature.geometry().isGeosValid()): return self._feature = QgsFeature(feature) # Force deep copy self._layer = layer self.setLineColor(Application.highlightLineColor()) self.setFillColor(Application.highlightFillColor()) self._minWidth = Application.highlightMinimumWidth() self._buffer = Application.highlightBuffer() if self._mapCanvas.mapSettings().hasCrsTransformEnabled(): ct = self._mapCanvas.mapSettings().layerTransform(self._layer) if ct: self._feature.geometry().transform(ct) self.updateRect() self.update() def remove(self): self._mapCanvas.scene().removeItem(self) def setLineWidth(self, width): self._pen.setWidth(width) def setLineColor(self, color): self._pen.setColor(color) def setFillColor(self, fillColor): self._brush.setColor(fillColor) self._brush.setStyle(Qt.SolidPattern) def setBuffer(self, buff): self._buffer = buff def setMinWidth(self, width): self._minWidth = width def layer(self): return self._layer def updatePosition(self): pass # protected: def paint(self, painter, option=None, widget=None): # Override if not self._feature: return mapSettings = self._mapCanvas.mapSettings() context = QgsRenderContext.fromMapSettings(mapSettings) renderer = self._getRenderer(context, self._pen.color(), self._brush.color()) if renderer: context.setPainter(painter) renderer.startRender(context, self._layer.fields()) renderer.renderFeature(self._feature, context) renderer.stopRender(context) def updateRect(self): if self._feature and self._feature.constGeometry(): m2p = self._mapCanvas.mapSettings().mapToPixel() topLeft = m2p.toMapPoint(0, 0) res = m2p.mapUnitsPerPixel() imageSize = self._mapCanvas.mapSettings().outputSize() rect = QgsRectangle(topLeft.x(), topLeft.y(), topLeft.x() + imageSize.width() * res, topLeft.y() - imageSize.height() * res) self.setRect(rect) self.setVisible(True) else: self.setRect(QgsRectangle()) # private: def _setSymbol(self, symbol, context, color, fillColor): if not symbol: return for symbolLayer in reversed(symbol.symbolLayers()): if symbolLayer: if symbolLayer.subSymbol(): self._setSymbol(symbolLayer.subSymbol(), context, color, fillColor) else: symbolLayer.setColor(color) symbolLayer.setOutlineColor(color) symbolLayer.setFillColor(fillColor) if isinstance(symbolLayer, QgsSimpleMarkerSymbolLayerV2): symbolLayer.setOutlineWidth( self._getSymbolWidth(context, symbolLayer.outlineWidth(), symbolLayer.outlineWidthUnit())) if symbolLayer.type() == QgsSymbolV2.Line: symbolLayer.setWidth( self._getSymbolWidth(context, symbolLayer.width(), symbolLayer.widthUnit())) if symbolLayer.type() == QgsSymbolV2.Fill: symbolLayer.setBorderWidth( self._getSymbolWidth(context, symbolLayer.borderWidth(), symbolLayer.outputUnit())) symbolLayer.removeDataDefinedProperty('color') symbolLayer.removeDataDefinedProperty('color_border') def _getSymbolWidth(self, context, width, unit): scale = 1.0 if unit == QgsSymbolV2.MapUnit: scale = QgsSymbolLayerV2Utils.lineWidthScaleFactor( context, QgsSymbolV2.MM) / QgsSymbolLayerV2Utils.lineWidthScaleFactor(context, QgsSymbolV2.MapUnit) width = max(width + 2 * self._buffer * scale, self._minWidth * scale) return width def _getRenderer(self, context, color, fillColor): renderer = None if self._layer and self._layer.rendererV2(): renderer = self._layer.rendererV2().clone() if renderer: for symbol in renderer.symbols2(context): self._setSymbol(symbol, context, color, fillColor) return renderer
def paintEvent(self, e): """ """ PKWidget.paintEvent(self, e) painter = QPainter(self) orig_pen = QPen(painter.pen()) orig_brush = QBrush(painter.brush()) orig_font = QFont(painter.font()) metrics = painter.fontMetrics() f_height = metrics.ascent() text_flags = Qt.AlignHCenter | Qt.AlignVCenter region = e.region() for item in self._shown: font_y = item.y + item.height / 2 + f_height / 2 item_rect = QRect(0, item.y, self.width(), item.height) if not region.contains(item_rect): continue painter.setFont(orig_font) # background pen = item.color().dark(110) pen.setAlpha(100) painter.setBrush(QBrush(item.color())) painter.setPen(QPen(pen)) w = self.width() * (item.progress * .01) rect = QRect(0, item.y, w, item.height) painter.drawRect(rect) # queue pos pen = pen.dark(140) pen.setAlpha(255) painter.setPen(QPen(pen)) queue_rect = QRect(self.padding, item.y + self.padding, item.height - self.padding * 2, item.height - self.padding * 2) painter.drawRoundRect(queue_rect, 35, 35) # num if not item.num is None: painter.setPen(orig_pen) painter.setBrush(orig_brush) painter.drawText(queue_rect, text_flags, str(item.num)) # text painter.setPen(orig_pen) painter.setBrush(orig_brush) font = QFont('Utopia, Italic', 14, -1, True) painter.setFont(font) rect = QRect(item_rect) rect.setX(item.height + self.padding * 2) rect.setWidth(rect.width() - rect.x()) painter.drawText(rect, Qt.AlignVCenter | Qt.AlignLeft, item.text) # state if item.state: font = QFont('7th Service Expanded Italic, Italic') font.setPointSize(18) pen = QColor(orig_pen.color()) pen.setAlpha(50) painter.setPen(QPen(pen)) painter.setFont(font) x = item.x y = item.y w = self.width() h = item.height rect = QRect(x, y, w, h) flags = Qt.AlignVCenter | Qt.AlignRight painter.drawText(rect, flags, item.state+' ')