Skip to content

Commit

Permalink
<Enhancement>[DiagramFrame]: <Support Dark Mode>
Browse files Browse the repository at this point in the history
[
* Add a few more colors
* Add preferences for regular and dark mode
* Grid lines need a dark mode default color
]

[#123]
  • Loading branch information
hasii2011 committed Jan 21, 2025
1 parent e62e1f0 commit 9beab3b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 14 deletions.
29 changes: 24 additions & 5 deletions src/miniogl/DiagramFrame.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@

from wx import Colour
from wx import Rect
from wx import WHITE
from wx import SystemAppearance
from wx import SystemSettings

from wx import EVT_LEFT_DCLICK
from wx import EVT_LEFT_DOWN
Expand Down Expand Up @@ -125,13 +126,18 @@ def __init__(self, parent: Window):
w, h = self.GetSize()
self.__workingBitmap = Bitmap(w, h) # double buffering
self.__backgroundBitmap = Bitmap(w, h)

self._defaultFont = Font(DiagramFrame.DEFAULT_FONT_SIZE, FONTFAMILY_DEFAULT, FONTSTYLE_NORMAL, FONTWEIGHT_NORMAL)
self.SetBackgroundColour(WHITE)
self._defaultFont = Font(DiagramFrame.DEFAULT_FONT_SIZE, FONTFAMILY_DEFAULT, FONTSTYLE_NORMAL, FONTWEIGHT_NORMAL)

self._prefs: OglPreferences = OglPreferences()
self._oglEventEngine: IOglEventEngine = OglEventEngine(listeningWindow=self)

systemAppearance: SystemAppearance = SystemSettings.GetAppearance()
self._darkMode: bool = systemAppearance.IsDark()

self._dfLogger.info(f'{self._darkMode=}')

self._setAppropriateSetBackground()

# Mouse events
self.Bind(EVT_LEFT_DOWN, self.OnLeftDown)
self.Bind(EVT_LEFT_UP, self.OnLeftUp)
Expand Down Expand Up @@ -1062,7 +1068,11 @@ def _drawVerticalLines(self, memDC: DC, width: int, height: int, startX: int, st

def _getGridPen(self) -> Pen:

gridLineColor: Colour = MiniOglColorEnum.toWxColor(self._prefs.gridLineColor)
if self._darkMode is True:
gridLineColor: Colour = MiniOglColorEnum.toWxColor(self._prefs.darkModeGridLineColor)
else:
gridLineColor = MiniOglColorEnum.toWxColor(self._prefs.gridLineColor)

gridLineStyle: PenStyle = MiniOglPenStyle.toWxPenStyle(self._prefs.gridLineStyle)

pen: Pen = Pen(PenInfo(gridLineColor).Style(gridLineStyle).Width(1))
Expand All @@ -1076,3 +1086,12 @@ def _isShapeInRectangle(self, rect: RectangleShape, x0: float, y0: float, w0: fl
ans = True

return ans

def _setAppropriateSetBackground(self):

if self._darkMode is True:
color: Colour = MiniOglColorEnum.toWxColor(self._prefs.darkModeBackGroundColor)
self.SetBackgroundColour(color)
else:
color = MiniOglColorEnum.toWxColor(self._prefs.backGroundColor)
self.SetBackgroundColour(color)
4 changes: 4 additions & 0 deletions src/miniogl/MiniOglColorEnum.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ class MiniOglColorEnum(Enum):
GAINSBORO = 'Gainsboro'
LIGHT_YELLOW = 'Light Yellow'
MINT_CREAM = 'Mint Cream'
GREY = 'Grey'
CADET_BLUE = 'Cadet Blue'
AF_BLUE = 'Air Force Blue'

@staticmethod
def toWxColor(colorEnum: 'MiniOglColorEnum') -> Colour:
Expand All @@ -42,6 +45,7 @@ def toWxColor(colorEnum: 'MiniOglColorEnum') -> Colour:
cdb.AddColour(MiniOglColorEnum.GAINSBORO.value, Colour(218, 218, 218))
cdb.AddColour(MiniOglColorEnum.LIGHT_YELLOW.value, Colour(255, 255, 224))
cdb.AddColour(MiniOglColorEnum.MINT_CREAM.value, Colour(245, 255, 250))
cdb.AddColour(MiniOglColorEnum.AF_BLUE.value, Colour(0, 48, 143))

c: Colour = cdb.Find(colorEnum.value)
if c.IsOk() is False:
Expand Down
2 changes: 1 addition & 1 deletion src/ogl/_version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '3.6.2'
__version__ = '3.6.3'
27 changes: 19 additions & 8 deletions src/ogl/preferences/OglPreferences.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,17 @@
MODULE_NAME: str = 'ogl'
PREFERENCES_FILE_NAME: str = f'{MODULE_NAME}.ini'

DEFAULT_BACKGROUND_COLOR: str = MiniOglColorEnum.WHITE.value
DEFAULT_DARK_MODE_BACKGROUND_COLOR: str = MiniOglColorEnum.DIM_GREY.value

DEFAULT_GRID_LINE_COLOR: str = MiniOglColorEnum.AF_BLUE.value
DEFAULT_DARK_MODE_GRID_LINE_COLOR: str = MiniOglColorEnum.WHITE.value

DEFAULT_CLASS_BACKGROUND_COLOR: str = MiniOglColorEnum.MINT_CREAM.value
DEFAULT_CLASS_TEXT_COLOR: str = MiniOglColorEnum.BLACK.value
DEFAULT_GRID_LINE_COLOR: str = MiniOglColorEnum.LIGHT_GREY.value
DEFAULT_GRID_LINE_STYLE: str = MiniOglPenStyle.DOT.value


oglProperties: ValueDescriptions = ValueDescriptions(
{
KeyName('textValue'): ValueDescription(defaultValue='fac America magna iterum'),
Expand All @@ -45,13 +51,18 @@
)
diagramProperties: ValueDescriptions = ValueDescriptions(
{
KeyName('centerDiagram'): ValueDescription(defaultValue='False', deserializer=SecureConversions.secureBoolean),
KeyName('backGroundGridEnabled'): ValueDescription(defaultValue='True', deserializer=SecureConversions.secureBoolean),
KeyName('snapToGrid'): ValueDescription(defaultValue='True', deserializer=SecureConversions.secureBoolean),
KeyName('showParameters'): ValueDescription(defaultValue='False', deserializer=SecureConversions.secureBoolean),
KeyName('backgroundGridInterval'): ValueDescription(defaultValue='25', deserializer=SecureConversions.secureInteger),
KeyName('gridLineColor'): ValueDescription(defaultValue=DEFAULT_GRID_LINE_COLOR, enumUseValue=True, deserializer=MiniOglColorEnum),
KeyName('gridLineStyle'): ValueDescription(defaultValue=DEFAULT_GRID_LINE_STYLE, enumUseValue=True, deserializer=MiniOglPenStyle),
KeyName('centerDiagram'): ValueDescription(defaultValue='False', deserializer=SecureConversions.secureBoolean),
KeyName('backGroundGridEnabled'): ValueDescription(defaultValue='True', deserializer=SecureConversions.secureBoolean),
KeyName('snapToGrid'): ValueDescription(defaultValue='True', deserializer=SecureConversions.secureBoolean),
KeyName('showParameters'): ValueDescription(defaultValue='False', deserializer=SecureConversions.secureBoolean),
KeyName('backgroundGridInterval'): ValueDescription(defaultValue='25', deserializer=SecureConversions.secureInteger),

KeyName('gridLineStyle'): ValueDescription(defaultValue=DEFAULT_GRID_LINE_STYLE, enumUseValue=True, deserializer=MiniOglPenStyle),

KeyName('backGroundColor'): ValueDescription(defaultValue=DEFAULT_BACKGROUND_COLOR, enumUseValue=True, deserializer=MiniOglColorEnum),
KeyName('darkModeBackGroundColor'): ValueDescription(defaultValue=DEFAULT_DARK_MODE_BACKGROUND_COLOR, enumUseValue=True, deserializer=MiniOglColorEnum),
KeyName('gridLineColor'): ValueDescription(defaultValue=DEFAULT_GRID_LINE_COLOR, enumUseValue=True, deserializer=MiniOglColorEnum),
KeyName('darkModeGridLineColor'): ValueDescription(defaultValue=DEFAULT_DARK_MODE_GRID_LINE_COLOR, enumUseValue=True, deserializer=MiniOglColorEnum),
}
)

Expand Down

0 comments on commit 9beab3b

Please sign in to comment.