1
0
mirror of https://github.com/gryf/wmdocklib.git synced 2025-12-18 20:10:23 +01:00

Added support for background being a XPM image.

This commit is contained in:
2022-05-01 16:30:24 +02:00
parent f35e82d0a9
commit a6f5ea3ba3

View File

@@ -33,7 +33,7 @@ class DockApp:
while event is not None:
if event['type'] == 'destroynotify':
sys.exit(0)
event = helpers.get_event()
return event
def run(self):
self.prepare_pixmaps()
@@ -85,24 +85,36 @@ class DockApp:
font_width = 0
font_height = 0
if self.background:
palette, background = helpers.read_xpm(self.background)
if self.font:
# Read provided xpm file with font definition
palette, fontdef = helpers.read_xpm(self.font)
font_palette, fontdef = helpers.read_xpm(self.font)
font_width = self.charset_width = len(fontdef[0])
font_height = len(fontdef)
if not palette:
palette = font_palette
else:
# merge background and font_palette and remap characters
palette, fontdef = helpers.merge_palettes(palette,
font_palette,
fontdef)
if self.font_dimentions is None:
# user provided font dimension tuple have precedence
if self.font_dimentions is not None:
self.char_width, self.char_height = self.font_dimentions
else:
(self.char_width,
self.char_height) = helpers.get_font_char_size(self.font)
else:
self.char_width, self.char_height = self.font_dimentions
if self.char_width is None:
# font filename doesn't provide hints regarding font size
raise ValueError('Cannot infer font size either from font '
'name (does not contain wxh), or from '
'font_dimentions attribute')
else:
if not palette:
palette[' '] = 'None'
palette_values = {v: k for k, v in palette.items()}
@@ -119,29 +131,28 @@ class DockApp:
new_key = helpers.get_unique_key(palette)
palette[new_key] = color
palette_values = {v: k for k, v in palette.items()}
bevel = helpers.get_unique_key(palette)
palette[bevel] = self.bevel_color
# handle bg color
bg = helpers.normalize_color(self.background_color)
bg_color = helpers.normalize_color(self.background_color)
key = helpers.get_unique_key(palette)
palette[key] = bg
bg = key
palette[key] = bg_color
bg_color = key
if patterns is None:
patterns = [bg * self.width] * self.height
patterns = [bg_color * self.width] * self.height
if self.style == '3d':
ex = bevel
else:
ex = bg
ex = bg_color
if self.background is None:
self.background = (
background = (
[' ' * self.width for item in range(self.margin)] +
[' ' * self.margin + bg * (self.width - 2 * self.margin - 1) +
[' ' * self.margin +
bg_color * (self.width - 2 * self.margin - 1) +
ex + ' ' * (self.margin)
for item in range(self.margin,
self.height - self.margin - 1)] +
@@ -149,23 +160,10 @@ class DockApp:
' ' * (self.margin)] +
[' ' * self.width for item in range(self.margin)])
elif isinstance(self.background,
list) and not isinstance(self.background[0], str):
nbackground = [[' '] * self.width for i in range(self.height)]
for ((left, top), (right, bottom)) in self.background:
for x in range(left, right+1):
for y in range(top, bottom):
if x < right:
nbackground[y][x] = bg
else:
nbackground[y][x] = ex
nbackground[bottom][x] = ex
self.background = [''.join(item) for item in nbackground]
self.charset_start = self.height + len(patterns)
xpmwidth = max(len(self.background[0]), len(patterns[0]), font_width)
xpmheight = len(self.background) + len(patterns) + font_height
xpmwidth = max(len(background[0]), len(patterns[0]), font_width)
xpmheight = len(background) + len(patterns) + font_height
xpm = ([f'{xpmwidth} {xpmheight} {len(palette)} 1'] +
[f'{k}\tc {v}'
@@ -173,7 +171,7 @@ class DockApp:
[f'{k}\tc {v}'
for k, v in list(palette.items()) if v != 'None'] +
[item + ' ' * (xpmwidth - len(item))
for item in self.background + patterns])
for item in background + patterns])
if self.font:
xpm += [line + ' ' * (xpmwidth - len(line)) for line in fontdef]