diff --git a/TermTk/TTkCore/helper.py b/TermTk/TTkCore/helper.py index 0f2827cb..949d8ba6 100644 --- a/TermTk/TTkCore/helper.py +++ b/TermTk/TTkCore/helper.py @@ -289,9 +289,10 @@ class TTkHelper: if not widget.isVisibleAndParent(): continue # Resize the canvas just before the paintEvent # to avoid too many allocations - widget.getCanvas().updateSize() - widget.getCanvas().clean() - widget.paintEvent() + canvas = widget.getCanvas() + canvas.updateSize() + canvas.clean() + widget.paintEvent(canvas) # Compose all the canvas to the parents # From the deepest children to the bottom diff --git a/TermTk/TTkCore/ttk.py b/TermTk/TTkCore/ttk.py index e8805787..28b2704c 100644 --- a/TermTk/TTkCore/ttk.py +++ b/TermTk/TTkCore/ttk.py @@ -72,9 +72,9 @@ class TTk(TTkWidget): self.move(mevt.x, mevt.y) self.update() self.raiseWidget() - def paintEvent(self): - self._canvas.drawChar((0,0), self._cursor, self._color) - #self._canvas.drawChar((0,0),'✜') + def paintEvent(self, canvas): + canvas.drawChar((0,0), self._cursor, self._color) + #canvas.drawChar((0,0),'✜') __slots__ = ( '_input', '_termMouse', '_termDirectMouse', diff --git a/TermTk/TTkGui/drag.py b/TermTk/TTkGui/drag.py index c56cb078..fbf7a621 100644 --- a/TermTk/TTkGui/drag.py +++ b/TermTk/TTkGui/drag.py @@ -37,9 +37,9 @@ class _TTkDragDisplayWidget(TTkWidget): self._pixmap = pixmap self.setGeometry(x-hsx,y-hsy,w,h) - def paintEvent(self): + def paintEvent(self, canvas): _,_,w,h = self.geometry() - self._canvas.paintCanvas(self._pixmap, (0,0,w,h), (0,0,w,h), (0,0,w,h)) + canvas.paintCanvas(self._pixmap, (0,0,w,h), (0,0,w,h), (0,0,w,h)) class TTkDrag(): __slots__ = ('_data', '_pixmap', '_showPixmap', '_hotSpot') @@ -66,9 +66,10 @@ class TTkDrag(): def setPixmap(self, pixmap): if issubclass(type(pixmap),TTkWidget): - pixmap.getCanvas().updateSize() - pixmap.paintEvent() - pixmap = pixmap.getCanvas() + canvas = pixmap.getCanvas() + canvas.updateSize() + pixmap.paintEvent(canvas) + pixmap = canvas if type(pixmap) is TTkCanvas: pixmap.updateSize() self._pixmap.setPixmap(pixmap, self._hotSpot) diff --git a/TermTk/TTkGui/tooltip.py b/TermTk/TTkGui/tooltip.py index 6b8ed588..a0767c63 100644 --- a/TermTk/TTkGui/tooltip.py +++ b/TermTk/TTkGui/tooltip.py @@ -42,10 +42,9 @@ class _TTkToolTipDisplayWidget(TTkWidget): def mouseEvent(self, evt): return False - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() borderColor = TTkColor.fg("#888888") - canvas = self.getCanvas() canvas.drawBox(pos=(0,0),size=(w,h), color=borderColor) canvas.drawChar(pos=(0, 0), char='╭', color=borderColor) canvas.drawChar(pos=(w-1,0), char='╮', color=borderColor) diff --git a/TermTk/TTkTestWidgets/keypressview.py b/TermTk/TTkTestWidgets/keypressview.py index adc387e5..04c4ef54 100644 --- a/TermTk/TTkTestWidgets/keypressview.py +++ b/TermTk/TTkTestWidgets/keypressview.py @@ -104,17 +104,17 @@ class TTkKeyPressView(TTkWidget): ret[2] += m[2] return ret - def paintEvent(self): + def paintEvent(self, canvas): for alpha,text,_ in self._keys: r = int(0xbb*alpha) g = int(0xff*alpha) b = int(0xff*alpha) color = TTkColor.fg(f"#{r<<16|g<<8|b:06x}") - #self._canvas.drawText(pos=((self.width()-len(text))//2,0),text=text,color=color) + #canvas.drawText(pos=((self.width()-len(text))//2,0),text=text,color=color) m = self.txt2map(text) - self._canvas.drawText(pos=((self.width()-len(text)*3)//2,0),text=m[0],color=color) - self._canvas.drawText(pos=((self.width()-len(text)*3)//2,1),text=m[1],color=color) - self._canvas.drawText(pos=((self.width()-len(text)*3)//2,2),text=m[2],color=color) + canvas.drawText(pos=((self.width()-len(text)*3)//2,0),text=m[0],color=color) + canvas.drawText(pos=((self.width()-len(text)*3)//2,1),text=m[1],color=color) + canvas.drawText(pos=((self.width()-len(text)*3)//2,2),text=m[2],color=color) fontMap = TTkKeyPressViewFont.bitmap # fontMap = TTkKeyPressViewFont.calvin_s diff --git a/TermTk/TTkTestWidgets/logviewer.py b/TermTk/TTkTestWidgets/logviewer.py index 5440d1da..18a60044 100644 --- a/TermTk/TTkTestWidgets/logviewer.py +++ b/TermTk/TTkTestWidgets/logviewer.py @@ -71,11 +71,11 @@ class _TTkLogViewer(TTkAbstractScrollView): self.viewChanged.emit() self.update() - def paintEvent(self): + def paintEvent(self, canvas): ox,oy = self.getViewOffsets() _,h = self.size() for y, message in enumerate(self._messages[oy:oy+h]): - self._canvas.drawTTkString(pos=(-ox,y),text=message) + canvas.drawTTkString(pos=(-ox,y),text=message) class TTkLogViewer(TTkAbstractScrollArea): __slots__ = ('_logView') diff --git a/TermTk/TTkTestWidgets/testabstractscroll.py b/TermTk/TTkTestWidgets/testabstractscroll.py index a94b4c54..0d5e3845 100644 --- a/TermTk/TTkTestWidgets/testabstractscroll.py +++ b/TermTk/TTkTestWidgets/testabstractscroll.py @@ -42,17 +42,17 @@ class TTkTestAbstractScrollWidget(TTkAbstractScrollView): self._areaPos = self.getViewOffsets() self.update() - def paintEvent(self): - self._canvas.drawBox(pos=(0,0),size=(self._width,self._height)) + def paintEvent(self, canvas): + canvas.drawBox(pos=(0,0),size=(self._width,self._height)) t,_,l,_ = self.getPadding() - self._canvas.drawText(pos=(l+1,t+1+0), text=f"Test Widget [{self._name}]") - self._canvas.drawText(pos=(l+1,t+1+1), text=f"x,y ({self._x},{self._y})") - self._canvas.drawText(pos=(l+1,t+1+2), text=f"w,h ({self._width},{self._height})") - self._canvas.drawText(pos=(l+1,t+1+3), text=f"max w,h ({self._maxw},{self._maxh})") - self._canvas.drawText(pos=(l+1,t+1+4), text=f"min w,h ({self._minw},{self._minh})") - self._canvas.drawText(pos=(l+1,t+1+5), text=f"areaSize {self._areaSize}") - self._canvas.drawText(pos=(l+1,t+1+6), text=f"areaPos1 {self._areaPos}") - self._canvas.drawText(pos=(l+1,t+1+7), text=f"areaPos2 ({self._areaPos[0]+self._width},{self._areaPos[1]+self._height})") + canvas.drawText(pos=(l+1,t+1+0), text=f"Test Widget [{self._name}]") + canvas.drawText(pos=(l+1,t+1+1), text=f"x,y ({self._x},{self._y})") + canvas.drawText(pos=(l+1,t+1+2), text=f"w,h ({self._width},{self._height})") + canvas.drawText(pos=(l+1,t+1+3), text=f"max w,h ({self._maxw},{self._maxh})") + canvas.drawText(pos=(l+1,t+1+4), text=f"min w,h ({self._minw},{self._minh})") + canvas.drawText(pos=(l+1,t+1+5), text=f"areaSize {self._areaSize}") + canvas.drawText(pos=(l+1,t+1+6), text=f"areaPos1 {self._areaPos}") + canvas.drawText(pos=(l+1,t+1+7), text=f"areaPos2 ({self._areaPos[0]+self._width},{self._areaPos[1]+self._height})") def mousePressEvent(self, evt): return True def mouseReleaseEvent(self, evt): return True diff --git a/TermTk/TTkTestWidgets/testwidget.py b/TermTk/TTkTestWidgets/testwidget.py index 2d0704dc..ba7e55dd 100644 --- a/TermTk/TTkTestWidgets/testwidget.py +++ b/TermTk/TTkTestWidgets/testwidget.py @@ -39,17 +39,17 @@ class _TestContent(TTkWidget): t06 = TTkString(color=TTkColor.fg("#0088ff") ,text="Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.") t07 = TTkString(color=TTkColor.fg("#0000ff") ,text="Excepteur sint occaecat cupidatat non proident,") t08 = TTkString(color=TTkColor.fg("#ff00ff") ,text="sunt in culpa qui officia deserunt mollit anim id est laborum.") - def paintEvent(self): + def paintEvent(self, canvas): # TTkLog.debug(f"Test Paint - {self._name}") - y=0; self._canvas.drawText(pos=(-5,y), text=self.t01) - y+=1; self._canvas.drawText(pos=( 0,y), text=self.t02) - y+=1; self._canvas.drawText(pos=( 0,y), text=self.t03) - y+=1; self._canvas.drawText(pos=( 0,y), text=self.t04) - y+=1; self._canvas.drawText(pos=( 0,y), text=self.t05) - y+=1; self._canvas.drawText(pos=( 0,y), text=self.t06) - y+=1; self._canvas.drawText(pos=( 0,y), text=self.t07) - y+=1; self._canvas.drawText(pos=( 0,y), text=self.t08) - y+=1; self._canvas.drawGrid( + y=0; canvas.drawText(pos=(-5,y), text=self.t01) + y+=1; canvas.drawText(pos=( 0,y), text=self.t02) + y+=1; canvas.drawText(pos=( 0,y), text=self.t03) + y+=1; canvas.drawText(pos=( 0,y), text=self.t04) + y+=1; canvas.drawText(pos=( 0,y), text=self.t05) + y+=1; canvas.drawText(pos=( 0,y), text=self.t06) + y+=1; canvas.drawText(pos=( 0,y), text=self.t07) + y+=1; canvas.drawText(pos=( 0,y), text=self.t08) + y+=1; canvas.drawGrid( pos=(0,y),size=(self._width,self._height-y), hlines=(2,5,7), vlines=(4,7,15,30), color=TTkColor.fg("#aaffaa")) @@ -75,17 +75,16 @@ class TTkTestWidget(TTkFrame): _TestContent(parent=self, pos=(0,8), width=50, height=50, name=f"content-{self._name}") TTkTestWidget.ID+=1 - def paintEvent(self): + def paintEvent(self, canvas): x = 1 if self.border() else 0 y = 1 if self.border() else 0 w = 50 - canvas = self.getCanvas() canvas.drawText(pos=(x,y+3), width=w, color=self._l[0], text=f"Test Widget [{self._name}]") canvas.drawText(pos=(x,y+4), width=w, color=self._l[1], text=f"x,y ({self._x},{self._y})") canvas.drawText(pos=(x,y+5), width=w, color=self._l[2], text=f"w,h ({self._width},{self._height})") canvas.drawText(pos=(x,y+6), width=w, color=self._l[3], text=f"max w,h ({self._maxw},{self._maxh})") canvas.drawText(pos=(x,y+7), width=w, color=self._l[4], text=f"min w,h ({self._minw},{self._minh})") - TTkFrame.paintEvent(self) + TTkFrame.paintEvent(self, canvas) def mousePressEvent(self, evt): TTkLog.debug(f"{self._name} Test Mouse {evt}") diff --git a/TermTk/TTkTestWidgets/testwidgetsizes.py b/TermTk/TTkTestWidgets/testwidgetsizes.py index f4384907..2ebc3544 100644 --- a/TermTk/TTkTestWidgets/testwidgetsizes.py +++ b/TermTk/TTkTestWidgets/testwidgetsizes.py @@ -32,14 +32,14 @@ class TTkTestWidgetSizes(TTkFrame): self._name = kwargs.get('name' , f"TestWidgetSizes-{TTkTestWidgetSizes.ID}" ) TTkTestWidgetSizes.ID+=1 - def paintEvent(self): - TTkFrame.paintEvent(self) + def paintEvent(self, canvas): + TTkFrame.paintEvent(self, canvas) t,_,l,_ = self.getPadding() - self._canvas.drawText(pos=(l,t+0), text=f"Test Widget [{self._name}]") - self._canvas.drawText(pos=(l,t+1), text=f"x,y ({self._x},{self._y})") - self._canvas.drawText(pos=(l,t+2), text=f"w,h ({self._width},{self._height})") - self._canvas.drawText(pos=(l,t+3), text=f"max w,h ({self._maxw},{self._maxh})") - self._canvas.drawText(pos=(l,t+4), text=f"min w,h ({self._minw},{self._minh})") + canvas.drawText(pos=(l,t+0), text=f"Test Widget [{self._name}]") + canvas.drawText(pos=(l,t+1), text=f"x,y ({self._x},{self._y})") + canvas.drawText(pos=(l,t+2), text=f"w,h ({self._width},{self._height})") + canvas.drawText(pos=(l,t+3), text=f"max w,h ({self._maxw},{self._maxh})") + canvas.drawText(pos=(l,t+4), text=f"min w,h ({self._minw},{self._minh})") def mousePressEvent(self, evt): return True def mouseReleaseEvent(self, evt): return True diff --git a/TermTk/TTkTestWidgets/tominspector.py b/TermTk/TTkTestWidgets/tominspector.py index 7606250b..15354238 100644 --- a/TermTk/TTkTestWidgets/tominspector.py +++ b/TermTk/TTkTestWidgets/tominspector.py @@ -122,7 +122,7 @@ class _DetailLazyFormView(TTkAbstractScrollView): def viewDisplayedSize(self) -> (int, int): return self.size() - def paintEvent(self): + def paintEvent(self, canvas): x,y = self.getViewOffsets() w,h = self.size() tt = TTkCfg.theme.tree @@ -132,7 +132,7 @@ class _DetailLazyFormView(TTkAbstractScrollView): for i,l in enumerate(header): hx = 0 if i==0 else columnsPos[i-1]+1 hx1 = columnsPos[i] - self._canvas.drawText(pos=(hx-x,0), text=l, width=hx1-hx, color=TTkCfg.theme.treeHeaderColor) + canvas.drawText(pos=(hx-x,0), text=l, width=hx1-hx, color=TTkCfg.theme.treeHeaderColor) class _TTkDomTreeWidgetItem(TTkTreeWidgetItem): __slots__ = ('_domWidget') diff --git a/TermTk/TTkWidgets/Fancy/tableview.py b/TermTk/TTkWidgets/Fancy/tableview.py index 7f2dbda5..95e6d8e6 100644 --- a/TermTk/TTkWidgets/Fancy/tableview.py +++ b/TermTk/TTkWidgets/Fancy/tableview.py @@ -57,7 +57,7 @@ class _TTkFancyTableViewHeader(TTkWidget): self._header += [TTkString()]*(len(self._columns)-len(self._header)) self._alignments = [TTkK.NONE]*len(self._columns) - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() total = 0 variableCols = 0 @@ -76,7 +76,7 @@ class _TTkFancyTableViewHeader(TTkWidget): sizes.append((w-total)//variableCols) variableCols -= 1 colors = [self._headerColor]*len(self._header) - self._canvas.drawTableLine(pos=(0,0), items=self._header, sizes=sizes, colors=colors, alignments=self._alignments) + canvas.drawTableLine(pos=(0,0), items=self._header, sizes=sizes, colors=colors, alignments=self._alignments) class _TTkFancyTableView(TTkAbstractScrollView): @@ -306,7 +306,7 @@ class _TTkFancyTableView(TTkAbstractScrollView): self.activated.emit(self._selected) return True - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() ox, oy = self.getViewOffsets() total = 0 @@ -349,10 +349,10 @@ class _TTkFancyTableView(TTkAbstractScrollView): item[vid] = item[vid].substring(fr=strPos) if it == self._selected: colors = [self._selectColor]*len(self._columnColors) - self._canvas.drawTableLine(pos=(0,y), items=item, sizes=sizes, colors=colors, alignments=self._alignments) + canvas.drawTableLine(pos=(0,y), items=item, sizes=sizes, colors=colors, alignments=self._alignments) else: colors = [c.modParam(val=-val) for c in self._columnColors] - self._canvas.drawTableLine(pos=(0,y), items=item, sizes=sizes, colors=colors, alignments=self._alignments) + canvas.drawTableLine(pos=(0,y), items=item, sizes=sizes, colors=colors, alignments=self._alignments) class TTkFancyTableView(TTkAbstractScrollView): __slots__ = ( diff --git a/TermTk/TTkWidgets/Fancy/treewidget.py b/TermTk/TTkWidgets/Fancy/treewidget.py index 3aa7714e..e8d61d73 100644 --- a/TermTk/TTkWidgets/Fancy/treewidget.py +++ b/TermTk/TTkWidgets/Fancy/treewidget.py @@ -37,11 +37,11 @@ class _TTkDisplayedTreeItemControl(TTkCheckbox): self._name = kwargs.get('name' , '_TTkDisplayedTreeItemControl' ) self.setMinimumSize(1, 1) - def paintEvent(self): + def paintEvent(self, canvas): if self.isChecked(): - self._canvas.drawText(pos=(0,0), text="▼") + canvas.drawText(pos=(0,0), text="▼") else: - self._canvas.drawText(pos=(0,0), text="▶") + canvas.drawText(pos=(0,0), text="▶") class _TTkDisplayedTreeItem(TTkWidget): @@ -69,10 +69,10 @@ class _TTkDisplayedTreeItem(TTkWidget): def _controlClicked(self, status): self._clicked.emit(status, self, self._treeWidgetItem) - def paintEvent(self): + def paintEvent(self, canvas): if self._isLeaf: - self._canvas.drawText(pos=(self._depth, 0), text="•") - self._canvas.drawText(pos=(self._depth+2, 0), text=self._text) + canvas.drawText(pos=(self._depth, 0), text="•") + canvas.drawText(pos=(self._depth+2, 0), text=self._text) class TTkFancyTreeWidget(TTkFancyTableView): diff --git a/TermTk/TTkWidgets/TTkModelView/treewidget.py b/TermTk/TTkWidgets/TTkModelView/treewidget.py index 29f6f09f..6e172002 100644 --- a/TermTk/TTkWidgets/TTkModelView/treewidget.py +++ b/TermTk/TTkWidgets/TTkModelView/treewidget.py @@ -334,7 +334,7 @@ class TTkTreeWidget(TTkAbstractScrollView): self.update() self.viewChanged.emit() - def paintEvent(self): + def paintEvent(self, canvas): x,y = self.getViewOffsets() w,h = self.size() tt = TTkCfg.theme.tree @@ -343,15 +343,15 @@ class TTkTreeWidget(TTkAbstractScrollView): for i,l in enumerate(self._header): hx = 0 if i==0 else self._columnsPos[i-1]+1 hx1 = self._columnsPos[i] - self._canvas.drawText(pos=(hx-x,0), text=l, width=hx1-hx, color=self._headerColor) + canvas.drawText(pos=(hx-x,0), text=l, width=hx1-hx, color=self._headerColor) if i == self._sortColumn: s = tt[6] if self._sortOrder == TTkK.AscendingOrder else tt[7] - self._canvas.drawText(pos=(hx1-x-1,0), text=s, color=self._headerColor) + canvas.drawText(pos=(hx1-x-1,0), text=s, color=self._headerColor) # Draw header separators for sx in self._columnsPos: - self._canvas.drawChar(pos=(sx-x,0), char=tt[5], color=self._headerColor) + canvas.drawChar(pos=(sx-x,0), char=tt[5], color=self._headerColor) for sy in range(1,h): - self._canvas.drawChar(pos=(sx-x,sy), char=tt[4], color=self._lineColor) + canvas.drawChar(pos=(sx-x,sy), char=tt[4], color=self._lineColor) # Draw cache for i, c in enumerate(self._cache): @@ -363,6 +363,6 @@ class TTkTreeWidget(TTkAbstractScrollView): text = c.data[il] if item.isSelected(): - self._canvas.drawText(pos=(lx-x,i-y+1), text=text.completeColor(self._selectedColor), width=lx1-lx, alignment=item.textAlignment(il), color=self._selectedColor) + canvas.drawText(pos=(lx-x,i-y+1), text=text.completeColor(self._selectedColor), width=lx1-lx, alignment=item.textAlignment(il), color=self._selectedColor) else: - self._canvas.drawText(pos=(lx-x,i-y+1), text=text, width=lx1-lx, alignment=item.textAlignment(il)) + canvas.drawText(pos=(lx-x,i-y+1), text=text, width=lx1-lx, alignment=item.textAlignment(il)) diff --git a/TermTk/TTkWidgets/TTkPickers/colorpicker.py b/TermTk/TTkWidgets/TTkPickers/colorpicker.py index b6cad09a..4691006e 100644 --- a/TermTk/TTkWidgets/TTkPickers/colorpicker.py +++ b/TermTk/TTkWidgets/TTkPickers/colorpicker.py @@ -68,7 +68,7 @@ class _TTkHueCanvas(TTkWidget): def mouseDragEvent(self, evt): return self.mousePressEvent(evt) - def paintEvent(self): + def paintEvent(self, canvas): w,_ = self.size() self._hueList = [0x00]*(w+1) def _linInt(a,b,x): @@ -82,9 +82,9 @@ class _TTkHueCanvas(TTkWidget): rgb =a|(b&_linInt(b,0,6*x/w)) color = TTkColor.bg( f"#{rgb:06x}" ) if (num*w//6)+x == self._selected: - self._canvas.drawChar(pos=((num*w//6)+x,0), char="◼", color=color+TTkColor.fg("#000000")) + canvas.drawChar(pos=((num*w//6)+x,0), char="◼", color=color+TTkColor.fg("#000000")) else: - self._canvas.drawChar(pos=((num*w//6)+x,0), char=" ", color=color) + canvas.drawChar(pos=((num*w//6)+x,0), char=" ", color=color) self._hueList[(num*w//6)+x]=rgb _printSlice(0, 0xff0000, 0x00ff00, True) @@ -136,15 +136,15 @@ class _TTkColorCanvas(TTkWidget): b = _linInt(b,0,y/h)&0x0000ff return r|g|b - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() for x in range(w): for y in range(h): color = TTkColor.bg( f"#{self._colorAt(x,y,w,h):06x}" ) if (x,y)==self._selected: - self._canvas.drawText(pos=(x,y), text="◼", color=color+TTkColor.fg("#000000")) + canvas.drawText(pos=(x,y), text="◼", color=color+TTkColor.fg("#000000")) else: - self._canvas.drawText(pos=(x,y), text=" ", color=color) + canvas.drawText(pos=(x,y), text=" ", color=color) class _TTkShowColor(TTkWidget): __slots__ = ('_color') @@ -166,10 +166,10 @@ class _TTkShowColor(TTkWidget): self.setColor(TTkColor.bg( f"#{color:06x}" )) self.update() - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() for y in range(h): - self._canvas.drawText(pos=(0,y),text=" "*w, color=self._color) + canvas.drawText(pos=(0,y),text=" "*w, color=self._color) class _TTkColorButton(TTkButton): lastClicked = None @@ -417,23 +417,23 @@ class TTkColorDialogPicker(TTkWindow): self._color = color self.update() - def paintEvent(self): - TTkWindow.paintEvent(self) + def paintEvent(self, canvas): + TTkWindow.paintEvent(self, canvas) if self.hasFocus(): color = TTkCfg.theme.windowBorderColorFocus else: color = TTkCfg.theme.windowBorderColor - self._canvas.drawGrid( + canvas.drawGrid( pos=(0,2),size=(26,self._height-2), hlines=(10,15), vlines=(), color=color, grid=6) gg = TTkCfg.theme.grid[6] - self._canvas.drawChar(pos=(0,2), char=gg[0x08], color=color) - self._canvas.drawChar(pos=(25,2), char=gg[0x02], color=color) - self._canvas.drawChar(pos=(25,self._height-1), char=gg[0x0E], color=color) - self._canvas.drawBoxTitle(pos=(0,2) , size=(26,0), text=TTkString(" Basic colors "), align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) - self._canvas.drawBoxTitle(pos=(0,12), size=(26,0), text=TTkString(" Custom colors "), align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) - self._canvas.drawBoxTitle(pos=(0,17), size=(26,0), text=TTkString(" Conrols "), align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) + canvas.drawChar(pos=(0,2), char=gg[0x08], color=color) + canvas.drawChar(pos=(25,2), char=gg[0x02], color=color) + canvas.drawChar(pos=(25,self._height-1), char=gg[0x0E], color=color) + canvas.drawBoxTitle(pos=(0,2) , size=(26,0), text=TTkString(" Basic colors "), align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) + canvas.drawBoxTitle(pos=(0,12), size=(26,0), text=TTkString(" Custom colors "), align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) + canvas.drawBoxTitle(pos=(0,17), size=(26,0), text=TTkString(" Conrols "), align=TTkK.CENTER_ALIGN, color=color, colorText=TTkCfg.theme.frameTitleColor) class TTkColorButtonPicker(_TTkColorButton): __slots__ = ('_type', 'colorSelected') diff --git a/TermTk/TTkWidgets/TTkPickers/textpicker.py b/TermTk/TTkWidgets/TTkPickers/textpicker.py index dd6d167a..94a8117c 100644 --- a/TermTk/TTkWidgets/TTkPickers/textpicker.py +++ b/TermTk/TTkWidgets/TTkPickers/textpicker.py @@ -47,9 +47,9 @@ from TermTk.TTkWidgets.TTkModelView.filetreewidgetitem import TTkFileTreeWidgetI from TermTk.TTkWidgets.TTkPickers.colorpicker import TTkColorButtonPicker class _superSimpleHorizontalLine(TTkWidget): - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() - self._canvas.drawText(pos=(0,h-1), text='┕'+('━'*(w-2))+'┙',color=TTkColor.fg("#888888")) + canvas.drawText(pos=(0,h-1), text='┕'+('━'*(w-2))+'┙',color=TTkColor.fg("#888888")) # List taken from: # https://emojipicker.com diff --git a/TermTk/TTkWidgets/about.py b/TermTk/TTkWidgets/about.py index c71f9bd8..5512d6eb 100644 --- a/TermTk/TTkWidgets/about.py +++ b/TermTk/TTkWidgets/about.py @@ -67,13 +67,13 @@ class TTkAbout(TTkWindow): self.setTitle('About...') self.resize(55,15) - def paintEvent(self): + def paintEvent(self, canvas): c = [0xFF,0xFF,0xAA] for y, line in enumerate(TTkAbout.pyTermTk): - self._canvas.drawText(pos=(9,3+y),text=line, color=TTkColor.fg(f'#{c[0]:02X}{c[1]:02X}{c[2]:02X}')) + canvas.drawText(pos=(9,3+y),text=line, color=TTkColor.fg(f'#{c[0]:02X}{c[1]:02X}{c[2]:02X}')) c[2]-=0x11 - self._canvas.drawText(pos=(20,9),text=f" Version: {TTkCfg.version}", color=TTkColor.fg('#AAAAFF')) - self._canvas.drawText(pos=(12,11),text="Powered By, Eugenio Parodi") - self._canvas.drawText(pos=(2,13),text="https://github.com/ceccopierangiolieugenio/pyTermTk", color=TTkColor.fg('#44FFFF')) + canvas.drawText(pos=(20,9),text=f" Version: {TTkCfg.version}", color=TTkColor.fg('#AAAAFF')) + canvas.drawText(pos=(12,11),text="Powered By, Eugenio Parodi") + canvas.drawText(pos=(2,13),text="https://github.com/ceccopierangiolieugenio/pyTermTk", color=TTkColor.fg('#44FFFF')) - TTkWindow.paintEvent(self) + TTkWindow.paintEvent(self, canvas) diff --git a/TermTk/TTkWidgets/button.py b/TermTk/TTkWidgets/button.py index c97ba012..d63b01a8 100644 --- a/TermTk/TTkWidgets/button.py +++ b/TermTk/TTkWidgets/button.py @@ -253,7 +253,7 @@ class TTkButton(TTkWidget): self.update() return super().mouseMoveEvent(evt) - def paintEvent(self): + def paintEvent(self, canvas): if not self.isEnabled(): borderColor = self._borderColorDisabled textColor = self._textColorDisabled @@ -287,7 +287,6 @@ class TTkButton(TTkWidget): borderColor = self._borderColor w,h = self.size() - canvas = self.getCanvas() # Draw the border and bgcolor if not self._border or (self._border and ( h==1 or ( h>1 and len(self._text)>h-2 and len(self._text[0])!=0 ))): diff --git a/TermTk/TTkWidgets/checkbox.py b/TermTk/TTkWidgets/checkbox.py index 1b05e42b..40056b5f 100644 --- a/TermTk/TTkWidgets/checkbox.py +++ b/TermTk/TTkWidgets/checkbox.py @@ -168,7 +168,7 @@ class TTkCheckbox(TTkWidget): self._checkStatus = state self.update() - def paintEvent(self): + def paintEvent(self, canvas): if not self.isEnabled(): textColor = TTkCfg.theme.checkboxTextColor borderColor = TTkCfg.theme.textColorDisabled @@ -181,13 +181,13 @@ class TTkCheckbox(TTkWidget): borderColor = TTkCfg.theme.checkboxBorderColor textColor = TTkCfg.theme.checkboxTextColor xColor = TTkCfg.theme.checkboxContentColor - self._canvas.drawText(pos=(0,0), color=borderColor ,text="[ ]") - self._canvas.drawText(pos=(3,0), color=textColor ,text=self._text) + canvas.drawText(pos=(0,0), color=borderColor ,text="[ ]") + canvas.drawText(pos=(3,0), color=textColor ,text=self._text) text = { TTkK.Checked : "X", TTkK.Unchecked : " ", TTkK.PartiallyChecked: "/"}.get(self._checkStatus, " ") - self._canvas.drawText(pos=(1,0), color=xColor ,text=text) + canvas.drawText(pos=(1,0), color=xColor ,text=text) def _pressEvent(self): self._checkStatus = { diff --git a/TermTk/TTkWidgets/combobox.py b/TermTk/TTkWidgets/combobox.py index e8aab2de..2948e3c7 100644 --- a/TermTk/TTkWidgets/combobox.py +++ b/TermTk/TTkWidgets/combobox.py @@ -152,7 +152,7 @@ class TTkComboBox(TTkWidget): w,h = self.size() self._lineEdit.setGeometry(1,0,w-4,h) - def paintEvent(self): + def paintEvent(self, canvas): if not self.isEnabled(): borderColor = TTkCfg.theme.comboboxBorderColorDisabled color = TTkCfg.theme.comboboxContentColorDisabled @@ -168,12 +168,12 @@ class TTkComboBox(TTkWidget): text = self._list[self._id] w = self.width() - self._canvas.drawTTkString(pos=(1,0), text=TTkString(text), width=w-3, alignment=self._textAlign, color=color) - self._canvas.drawText(pos=(0,0), text="[", color=borderColor) + canvas.drawTTkString(pos=(1,0), text=TTkString(text), width=w-3, alignment=self._textAlign, color=color) + canvas.drawText(pos=(0,0), text="[", color=borderColor) if self._editable: - self._canvas.drawText(pos=(w-3,0), text="[^]", color=borderColor) + canvas.drawText(pos=(w-3,0), text="[^]", color=borderColor) else: - self._canvas.drawText(pos=(w-2,0), text="^]", color=borderColor) + canvas.drawText(pos=(w-2,0), text="^]", color=borderColor) def currentText(self): '''currentText''' diff --git a/TermTk/TTkWidgets/frame.py b/TermTk/TTkWidgets/frame.py index 17f9415b..98fffc9a 100644 --- a/TermTk/TTkWidgets/frame.py +++ b/TermTk/TTkWidgets/frame.py @@ -107,11 +107,11 @@ class TTkFrame(TTkWidget): self._borderColor = color self.update() - def paintEvent(self): + def paintEvent(self, canvas): if self._border: - self._canvas.drawBox(pos=(0,0),size=(self._width,self._height), color=self._borderColor) + canvas.drawBox(pos=(0,0),size=(self._width,self._height), color=self._borderColor) if len(self._title) != 0: - self._canvas.drawBoxTitle( + canvas.drawBoxTitle( pos=(0,0), size=(self._width,self._height), text=self._title, @@ -119,4 +119,4 @@ class TTkFrame(TTkWidget): color=self._borderColor, colorText=self._titleColor) elif self._menubarTop: - self._canvas.drawMenuBarBg(pos=(0,0),size=self.width(),color=self._borderColor) + canvas.drawMenuBarBg(pos=(0,0),size=self.width(),color=self._borderColor) diff --git a/TermTk/TTkWidgets/graph.py b/TermTk/TTkWidgets/graph.py index 5fa7a6fb..b941e18c 100644 --- a/TermTk/TTkWidgets/graph.py +++ b/TermTk/TTkWidgets/graph.py @@ -56,7 +56,7 @@ class TTkGraph(TTkWidget): self._data.append(values) self.update() - def paintEvent(self): + def paintEvent(self, canvas): if not self._data: return w,h = self.size() x=0 @@ -79,11 +79,11 @@ class TTkGraph(TTkWidget): v1 = data[i] if i%2==0: if self._direction == TTkK.RIGHT: - self._canvas.drawHChart(pos=(x+i//2,y),values=(v2,v1), zoom=zoom, color=self._color.modParam(val=-y)) + canvas.drawHChart(pos=(x+i//2,y),values=(v2,v1), zoom=zoom, color=self._color.modParam(val=-y)) else: - self._canvas.drawHChart(pos=(w-(x+i//2),y),values=(v1,v2), zoom=zoom, color=self._color.modParam(val=-y)) + canvas.drawHChart(pos=(w-(x+i//2),y),values=(v1,v2), zoom=zoom, color=self._color.modParam(val=-y)) if i%2==1: if self._direction == TTkK.RIGHT: - self._canvas.drawHChart(pos=(x+i//2+1,y),values=(v1,v1), zoom=zoom, color=self._color.modParam(val=-y)) + canvas.drawHChart(pos=(x+i//2+1,y),values=(v1,v1), zoom=zoom, color=self._color.modParam(val=-y)) else: - self._canvas.drawHChart(pos=(w-(x+i//2+1),y),values=(v1,v1), zoom=zoom, color=self._color.modParam(val=-y)) + canvas.drawHChart(pos=(w-(x+i//2+1),y),values=(v1,v1), zoom=zoom, color=self._color.modParam(val=-y)) diff --git a/TermTk/TTkWidgets/image.py b/TermTk/TTkWidgets/image.py index c25a6d9f..bec06ac5 100644 --- a/TermTk/TTkWidgets/image.py +++ b/TermTk/TTkWidgets/image.py @@ -129,25 +129,25 @@ class TTkImage(TTkWidget): h,s,l = TTkColor.rgb2hsl(pixel) row[i] = TTkColor.hsl2rgb(((h+deg)%360,s,l)) - def paintEvent(self): + def paintEvent(self, canvas): img = self._data if self._rasterType == TTkImage.FULLBLOCK: for y in range(0, len(img)): for x in range(0, len(img[y])): c1 = img[y][x] color = TTkColor.fg(f'#{c1[0]:02X}{c1[1]:02X}{c1[2]:02X}') - self._canvas.drawChar(pos=(x,y), char='█', color=color) + canvas.drawChar(pos=(x,y), char='█', color=color) elif self._rasterType == TTkImage.HALFBLOCK: for y in range(0, len(img)&(~1), 2): for x in range(0, len(img[y])): c1, c2 = img[y][x] ,img[y+1][x] color = ( TTkColor.fg(f'#{c1[0]:02X}{c1[1]:02X}{c1[2]:02X}') + TTkColor.bg(f'#{c2[0]:02X}{c2[1]:02X}{c2[2]:02X}') ) - self._canvas.drawChar(pos=(x,y//2), char='▀', color=color) + canvas.drawChar(pos=(x,y//2), char='▀', color=color) elif self._rasterType == TTkImage.QUADBLOCK: for y in range(0, len(img)&(~1), 2): for x in range(0, min(len(img[y])&(~1),len(img[y+1])&(~1)), 2): - self._canvas.drawText( + canvas.drawText( pos=(x//2,y//2), text=self._reduceQuad( img[y][x] , img[y][x+1] , diff --git a/TermTk/TTkWidgets/label.py b/TermTk/TTkWidgets/label.py index 99e08f77..9aca1d82 100644 --- a/TermTk/TTkWidgets/label.py +++ b/TermTk/TTkWidgets/label.py @@ -78,12 +78,12 @@ class TTkLabel(TTkWidget): self._text = TTkString(text).split('\n') self._textUpdated() - def paintEvent(self): + def paintEvent(self, canvas): forceColor = self.color()!=TTkColor.RST w = self.width() for y,text in enumerate(self._text): - self._canvas.drawText(pos=(0,y), text=' '*w, color=self.color(), forceColor=forceColor) - self._canvas.drawText(pos=(0,y), text=text, width=w, alignment=self._alignment, color=self.color(), forceColor=forceColor) + canvas.drawText(pos=(0,y), text=' '*w, color=self.color(), forceColor=forceColor) + canvas.drawText(pos=(0,y), text=text, width=w, alignment=self._alignment, color=self.color(), forceColor=forceColor) def _textUpdated(self): w, h = self.size() diff --git a/TermTk/TTkWidgets/lineedit.py b/TermTk/TTkWidgets/lineedit.py index dfa68636..77d46f67 100644 --- a/TermTk/TTkWidgets/lineedit.py +++ b/TermTk/TTkWidgets/lineedit.py @@ -102,7 +102,7 @@ class TTkLineEdit(TTkWidget): TTkHelper.showCursor(TTkK.Cursor_Blinking_Bar) self.update() - def paintEvent(self): + def paintEvent(self, canvas): if not self.isEnabled(): color = TTkCfg.theme.textColorDisabled selectColor = TTkCfg.theme.textColorDisabled @@ -121,7 +121,7 @@ class TTkLineEdit(TTkWidget): if self._selectionFrom < self._selectionTo: text = text.setColor(color=selectColor, posFrom=self._selectionFrom, posTo=self._selectionTo) text = text.substring(self._offset) - self._canvas.drawText(pos=(0,0), text=text, color=color, width=w) + canvas.drawText(pos=(0,0), text=text, color=color, width=w) def mousePressEvent(self, evt): txtPos = self._text.tabCharPos(evt.x+self._offset) diff --git a/TermTk/TTkWidgets/menubar.py b/TermTk/TTkWidgets/menubar.py index 4d5846d2..2614dc75 100644 --- a/TermTk/TTkWidgets/menubar.py +++ b/TermTk/TTkWidgets/menubar.py @@ -59,8 +59,8 @@ class _TTkMenuSpacer(TTkAbstractListItem): TTkAbstractListItem.__init__(self, *args, **kwargs) self.resize(1,1) - def paintEvent(self): - self._canvas.drawText(pos=(0,0), text="-"*self.width()) + def paintEvent(self, canvas): + canvas.drawText(pos=(0,0), text="-"*self.width()) class TTkMenuButton(TTkAbstractListItem): '''TTkMenuButton''' @@ -149,7 +149,7 @@ class TTkMenuButton(TTkAbstractListItem): listw.viewport().setFocus() self.update() - def paintEvent(self): + def paintEvent(self, canvas): if self._pressed: borderColor = self._borderColor textColor = TTkCfg.theme.menuButtonColorClicked @@ -158,7 +158,7 @@ class TTkMenuButton(TTkAbstractListItem): borderColor = self._borderColor textColor = self._color scColor = TTkCfg.theme.menuButtonShortcutColor - self._canvas.drawMenuBarButton( + canvas.drawMenuBarButton( pos=(0,0),text=self.text(), width=self.width(), shortcuts=self._shortcut, diff --git a/TermTk/TTkWidgets/progressbar.py b/TermTk/TTkWidgets/progressbar.py index eabcbf17..020924c8 100644 --- a/TermTk/TTkWidgets/progressbar.py +++ b/TermTk/TTkWidgets/progressbar.py @@ -152,13 +152,12 @@ class TTkProgressBar(TTkWidget): '''setTextWidth''' self._textWidth = max(0, new_width) - def paintEvent(self): + def paintEvent(self, canvas): width, height = self.size() laf = self.lookAndFeel() text = laf.text(self._value, self._value_min, self._value_max) color_bar = laf.color(self._value, self._value_min, self._value_max) blocks = TTkCfg.theme.progressbarBlocks - canvas = self._canvas show_text = laf.showText() if show_text: diff --git a/TermTk/TTkWidgets/radiobutton.py b/TermTk/TTkWidgets/radiobutton.py index 29c2fde7..3231101c 100644 --- a/TermTk/TTkWidgets/radiobutton.py +++ b/TermTk/TTkWidgets/radiobutton.py @@ -143,7 +143,7 @@ class TTkRadioButton(TTkWidget): self._checkEvent() self.update() - def paintEvent(self): + def paintEvent(self, canvas): if self.hasFocus(): borderColor = TTkCfg.theme.radioButtonBorderColorFocus textColor = TTkCfg.theme.radioButtonTextColorFocus @@ -152,12 +152,12 @@ class TTkRadioButton(TTkWidget): borderColor = TTkCfg.theme.radioButtonBorderColor textColor = TTkCfg.theme.radioButtonTextColor xColor = TTkCfg.theme.radioButtonContentColor - self._canvas.drawText(pos=(0,0), color=borderColor ,text="( )") - self._canvas.drawText(pos=(3,0), color=textColor ,text=self._text) + canvas.drawText(pos=(0,0), color=borderColor ,text="( )") + canvas.drawText(pos=(3,0), color=textColor ,text=self._text) if self._checked: - self._canvas.drawText(pos=(1,0), color=xColor ,text="X") + canvas.drawText(pos=(1,0), color=xColor ,text="X") else: - self._canvas.drawText(pos=(1,0), color=xColor ,text=" ") + canvas.drawText(pos=(1,0), color=xColor ,text=" ") def _checkEvent(self): # Uncheck the radio already checked; diff --git a/TermTk/TTkWidgets/scrollbar.py b/TermTk/TTkWidgets/scrollbar.py index 63882376..d925257c 100644 --- a/TermTk/TTkWidgets/scrollbar.py +++ b/TermTk/TTkWidgets/scrollbar.py @@ -90,7 +90,7 @@ class TTkScrollBar(TTkWidget): |---| pageStep, asciiStep (step size in ascii) ''' - def paintEvent(self): + def paintEvent(self, canvas): if self._orientation == TTkK.VERTICAL: size=self._height else: @@ -113,7 +113,7 @@ class TTkScrollBar(TTkWidget): # convert i screen coordinates aa = asciiDrawingSize * a // (self._maximum - self._minimum) bb = aa + asciiStep - self._canvas.drawScroll(pos=(0,0),size=size,slider=(aa+1,bb+1),orientation=self._orientation, color=color) + canvas.drawScroll(pos=(0,0),size=size,slider=(aa+1,bb+1),orientation=self._orientation, color=color) # Update the screen position coordinates self._screenPgDown = ( 1 , aa+1 ) self._screenScroller = ( aa+1 , bb+1) diff --git a/TermTk/TTkWidgets/spinbox.py b/TermTk/TTkWidgets/spinbox.py index 73a574d9..5acdf286 100644 --- a/TermTk/TTkWidgets/spinbox.py +++ b/TermTk/TTkWidgets/spinbox.py @@ -142,14 +142,14 @@ class TTkSpinBox(TTkWidget): self._lineEdit.setEnabled(enabled) return super().setEnabled(enabled) - def paintEvent(self): + def paintEvent(self, canvas): if not self.isEnabled(): textColor = TTkCfg.theme.textColorDisabled else: textColor = TTkColor.RST w = self.width() - self._canvas.drawChar(pos=(w-2,0),char="▲", color=textColor) - self._canvas.drawChar(pos=(w-1,0),char="▼", color=textColor) + canvas.drawChar(pos=(w-2,0),char="▲", color=textColor) + canvas.drawChar(pos=(w-1,0),char="▼", color=textColor) def focusInEvent(self): self._lineEdit._color = TTkCfg.theme.lineEditTextColorFocus diff --git a/TermTk/TTkWidgets/splitter.py b/TermTk/TTkWidgets/splitter.py index b1c0a10c..8eaa8849 100644 --- a/TermTk/TTkWidgets/splitter.py +++ b/TermTk/TTkWidgets/splitter.py @@ -281,16 +281,16 @@ class TTkSplitter(TTkFrame): self._processRefSizes(w-b,h-b) self._updateGeometries(resized=True) - def paintEvent(self): + def paintEvent(self, canvas): off = 1 if self.border() else 0 - TTkFrame.paintEvent(self) + TTkFrame.paintEvent(self, canvas) w,h = self.size() if self._orientation == TTkK.HORIZONTAL: for i in self._separators[:-1]: - self._canvas.drawVLine(pos=(i+off,0), size=h) + canvas.drawVLine(pos=(i+off,0), size=h) else: for i in self._separators[:-1]: - self._canvas.drawHLine(pos=(0,i+off), size=w) + canvas.drawHLine(pos=(0,i+off), size=w) def mousePressEvent(self, evt): self._separatorSelected = None diff --git a/TermTk/TTkWidgets/tabwidget.py b/TermTk/TTkWidgets/tabwidget.py index 37bb4c1e..58d64c80 100644 --- a/TermTk/TTkWidgets/tabwidget.py +++ b/TermTk/TTkWidgets/tabwidget.py @@ -122,19 +122,19 @@ class TTkTabButton(TTkButton): return True return super().mouseDragEvent(evt) - def paintEvent(self): - self._canvas.drawTabButton( + def paintEvent(self, canvas): + canvas.drawTabButton( pos=(0,0), size=self.size(), small=(not self._border), sideEnd=self._sideEnd, status=self._tabStatus, color=self._borderColor ) - self._canvas.drawText(pos=(1,1 if self._border else 0), text=self.text(), color=self.color()) + canvas.drawText(pos=(1,1 if self._border else 0), text=self.text(), color=self.color()) class _TTkTabMenuButton(TTkMenuButton): def __init__(self, *args, **kwargs): TTkMenuButton.__init__(self, *args, **kwargs) - def paintEvent(self): + def paintEvent(self, canvas): if self._pressed: borderColor = self._borderColor textColor = TTkCfg.theme.menuButtonColorClicked @@ -144,7 +144,7 @@ class _TTkTabMenuButton(TTkMenuButton): textColor = self._color # scColor = TTkCfg.theme.menuButtonShortcutColor text = TTkString('[',borderColor) + TTkString(self.text(),textColor) + TTkString(']',borderColor) - self._canvas.drawText(pos=(0,0),text=text) + canvas.drawText(pos=(0,0),text=text) class _TTkTabScrollerButton(TTkButton): __slots__ = ('_side', '_sideEnd') @@ -186,30 +186,30 @@ class _TTkTabScrollerButton(TTkButton): self.clicked.emit() return True - def paintEvent(self): + def paintEvent(self, canvas): tt = TTkCfg.theme.tab if self._border: lse = tt[11] if self._sideEnd & TTkK.LEFT else tt[13] rse = tt[15] if self._sideEnd & TTkK.RIGHT else tt[13] if self._side == TTkK.LEFT: - self._canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[7] +tt[1]) - self._canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[9] +tt[31]) - self._canvas.drawText(pos=(0,2), color=self._borderColor, text=lse +tt[12]) - self._canvas.drawChar(pos=(1,1), char=tt[31], color=TTkCfg.theme.tabOffsetColor) + canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[7] +tt[1]) + canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[9] +tt[31]) + canvas.drawText(pos=(0,2), color=self._borderColor, text=lse +tt[12]) + canvas.drawChar(pos=(1,1), char=tt[31], color=TTkCfg.theme.tabOffsetColor) else: - self._canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[1] +tt[8]) - self._canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[32]+tt[9]) - self._canvas.drawText(pos=(0,2), color=self._borderColor, text=tt[12]+rse) - self._canvas.drawChar(pos=(0,1), char=tt[32], color=TTkCfg.theme.tabOffsetColor) + canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[1] +tt[8]) + canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[32]+tt[9]) + canvas.drawText(pos=(0,2), color=self._borderColor, text=tt[12]+rse) + canvas.drawChar(pos=(0,1), char=tt[32], color=TTkCfg.theme.tabOffsetColor) else: if self._side == TTkK.LEFT: - self._canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[9] +tt[31]) - self._canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[23]+tt[1]) - self._canvas.drawChar(pos=(1,0), char=tt[31], color=TTkCfg.theme.tabOffsetColor) + canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[9] +tt[31]) + canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[23]+tt[1]) + canvas.drawChar(pos=(1,0), char=tt[31], color=TTkCfg.theme.tabOffsetColor) else: - self._canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[32]+tt[9]) - self._canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[1] +tt[24]) - self._canvas.drawChar(pos=(0,0), char=tt[32], color=TTkCfg.theme.tabOffsetColor) + canvas.drawText(pos=(0,0), color=self._borderColor, text=tt[32]+tt[9]) + canvas.drawText(pos=(0,1), color=self._borderColor, text=tt[1] +tt[24]) + canvas.drawChar(pos=(0,0), char=tt[32], color=TTkCfg.theme.tabOffsetColor) ''' _curentIndex = 2 _tabButtons = [0],[1], [2], [3], [4], @@ -447,17 +447,17 @@ class TTkTabBar(TTkWidget): self.setBorderColor(borderColor) - def paintEvent(self): + def paintEvent(self, canvas): w = self.width() tt = TTkCfg.theme.tab if self._small: lse = tt[23] if self._sideEnd & TTkK.LEFT else tt[19] rse = tt[24] if self._sideEnd & TTkK.RIGHT else tt[19] - self._canvas.drawText(pos=(0,1),text=lse + tt[19]*(w-2) + rse, color=self._borderColor) + canvas.drawText(pos=(0,1),text=lse + tt[19]*(w-2) + rse, color=self._borderColor) else: lse = tt[11] if self._sideEnd & TTkK.LEFT else tt[12] rse = tt[15] if self._sideEnd & TTkK.RIGHT else tt[12] - self._canvas.drawText(pos=(0,2),text=lse + tt[12]*(w-2) + rse, color=self._borderColor) + canvas.drawText(pos=(0,2),text=lse + tt[12]*(w-2) + rse, color=self._borderColor) ''' @@ -646,9 +646,9 @@ class TTkTabWidget(TTkFrame): def resizeEvent(self, w, h): self._tabBarTopLayout.setGeometry(0,0,w,self._padt) - def paintEvent(self): + def paintEvent(self, canvas): tt = TTkCfg.theme.tab if self.border(): - self._canvas.drawBox(pos=(0,2),size=(self.width(),self.height()-2), color=self._borderColor, grid=9) + canvas.drawBox(pos=(0,2),size=(self.width(),self.height()-2), color=self._borderColor, grid=9) else: - self._canvas.drawText(pos=(0,1),text=tt[36] + tt[19]*(self.width()-2) + tt[35], color=self._borderColor) + canvas.drawText(pos=(0,1),text=tt[36] + tt[19]*(self.width()-2) + tt[35], color=self._borderColor) diff --git a/TermTk/TTkWidgets/texedit.py b/TermTk/TTkWidgets/texedit.py index b5b9f8c0..d19b3d5b 100644 --- a/TermTk/TTkWidgets/texedit.py +++ b/TermTk/TTkWidgets/texedit.py @@ -66,7 +66,7 @@ class _TTkTextEditViewLineNumber(TTkAbstractScrollView): def viewDisplayedSize(self) -> (int, int): return self.size() - def paintEvent(self): + def paintEvent(self, canvas): if not self._textWrap: return _, oy = self.getViewOffsets() w, h = self.size() @@ -78,13 +78,13 @@ class _TTkTextEditViewLineNumber(TTkAbstractScrollView): else: txt = f"{dt}" color = TTkCfg.theme.textEditLineNumberColor - self._canvas.drawText(pos=(0,i), text=txt, width=w, color=color) - self._canvas.drawChar(pos=(w-1,i), char='▌', color=TTkCfg.theme.textEditLineNumberSeparatorColor) + canvas.drawText(pos=(0,i), text=txt, width=w, color=color) + canvas.drawChar(pos=(w-1,i), char='▌', color=TTkCfg.theme.textEditLineNumberSeparatorColor) else: color = TTkCfg.theme.textEditLineNumberColor for y in range(h): - self._canvas.drawText(pos=(0,y), text=f"{y+oy}", width=w, color=color) - self._canvas.drawChar(pos=(w-1,y), char='▌', color=TTkCfg.theme.textEditLineNumberSeparatorColor) + canvas.drawText(pos=(0,y), text=f"{y+oy}", width=w, color=color) + canvas.drawChar(pos=(w-1,y), char='▌', color=TTkCfg.theme.textEditLineNumberSeparatorColor) class TTkTextEditView(TTkAbstractScrollView): '''TTkTextEditView''' @@ -560,7 +560,7 @@ class TTkTextEditView(TTkAbstractScrollView): def focusOutEvent(self): TTkHelper.hideCursor() - def paintEvent(self): + def paintEvent(self, canvas): ox, oy = self.getViewOffsets() if self.hasFocus(): selectColor = TTkCfg.theme.lineEditTextColorSelected @@ -574,10 +574,10 @@ class TTkTextEditView(TTkAbstractScrollView): for y, l in enumerate(subLines): t = outLines[l[0]-subLines[0][0]] - self._canvas.drawTTkString(pos=(-ox,y), text=t.substring(l[1][0],l[1][1]).tab2spaces(self._textWrap._tabSpaces)) + canvas.drawTTkString(pos=(-ox,y), text=t.substring(l[1][0],l[1][1]).tab2spaces(self._textWrap._tabSpaces)) if self._lineWrapMode == TTkK.FixedWidth: - self._canvas.drawVLine(pos=(self._textWrap._wrapWidth,0), size=h, color=TTkCfg.theme.treeLineColor) + canvas.drawVLine(pos=(self._textWrap._wrapWidth,0), size=h, color=TTkCfg.theme.treeLineColor) self._pushCursor() class TTkTextEdit(TTkAbstractScrollArea): diff --git a/TermTk/TTkWidgets/widget.py b/TermTk/TTkWidgets/widget.py index 3631b1d5..ea01d3b0 100644 --- a/TermTk/TTkWidgets/widget.py +++ b/TermTk/TTkWidgets/widget.py @@ -218,17 +218,17 @@ class TTkWidget(TMouseEvents,TKeyEvents, TDragEvents): TTkLog.error(".removeWidget(...) is deprecated, use .layout().removeWidget(...)") if self.layout(): self.layout().removeWidget(widget) - def paintEvent(self): + def paintEvent(self, canvas:TTkCanvas): ''' Paint Event callback, this need to be overridden in the widget. ''' pass - def getPixmap(self): - self.paintEvent() + def getPixmap(self) -> TTkCanvas: + self.paintEvent(self._canvas) self.paintChildCanvas() - return self.getCanvas().copy() + return self._canvas.copy() @staticmethod def _paintChildCanvas(canvas, item, geometry, offset): diff --git a/TermTk/TTkWidgets/window.py b/TermTk/TTkWidgets/window.py index 1e5dca07..ebfa01b4 100644 --- a/TermTk/TTkWidgets/window.py +++ b/TermTk/TTkWidgets/window.py @@ -141,13 +141,13 @@ class TTkWindow(TTkResizableFrame): self._winTopLayout.setGeometry(1,1,w-2,1) super().resizeEvent(w,h) - def paintEvent(self): + def paintEvent(self, canvas): if self.hasFocus(): color = TTkCfg.theme.windowBorderColorFocus else: color = TTkCfg.theme.windowBorderColor - self._canvas.drawText(pos=(2,1),text=self._title) - self._canvas.drawGrid( + canvas.drawText(pos=(2,1),text=self._title) + canvas.drawGrid( color=color, pos=(0,0), size=self.size(), hlines=[2], grid=2) diff --git a/tests/timeit/14.function.01.params.py b/tests/timeit/14.function.01.params.py new file mode 100755 index 00000000..39b1be23 --- /dev/null +++ b/tests/timeit/14.function.01.params.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 + +# MIT License +# +# Copyright (c) 2023 Eugenio Parodi +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import sys, os + +import timeit +import random + + +sys.path.append(os.path.join(sys.path[0],'../..')) +import TermTk as ttk + +class Pippo(): + __slots__ = ('_pa') + def __init__(self, pa=1234): + self._pa=pa + def getPa(self): + return self._pa + + def fa(self): + return self._pa*self._pa + + def faa(self): + return self.getPa()*self.getPa() + + def fb(self, a): + return a*a + + def fc(self, a, b): + pass + +pippo = Pippo(4321) + +def fa(): + pass + +def fb(a): + pass + +def fc(a, b): + pass + +def test1(): + return pippo.fa() +def test2(): + return pippo.faa() +def test3(): + return pippo.fb(pippo.getPa()) +def test4(): + return pippo.fb(pippo._pa) +def test5(): return 5 +def test6(): return 6 +def test7(): return 7 +def test8(): return 8 +def test9(): return 9 + +loop = 100000 + +a={} + +iii = 1 +while (testName := f'test{iii}') and (testName in globals()): + result = timeit.timeit(f'{testName}(*a)', globals=globals(), number=loop) + # print(f"test{iii}) fps {loop / result :.3f} - s {result / loop:.10f} - {result / loop} {globals()[testName](*a)}") + print(f"test{iii:02}) | {result / loop:.10f} sec. | {loop / result : 15.3f} Fps ╞╡-> {globals()[testName](*a)}") + iii+=1 + diff --git a/ttkDesigner/app/about.py b/ttkDesigner/app/about.py index 8a22c8fc..c8f937cb 100644 --- a/ttkDesigner/app/about.py +++ b/ttkDesigner/app/about.py @@ -47,12 +47,12 @@ class About(TTkAbout): self.setTitle('[PierCecco Cecco] Eugenio Parodi proudly presents...') self.resize(56,15) - def paintEvent(self): + def paintEvent(self, canvas): c = [0xFF,0xFF,0xFF] for y, line in enumerate(About.designerTxt): - self._canvas.drawText(pos=(13,3+y),text=line) - self._canvas.drawText(pos=(20, 9),text=f" Version: {TTkDesignerCfg.version}", color=TTkColor.fg('#AAAAFF')) - self._canvas.drawText(pos=(14,11),text=f"Powered By, pyTermTk") - self._canvas.drawText(pos=( 2,13),text=f"https://github.com/ceccopierangiolieugenio/pyTermTk", color=TTkColor.fg('#44FFFF')) + canvas.drawText(pos=(13,3+y),text=line) + canvas.drawText(pos=(20, 9),text=f" Version: {TTkDesignerCfg.version}", color=TTkColor.fg('#AAAAFF')) + canvas.drawText(pos=(14,11),text=f"Powered By, pyTermTk") + canvas.drawText(pos=( 2,13),text=f"https://github.com/ceccopierangiolieugenio/pyTermTk", color=TTkColor.fg('#44FFFF')) - TTkWindow.paintEvent(self) + TTkWindow.paintEvent(self, canvas) diff --git a/ttkDesigner/app/notepad.py b/ttkDesigner/app/notepad.py index e3783bae..149dc7b3 100644 --- a/ttkDesigner/app/notepad.py +++ b/ttkDesigner/app/notepad.py @@ -23,9 +23,9 @@ import TermTk as ttk class superSimpleHorizontalLine(ttk.TTkWidget): - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() - self._canvas.drawText(pos=(0,h-1), text='┕'+('━'*(w-2))+'┙',color=ttk.TTkColor.fg("#888888")) + canvas.drawText(pos=(0,h-1), text='┕'+('━'*(w-2))+'┙',color=ttk.TTkColor.fg("#888888")) class NotePad(ttk.TTkGridLayout): def __init__(self, *args, **kwargs): diff --git a/ttkDesigner/app/superobj/supercontrol.py b/ttkDesigner/app/superobj/supercontrol.py index e27cb4e4..4c696c31 100644 --- a/ttkDesigner/app/superobj/supercontrol.py +++ b/ttkDesigner/app/superobj/supercontrol.py @@ -97,17 +97,17 @@ class SuperControlWidget(ttk.TTkResizableFrame): self._alignWidToPos(bkPos) return True - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() - self._wid.paintEvent() + self._wid.paintEvent(canvas) self._wid.paintChildCanvas() - self._canvas.paintCanvas( + canvas.paintCanvas( self._wid.getCanvas(), ( 1, 1, w, h), # geometry ( 0, 0, w, h), # slice ( 0, 0, w, h)) # bound - self._canvas.drawBox(pos=(0,0),size=self.size()) - self._canvas.drawChar(pos=( 0, 0), char='▛') - self._canvas.drawChar(pos=(w-1, 0), char='▜') - self._canvas.drawChar(pos=( 0, h-1), char='▙') - self._canvas.drawChar(pos=(w-1, h-1), char='▟') + canvas.drawBox(pos=(0,0),size=self.size()) + canvas.drawChar(pos=( 0, 0), char='▛') + canvas.drawChar(pos=(w-1, 0), char='▜') + canvas.drawChar(pos=( 0, h-1), char='▙') + canvas.drawChar(pos=(w-1, h-1), char='▟') diff --git a/ttkDesigner/app/superobj/superlayout.py b/ttkDesigner/app/superobj/superlayout.py index f0ae71ef..5245a4cc 100644 --- a/ttkDesigner/app/superobj/superlayout.py +++ b/ttkDesigner/app/superobj/superlayout.py @@ -110,7 +110,7 @@ class SuperLayout(ttk.TTkWidget): data = self canvas = self.getCanvas() canvas.clean() - self.paintEvent() + self.paintEvent(canvas) ttk.TTkWidget._paintChildCanvas(canvas, self.layout(), self.layout().geometry(), self.layout().offset()) drag.setHotSpot(evt.x, evt.y) drag.setPixmap(canvas) @@ -213,11 +213,11 @@ class SuperLayout(ttk.TTkWidget): self._lay.setGeometry(x,y,w,h) return super().resizeEvent(w, h) - def paintEvent(self): + def paintEvent(self, canvas): if self._selectable: if so.SuperWidget._showLayout: w,h = self.size() - self._canvas.drawBox(pos=(0,0),size=(w,h), color=ttk.TTkColor.fg('#88DD88', modifier=ttk.TTkColorGradient(increment=+1))) + canvas.drawBox(pos=(0,0),size=(w,h), color=ttk.TTkColor.fg('#88DD88', modifier=ttk.TTkColorGradient(increment=+1))) else: w,h = self.size() - self._canvas.drawBox(pos=(0,0),size=(w,h), color=ttk.TTkColor.fg('#223322', modifier=ttk.TTkColorGradient(increment=+1))) + canvas.drawBox(pos=(0,0),size=(w,h), color=ttk.TTkColor.fg('#223322', modifier=ttk.TTkColorGradient(increment=+1))) diff --git a/ttkDesigner/app/superobj/superlayoutgrid.py b/ttkDesigner/app/superobj/superlayoutgrid.py index 9b9e028a..20b7a22f 100644 --- a/ttkDesigner/app/superobj/superlayoutgrid.py +++ b/ttkDesigner/app/superobj/superlayoutgrid.py @@ -76,18 +76,17 @@ class _SuperExpandButton(ttk.TTkButton): ttk.TTkHelper._rootWidget._input.inputEvent.disconnect(self._processInput) return super().hide() - def paintEvent(self): - canvas = self.getCanvas() + def paintEvent(self, canvas): # '▶','◀','▼','▲' w,h = self.size() if w==1: - self.getCanvas().drawText(text='╽', pos=(0,0), color=ttk.TTkColor.fg("FFFF00")) - self.getCanvas().drawText(text='╿', pos=(0,h-1), color=ttk.TTkColor.fg("FFFF00")) + canvas.drawText(text='╽', pos=(0,0), color=ttk.TTkColor.fg("FFFF00")) + canvas.drawText(text='╿', pos=(0,h-1), color=ttk.TTkColor.fg("FFFF00")) for yy in range(1,h-1): - self.getCanvas().drawText(text='┃', pos=(0, yy), color=ttk.TTkColor.fg("FFFF00")) + canvas.drawText(text='┃', pos=(0, yy), color=ttk.TTkColor.fg("FFFF00")) elif h==1: txt = '╼'+'━'*(w-2)+'╾' - self.getCanvas().drawText(text=txt, pos=(0,0), width=w, color=ttk.TTkColor.fg("FFFF00")) + canvas.drawText(text=txt, pos=(0,0), width=w, color=ttk.TTkColor.fg("FFFF00")) ch = { ttk.TTkK.TOP : '▲', @@ -385,19 +384,20 @@ class SuperLayoutGrid(SuperLayout): def paintChildCanvas(self): super().paintChildCanvas() + canvas = self.getCanvas() def _lineDraw(x,y,w,h,color): if h==1 and w==1: - self.getCanvas().drawText(text='◉', pos=(x,y), color=color) + canvas.drawText(text='◉', pos=(x,y), color=color) elif w==1: - self.getCanvas().drawText(text='╽', pos=(x,y), color=color) - self.getCanvas().drawText(text='╿', pos=(x,y+h-1), color=color) + canvas.drawText(text='╽', pos=(x,y), color=color) + canvas.drawText(text='╿', pos=(x,y+h-1), color=color) for yy in range(y+1,y+h-1): - self.getCanvas().drawText(text='┃', pos=(x, yy), color=color) + canvas.drawText(text='┃', pos=(x, yy), color=color) elif h==1: txt = '╼'+'━'*(w-2)+'╾' - self.getCanvas().drawText(text=txt, pos=(x,y), width=w, color=color) + canvas.drawText(text=txt, pos=(x,y), width=w, color=color) else: - self.getCanvas().drawBox(pos=(x,y), size=(w,h), color=color) + canvas.drawBox(pos=(x,y), size=(w,h), color=color) if self._dragOver is not None: _lineDraw(*self._dragOver, ttk.TTkColor.fg("FFFF00")) diff --git a/ttkDesigner/app/superobj/superwidget.py b/ttkDesigner/app/superobj/superwidget.py index 48268954..13725a47 100644 --- a/ttkDesigner/app/superobj/superwidget.py +++ b/ttkDesigner/app/superobj/superwidget.py @@ -116,9 +116,12 @@ class SuperWidget(ttk.TTkWidget): @staticmethod def swFromWidget(wid, *args, **kwargs): swClass = { - ttk.TTkTextEdit: so.SuperWidgetTextEdit, - ttk.TTkRadioButton: so.SuperWidgetRadioButton, - }.get(type(wid),so.SuperWidget) + ttk.TTkTextEdit: so.SuperWidgetTextEdit, + ttk.TTkRadioButton: so.SuperWidgetRadioButton, + ttk.TTkFrame: so.SuperWidgetFrame, + ttk.TTkResizableFrame: so.SuperWidgetFrame, + ttk.TTkWindow: so.SuperWidgetFrame, + }.get(type(wid), so.SuperWidget) return swClass._swFromWidget(wid=wid, *args, **kwargs) @staticmethod @@ -252,20 +255,20 @@ class SuperWidget(ttk.TTkWidget): self.superResized.emit(w,h) return super().resizeEvent(w, h) - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() if SuperWidget._showLayout: t,b,l,r = self._wid.getPadding() for y in range(h): - self._canvas.drawText(pos=(0,y),text='',width=w,color=self._layoutColor) + canvas.drawText(pos=(0,y),text='',width=w,color=self._layoutColor) for y in range(t,h-b): - self._canvas.drawText(pos=(l,y),text='',width=w-r-l,color=self._layoutPadColor) - # self._canvas.fill(color=self._layoutColor) - # self._canvas.fill(pos=(l,t), size=(w-r-l,h-b-t), color=self._layoutPadColor) + canvas.drawText(pos=(l,y),text='',width=w-r-l,color=self._layoutPadColor) + # canvas.fill(color=self._layoutColor) + # canvas.fill(pos=(l,t), size=(w-r-l,h-b-t), color=self._layoutPadColor) else: self._wid.getCanvas().updateSize() - self._wid.paintEvent() - self._canvas.paintCanvas( + self._wid.paintEvent(canvas) + canvas.paintCanvas( self._wid.getCanvas(), ( 0, 0, w, h), # geometry ( 0, 0, w, h), # slice diff --git a/ttkDesigner/app/widgetbox.py b/ttkDesigner/app/widgetbox.py index 3a23f847..226e29d0 100644 --- a/ttkDesigner/app/widgetbox.py +++ b/ttkDesigner/app/widgetbox.py @@ -111,13 +111,13 @@ class DragDesignItem(ttk.TTkWidget): drag.exec() return True - def paintEvent(self): + def paintEvent(self, canvas): if self.isEnabled(): color=ttk.TTkColor.RST else: color=ttk.TTkColor.fg('#AAAAAA') - self._canvas.drawText(text=self._itemName, pos=(1,1), color=color) - self._canvas.drawBox(pos=(0,0),size=self.size(), color=color) + canvas.drawText(text=self._itemName, pos=(1,1), color=color) + canvas.drawBox(pos=(0,0),size=self.size(), color=color) class WidgetBox(ttk.TTkVBoxLayout): def __init__(self, designer, *args, **kwargs): diff --git a/ttkDesigner/app/windoweditor.py b/ttkDesigner/app/windoweditor.py index c44d5181..a3074d9a 100644 --- a/ttkDesigner/app/windoweditor.py +++ b/ttkDesigner/app/windoweditor.py @@ -101,10 +101,10 @@ class WindowEditorView(ttk.TTkAbstractScrollView): def viewDisplayedSize(self): return self.size() - def paintEvent(self): + def paintEvent(self, canvas): w,h = self.size() - # self._canvas.fill(pos=(0,0),size=(w,h), char="╳", color=ttk.TTkColor.fg("#444400")+ttk.TTkColor.bg("#000044")) - self._canvas.fill(pos=(0,0),size=(w,h), char="#", color=ttk.TTkColor.fg("#220044")+ttk.TTkColor.bg("#000022")) + # canvas.fill(pos=(0,0),size=(w,h), char="╳", color=ttk.TTkColor.fg("#444400")+ttk.TTkColor.bg("#000044")) + canvas.fill(pos=(0,0),size=(w,h), char="#", color=ttk.TTkColor.fg("#220044")+ttk.TTkColor.bg("#000022")) class WindowEditor(ttk.TTkAbstractScrollArea): __slots__ = ('getTTk', 'dumpDict', 'importSuperWidget',