def _make_connecting_path(self, guide_path): """Returns a 'thick' path connecting source and destination, by following the given 'guide' path. Args: guide_path (QPainterPath) Returns: QPainterPath """ points, angles = self._points_and_angles_from_path(guide_path) outgoing_points = [] incoming_points = [] for point, angle in zip(points, angles): off = self._radius_from_point_and_angle(point, angle) outgoing_points.append(point + off) incoming_points.insert(0, point - off) p0 = guide_path.pointAtPercent(0) a0 = guide_path.angleAtPercent(0) off0 = self._radius_from_point_and_angle(p0, a0) curve_path = QPainterPath(p0 + off0) self._follow_points(curve_path, outgoing_points) curve_path.lineTo(incoming_points[0]) self._follow_points(curve_path, incoming_points) curve_path.lineTo(p0 - off0) curve_path.closeSubpath() curve_path.setFillRule(Qt.WindingFill) return curve_path.simplified()
def shape(self): path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRect(self.rect()) for handle in self.handles: path.addRect(handle.boundingRect()) return path
def drawValue(self, p, baseRect, value, arcLength): # nothing to draw if value == self.min: return # for Line style if self.barStyle == self.StyleLine: p.setPen( QPen(self.palette().highlight().color(), self.dataPenWidth)) p.setBrush(Qt.NoBrush) p.drawArc( baseRect.adjusted(self.outlinePenWidth / 2, self.outlinePenWidth / 2, -self.outlinePenWidth / 2, -self.outlinePenWidth / 2), self.nullPosition * 16, -arcLength * 16) return # for Pie and Donut styles dataPath = QPainterPath() dataPath.setFillRule(Qt.WindingFill) # pie segment outer dataPath.moveTo(baseRect.center()) dataPath.arcTo(baseRect, self.nullPosition, -arcLength) dataPath.lineTo(baseRect.center()) p.setBrush(self.palette().highlight()) p.setBrush(QColor(255, 255, 255, 255 * 0.3)) # pen = QtGui.QPen(self.palette().shadow().color(), self.dataPenWidth) pen = QPen(self.palette().shadow().color(), -1) p.setPen(pen) p.drawPath(dataPath)
def __paint_title_background(self, painter: "QPainter"): """Paints a little background behind the title text, at the top of the node.""" title_rect = self.__graphics_title.boundingRect() path_title_background = QPainterPath() path_title_background.setFillRule(Qt.WindingFill) path_title_background.addRoundedRect( 0, 0, self.background_paint_area().width(), title_rect.height(), self.round_edge_size, self.round_edge_size, ) # (Drawing rects to hide the two botton round edges) path_title_background.addRect( 0, title_rect.height() - self.round_edge_size, self.round_edge_size, self.round_edge_size, ) path_title_background.addRect( self.background_paint_area().width() - self.round_edge_size, title_rect.height() - self.round_edge_size, self.round_edge_size, self.round_edge_size, ) painter.setPen(Qt.NoPen) painter.setBrush(self.__title_background_brush) painter.drawPath(path_title_background.simplified())
def shape(self): """Returns a shape containing the entire bounding rect, to work better with icon transparency.""" path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRect(self._bg.boundingRect()) return path