From 39c98423e64df0197df549a8cc9e9fbe83a64017 Mon Sep 17 00:00:00 2001 From: Eugenio Parodi Date: Fri, 22 Nov 2024 16:35:44 +0000 Subject: [PATCH] Added hasBackground,hasForeground as olor method and adapted the sources to it --- TermTk/TTkCore/canvas.py | 4 +- TermTk/TTkCore/color.py | 16 +++---- TermTk/TTkCore/constant.py | 25 ++++++++--- TermTk/TTkTestWidgets/testwidgetsizes.py | 2 +- TermTk/TTkWidgets/TTkModelView/tablewidget.py | 42 +++++++++---------- TermTk/TTkWidgets/TTkPickers/colorpicker.py | 18 ++++---- TermTk/TTkWidgets/TTkPickers/textpicker.py | 4 +- demo/showcase/textedit.py | 4 +- .../t.ui/test.ui.020.TextEdit.01.UndoRedo.py | 4 +- tools/dumb.image.tool.py | 4 +- tools/dumbPaintTool/app/canvaslayer.py | 32 +++++++------- tools/dumbPaintTool/app/importimage.py | 5 +-- tools/dumbPaintTool/app/paintarea.py | 8 ++-- tools/dumbPaintTool/app/painttoolkit.py | 4 +- tools/dumbPaintTool/app/textarea.py | 4 +- tools/dumbPaintTool/app/toolspanel.py | 4 +- tools/ttkDesigner/app/notepad.py | 4 +- 17 files changed, 98 insertions(+), 86 deletions(-) diff --git a/TermTk/TTkCore/canvas.py b/TermTk/TTkCore/canvas.py index 170b10d0..2cba50d9 100644 --- a/TermTk/TTkCore/canvas.py +++ b/TermTk/TTkCore/canvas.py @@ -157,7 +157,7 @@ class TTkCanvas(): fillCh = [char]*(fxb-fxa) for iy in range(fya,fyb): self._data[iy][fxa:fxb] = fillCh - if color.colorType() & TTkK.Modifier: + if color.colorType() & TTkK.ColorType.ColorModifier: for iy in range(fya,fyb): for ix in range(fxa,fxb): self._colors[iy][ix] = color.mod(fxa+ix,fya+iy) @@ -240,7 +240,7 @@ class TTkCanvas(): self._data[y][x+i] = txt[i] if colors[i] == TTkColor.RST != color: self._colors[y][x+i] = color.mod(x+i,y) - elif (not colors[i].background()) and color.background(): + elif (not colors[i].hasBackground()) and color.hasBackground(): self._colors[y][x+i] = (color + colors[i]).mod(x+i,y) else: self._colors[y][x+i] = colors[i].mod(x+i,y) diff --git a/TermTk/TTkCore/color.py b/TermTk/TTkCore/color.py index 80cc786e..ad77e69a 100644 --- a/TermTk/TTkCore/color.py +++ b/TermTk/TTkCore/color.py @@ -21,6 +21,7 @@ # SOFTWARE. __all__ = ['TTkColor', + 'TTkColorModifier', 'TTkColorGradient', 'TTkLinearGradient', 'TTkAlternateColor'] from TermTk.TTkCore.TTkTerm.colors import TTkTermColor @@ -112,8 +113,9 @@ class _TTkColor: def colorType(self): return ( - ( TTkK.Foreground if self._fg else TTkK.NONE ) | - ( TTkK.Background if self._bg else TTkK.NONE ) ) + ( TTkK.ColorType.ColorModifier if self._colorMod else TTkK.NONE ) | + ( TTkK.ColorType.Foreground if self._fg else TTkK.NONE ) | + ( TTkK.ColorType.Background if self._bg else TTkK.NONE ) ) @staticmethod def rgb2hsl(rgb): @@ -458,12 +460,12 @@ class _TTkColor_mod_link(_TTkColor_mod): return ret -class _TTkColorModifier(): +class TTkColorModifier(): def __init__(self, *args, **kwargs) -> None: pass def setParam(self, *args, **kwargs) -> None: pass def copy(self): return self -class TTkColorGradient(_TTkColorModifier): +class TTkColorGradient(TTkColorModifier): '''TTkColorGradient''' __slots__ = ('_fgincrement', '_bgincrement', '_val', '_step', '_buffer', '_orientation') @@ -515,7 +517,7 @@ class TTkColorGradient(_TTkColorModifier): def copy(self): return self -class TTkLinearGradient(_TTkColorModifier): +class TTkLinearGradient(TTkColorModifier): '''TTkLinearGradient''' __slots__ = ( @@ -740,7 +742,7 @@ class TTkColor(_TTkColor): return _TTkColor(bg=TTkColor.hexToRGB(color), colorMod=mod) @staticmethod - def fgbg(fg:str='', bg:str='', link:str='', modifier:_TTkColorModifier=None): + def fgbg(fg:str='', bg:str='', link:str='', modifier:TTkColorModifier=None): ''' Helper to generate a Background color Example: @@ -765,7 +767,7 @@ class TTkColor(_TTkColor): else: return _TTkColor(fg=TTkColor.hexToRGB(fg), bg=TTkColor.hexToRGB(bg), colorMod=modifier) -class TTkAlternateColor(_TTkColorModifier): +class TTkAlternateColor(TTkColorModifier): '''TTkAlternateColor''' __slots__ = ('_alternateColor') diff --git a/TermTk/TTkCore/constant.py b/TermTk/TTkCore/constant.py index 6f3dbcde..6475e57e 100644 --- a/TermTk/TTkCore/constant.py +++ b/TermTk/TTkCore/constant.py @@ -35,14 +35,29 @@ class TTkConstant: # Color Type class ColorType(int): - Foreground = 0x01 - Background = 0x02 - Modifier = 0x04 - Link = 0x08 + ''' + This Class type defines the various elements included in :py:class:`TTkColor`. + + .. autosummary:: + Foreground + Background + Modifier + Link + ColorModifier + ''' + Foreground = 0x01 + '''The :py:class:`TTkColor` has a foreground color defined''' + Background = 0x02 + '''The :py:class:`TTkColor` has a background color defined''' + Modifier = 0x04 + '''The :py:class:`TTkColor` include one or more of **BOLD**, **ITALIC**, **UNDERLINE**, **STRIKETROUGH**, **BLINKING**''' + Link = 0x08 + '''The :py:class:`TTkColor` include an hyperlink''' + ColorModifier = 0x08 + '''The :py:class:`TTkColor` include a color modifier based on :py:class:`TTkColorModifier`''' Foreground = ColorType.Foreground Background = ColorType.Background Modifier = ColorType.Modifier - Link = ColorType.Link class FocusPolicy(int): ''' diff --git a/TermTk/TTkTestWidgets/testwidgetsizes.py b/TermTk/TTkTestWidgets/testwidgetsizes.py index 3eec364d..0ac9af85 100644 --- a/TermTk/TTkTestWidgets/testwidgetsizes.py +++ b/TermTk/TTkTestWidgets/testwidgetsizes.py @@ -38,7 +38,7 @@ class TTkTestWidgetSizes(TTkFrame): w,h = self.size() style = self.currentStyle() color = style['color'] - if color.background(): + if color.hasBackground(): canvas.fill(pos=(0,0), size=(w,h), color=color) borderColor = style['borderColor'] canvas.drawText(pos=(l,t+0), color=color, text=f"Test Widget [{self._name}]") diff --git a/TermTk/TTkWidgets/TTkModelView/tablewidget.py b/TermTk/TTkWidgets/TTkModelView/tablewidget.py index 8602c3c3..99427075 100644 --- a/TermTk/TTkWidgets/TTkModelView/tablewidget.py +++ b/TermTk/TTkWidgets/TTkModelView/tablewidget.py @@ -1588,14 +1588,14 @@ class TTkTableWidget(TTkAbstractScrollView): _sa = self._selected[_row ][_col ] _sb = self._selected[_row+1][_col ] if (showHS and showVS) and _sa and not _sb: - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST + _bgA:TTkColor = cellColor.background() _bgB:TTkColor = TTkColor.RST elif (showHS and showVS) and not _sa and _sb: _bgA:TTkColor = TTkColor.RST - _bgB:TTkColor = c if (c:=_belowColor.background()) else TTkColor.RST + _bgB:TTkColor = _belowColor.background() else: - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST - _bgB:TTkColor = c if (c:=_belowColor.background()) else TTkColor.RST + _bgA:TTkColor = cellColor.background() + _bgB:TTkColor = _belowColor.background() if _bgA == _bgB: _char='─' @@ -1610,13 +1610,12 @@ class TTkTableWidget(TTkAbstractScrollView): _char='▀' _color=_bgB + _bgA.invertFgBg() else: - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST if self._selected[_row ][_col ]: _char='▀' _color=selectedColorInv - elif _bgA:=cellColor.background(): + elif cellColor.hasBackground(): _char='▀' - _color=_bgA.invertFgBg() + _color=cellColor.background().invertFgBg() else: _char='─' _color=lineColor @@ -1631,14 +1630,14 @@ class TTkTableWidget(TTkAbstractScrollView): _sa = self._selected[_row ][_col ] _sc = self._selected[_row ][_col+1] if (showHS and showVS) and _sa and not _sc: - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST + _bgA:TTkColor = cellColor.background() _bgC:TTkColor = TTkColor.RST elif (showHS and showVS) and not _sa and _sc: _bgA:TTkColor = TTkColor.RST - _bgC:TTkColor = c if (c:=_rightColor.background()) else TTkColor.RST + _bgC:TTkColor = _rightColor.background() else: - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST - _bgC:TTkColor = c if (c:=_rightColor.background()) else TTkColor.RST + _bgA:TTkColor = cellColor.background() + _bgC:TTkColor = _rightColor.background() if _bgA == _bgC: _char='│' @@ -1653,13 +1652,12 @@ class TTkTableWidget(TTkAbstractScrollView): _char='▌' _color=_bgC + _bgA.invertFgBg() else: - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST if self._selected[_row ][_col ]: _char='▌' _color=selectedColorInv - elif _bgA:=cellColor.background(): + elif cellColor.hasBackground(): _char=' ' - _color=_bgA + _color=cellColor.background() else: _char='│' _color=lineColor @@ -1688,8 +1686,8 @@ class TTkTableWidget(TTkAbstractScrollView): 0x08 * self._selected[_row+1][_col+1] ) if chId==0x00 or chId==0x0F: _belowColor:TTkColor = _colorCache2d[_row+1-rowa][_col-cola] - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST - _bgB:TTkColor = c if (c:=_belowColor.background()) else TTkColor.RST + _bgA:TTkColor = cellColor.background() + _bgB:TTkColor = _belowColor.background() if _bgA == _bgB: _color = lineColor if _bgA == TTkColor.RST else _bgA + lineColor @@ -1714,9 +1712,9 @@ class TTkTableWidget(TTkAbstractScrollView): if chId: _char = _charList[chId] _color=selectedColorInv - elif _c:=cellColor.background(): + elif cellColor.hasBackground(): _char='▀' - _color = _c.invertFgBg() + _color = cellColor.background().invertFgBg() else: _char = '┴' _color = lineColor @@ -1725,8 +1723,8 @@ class TTkTableWidget(TTkAbstractScrollView): (0x01) * self._selected[row ][col ] + (0x04) * self._selected[row+1][col ] ) _belowColor:TTkColor = _colorCache2d[_row+1-rowa][_col-cola] - _bgA:TTkColor = c if (c:=cellColor.background()) else TTkColor.RST - _bgB:TTkColor = c if (c:=_belowColor.background()) else TTkColor.RST + _bgA:TTkColor = cellColor.background() + _bgB:TTkColor = _belowColor.background() if chId: _char = _charList[chId] @@ -1749,9 +1747,9 @@ class TTkTableWidget(TTkAbstractScrollView): if chId: _char = _charList[chId] _color=selectedColorInv - elif _c:=cellColor.background(): + elif cellColor.hasBackground(): _char='▀' - _color = _c.invertFgBg() + _color = cellColor.background().invertFgBg() else: _char = '┘' _color = lineColor diff --git a/TermTk/TTkWidgets/TTkPickers/colorpicker.py b/TermTk/TTkWidgets/TTkPickers/colorpicker.py index d77ae09a..c1143507 100644 --- a/TermTk/TTkWidgets/TTkPickers/colorpicker.py +++ b/TermTk/TTkWidgets/TTkPickers/colorpicker.py @@ -207,9 +207,9 @@ class _TTkColorButton(TTkButton): style = self.style() for t in style: if 'color' in style[t]: - if TTkK.ColorType.Foreground & (colorType := color.colorType()): + if color.hasForeground(): style[t]['color'] = color.foreground().invertFgBg() - elif TTkK.ColorType.Background & colorType: + elif color.hasBackground(): style[t]['color'] = color.background() else: style[t]['color'] = TTkColor.BG_BLACK @@ -224,12 +224,12 @@ class _TTkColorButton(TTkButton): def color(self) -> TTkColor: if self._returnType==TTkK.ColorPickerReturnType.Foreground: - if self._color.colorType() & TTkK.ColorType.Foreground: + if self._color.hasForeground(): return self._color.foreground() else: return self._color.background().invertFgBg() if self._returnType==TTkK.ColorPickerReturnType.Background: - if self._color.colorType() & TTkK.ColorType.Background: + if self._color.hasBackground(): return self._color.background() else: return self._color.foreground().invertFgBg() @@ -367,7 +367,7 @@ class TTkColorDialogPicker(TTkWindow): self.colorSelected = pyTTkSignal(TTkColor) self._returnType=returnType self._color:TTkColor=color if color and color!=TTkColor.RST else TTkColor.BLACK - self._isForeground:bool = not (color.colorType()&TTkK.Background)!=0 + self._isForeground:bool = color.hasForeground() or not color.hasBackground() super().__init__(**kwargs) self.setWindowFlag(TTkK.WindowFlag.WindowMaximizeButtonHint | TTkK.WindowFlag.WindowCloseButtonHint) self.setLayout(TTkGridLayout()) @@ -554,12 +554,12 @@ class TTkColorDialogPicker(TTkWindow): :rtype: :py:class:`TTkColor` ''' if self._returnType==TTkK.ColorPickerReturnType.Foreground: - if self._color.colorType() & TTkK.ColorType.Foreground: + if self._color.hasForeground(): return self._color.foreground() else: return self._color.background().invertFgBg() if self._returnType==TTkK.ColorPickerReturnType.Background: - if self._color.colorType() & TTkK.ColorType.Background: + if self._color.hasBackground(): return self._color.background() else: return self._color.foreground().invertFgBg() @@ -671,10 +671,10 @@ class TTkColorButtonPicker(_TTkColorButton): @pyTTkSlot(TTkColor) def _processColorSelected(self, color:TTkColor): - if TTkK.ColorType.Foreground & (colorType := color.colorType()): + if color.hasForeground(): fg = color.foreground() bg = color.foreground().invertFgBg() - elif TTkK.ColorType.Background & colorType: + elif color.hasBackground(): fg = color.background().invertFgBg() bg = color.background() else: diff --git a/TermTk/TTkWidgets/TTkPickers/textpicker.py b/TermTk/TTkWidgets/TTkPickers/textpicker.py index 9e42d074..fb1bd667 100644 --- a/TermTk/TTkWidgets/TTkPickers/textpicker.py +++ b/TermTk/TTkWidgets/TTkPickers/textpicker.py @@ -173,7 +173,7 @@ class TTkTextDialogPicker(TTkWindow): @pyTTkSlot(TTkColor) def _currentColorChangedCB(format:TTkColor): - if TTkK.ColorType.Foreground & (colorType := format.colorType()): + if format.hasForeground(): cb_fg.setCheckState(TTkK.Checked) btn_fgColor.setEnabled() btn_fgColor.setColor(format.foreground()) @@ -181,7 +181,7 @@ class TTkTextDialogPicker(TTkWindow): cb_fg.setCheckState(TTkK.Unchecked) btn_fgColor.setDisabled() - if TTkK.ColorType.Background & colorType: + if format.hasBackground(): cb_bg.setCheckState(TTkK.Checked) btn_bgColor.setEnabled() btn_bgColor.setColor(format.background()) diff --git a/demo/showcase/textedit.py b/demo/showcase/textedit.py index 17466afe..27af7e94 100755 --- a/demo/showcase/textedit.py +++ b/demo/showcase/textedit.py @@ -158,7 +158,7 @@ def demoTextEdit(root=None, document=None): @ttk.pyTTkSlot(ttk.TTkColor) def _currentColorChangedCB(format:ttk.TTkColor): - if ttk.TTkK.ColorType.Foreground & (colorType := format.colorType()): + if format.hasForeground(): cb_fg.setCheckState(ttk.TTkK.Checked) btn_fgColor.setEnabled() btn_fgColor.setColor(format.foreground()) @@ -166,7 +166,7 @@ def demoTextEdit(root=None, document=None): cb_fg.setCheckState(ttk.TTkK.Unchecked) btn_fgColor.setDisabled() - if ttk.TTkK.ColorType.Background & colorType: + if format.hasBackground(): cb_bg.setCheckState(ttk.TTkK.Checked) btn_bgColor.setEnabled() btn_bgColor.setColor(format.background()) diff --git a/tests/t.ui/test.ui.020.TextEdit.01.UndoRedo.py b/tests/t.ui/test.ui.020.TextEdit.01.UndoRedo.py index 19982c15..bf7e353c 100755 --- a/tests/t.ui/test.ui.020.TextEdit.01.UndoRedo.py +++ b/tests/t.ui/test.ui.020.TextEdit.01.UndoRedo.py @@ -77,7 +77,7 @@ def demoTextEdit(root=None, document=None): @ttk.pyTTkSlot(ttk.TTkColor) def _currentColorChangedCB(format:ttk.TTkColor): - if ttk.TTkK.ColorType.Foreground & (colorType := format.colorType()): + if format.hasForeground(): cb_fg.setCheckState(ttk.TTkK.Checked) btn_fgColor.setEnabled() btn_fgColor.setColor(format.foreground()) @@ -85,7 +85,7 @@ def demoTextEdit(root=None, document=None): cb_fg.setCheckState(ttk.TTkK.Unchecked) btn_fgColor.setDisabled() - if ttk.TTkK.ColorType.Background & colorType: + if format.hasBackground(): cb_bg.setCheckState(ttk.TTkK.Checked) btn_bgColor.setEnabled() btn_bgColor.setColor(format.background()) diff --git a/tools/dumb.image.tool.py b/tools/dumb.image.tool.py index faccf40a..16c55f09 100755 --- a/tools/dumb.image.tool.py +++ b/tools/dumb.image.tool.py @@ -85,7 +85,7 @@ class Ansieditor(ttk.TTkGridLayout): @ttk.pyTTkSlot(ttk.TTkColor) def _currentColorChangedCB(format:ttk.TTkColor): - if ttk.TTkK.ColorType.Foreground & (colorType := format.colorType()): + if format.hasForeground(): cb_fg.setCheckState(ttk.TTkK.Checked) btn_fgColor.setEnabled() btn_fgColor.setColor(format.foreground()) @@ -93,7 +93,7 @@ class Ansieditor(ttk.TTkGridLayout): cb_fg.setCheckState(ttk.TTkK.Unchecked) btn_fgColor.setDisabled() - if ttk.TTkK.ColorType.Background & colorType: + if format.hasBackground(): cb_bg.setCheckState(ttk.TTkK.Checked) btn_bgColor.setEnabled() btn_bgColor.setColor(format.background()) diff --git a/tools/dumbPaintTool/app/canvaslayer.py b/tools/dumbPaintTool/app/canvaslayer.py index 5a2cd2c0..b167be13 100644 --- a/tools/dumbPaintTool/app/canvaslayer.py +++ b/tools/dumbPaintTool/app/canvaslayer.py @@ -148,7 +148,7 @@ class CanvasLayer(): data = self._data colors = self._colors if 0<=x