''

def update_canvas(self):

    (w, h) = (self.parent.size().width(), self.parent.size().height())
    self.path_full = QPainterPath()
    self.path_subtract = QPainterPath()
    self.path_decoration = QPainterPath()
    self.region_mask = QRegion(0, 0, w, h)
    self.path_full.addRect(0, 0, w, h)
    if (self.widgets is not None):
        for widget in self.widgets:
            temp_path = QPainterPath()
            if (widget is not None):
                widget.raise_()
                widget.show()
                geo = widget.frameGeometry()
                (width, height) = (geo.width(), geo.height())
                point = widget.mapTo(self.parent, QPoint(0, 0))
                (x, y) = (point.x(), point.y())
                temp_path.addRect(QRectF(x, y, width, height))
                temp_region = QRegion(x, y, width, height)
            if self.interaction_on:
                self.region_mask = self.region_mask.subtracted(temp_region)
            self.path_subtract = self.path_subtract.united(temp_path)
        self.path_current = self.path_full.subtracted(self.path_subtract)
    else:
        self.path_current = self.path_full
    if (self.decoration is not None):
        for widget in self.decoration:
            temp_path = QPainterPath()
            widget.raise_()
            widget.show()
            geo = widget.frameGeometry()
            (width, height) = (geo.width(), geo.height())
            point = widget.mapTo(self.parent, QPoint(0, 0))
            (x, y) = (point.x(), point.y())
            temp_path.addRect(QRectF(x, y, width, height))
            temp_region_1 = QRegion((x - 1), (y - 1), (width + 2), (height + 2))
            temp_region_2 = QRegion((x + 1), (y + 1), (width - 2), (height - 2))
            temp_region = temp_region_1.subtracted(temp_region_2)
            if self.interaction_on:
                self.region_mask = self.region_mask.united(temp_region)
            self.path_decoration = self.path_decoration.united(temp_path)
    else:
        self.path_decoration.addRect(0, 0, 0, 0)
    self.setMask(self.region_mask)
    self.update()
    self.repaint()
