Skip to content

Commit f0cd3c2

Browse files
committed
feat(background): add menu to select bg color
1 parent 78fe57c commit f0cd3c2

5 files changed

Lines changed: 104 additions & 1 deletion

File tree

‎src/e3sm_quickview/app.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ def _build_ui(self, **_):
232232
with v3.VLayout():
233233
drawers.Tools(
234234
reset_camera=self.view_manager.reset_camera,
235+
update_background=self.view_manager.update_background,
235236
)
236237

237238
with v3.VMain():

‎src/e3sm_quickview/components/drawers.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99

1010
class Tools(v3.VNavigationDrawer):
11-
def __init__(self, reset_camera=None):
11+
def __init__(self, reset_camera=None, update_background=None):
1212
super().__init__(
1313
permanent=True,
1414
rail=("compact_drawer", True),
@@ -50,6 +50,7 @@ def __init__(self, reset_camera=None):
5050
v3.VDivider(classes="my-1") # ---------------------
5151

5252
tools.CaptureFullPanel(click="utils.quickview.capturePanel()")
53+
tools.BackgroundColors(update_background=update_background)
5354

5455
# dev add-on ui reload
5556
if self.server.hot_reload:

‎src/e3sm_quickview/components/tools.py‎

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,3 +343,77 @@ async def _tauri_save(self):
343343
txt_content = self.ctrl.download_state()
344344
Path(export_path).write_text(txt_content)
345345
self._pending_task = None
346+
347+
348+
class BackgroundColors(v3.VTooltip):
349+
def __init__(
350+
self,
351+
compact="compact_drawer",
352+
title="Background Colors",
353+
update_background=None,
354+
):
355+
super().__init__(
356+
text=title,
357+
disabled=(f"!{compact}",),
358+
)
359+
self._pending_task = None
360+
with self:
361+
with v3.Template(v_slot_activator="{ props }"):
362+
with v3.VListItem(
363+
v_bind="props",
364+
prepend_icon="mdi-format-color-fill",
365+
title=(f"{compact} ? null : '{title}'",),
366+
):
367+
with v3.VMenu(
368+
activator="parent",
369+
location="end",
370+
offset=10,
371+
):
372+
with v3.VList(density="compact"):
373+
v3.VListItem(
374+
title="Dark gradient background",
375+
click=(
376+
update_background,
377+
"[[84 / 255, 89 / 255, 109 / 255, 0, 0, 42 / 255]]",
378+
),
379+
)
380+
v3.VListItem(
381+
title="Soft Black",
382+
click=(update_background, "[[0.071,0.071,0.071]]"),
383+
)
384+
v3.VListItem(
385+
title="Charcoal",
386+
click=(update_background, "[[0.118,0.118,0.118]]"),
387+
)
388+
v3.VListItem(
389+
title="Dark Gray",
390+
click=(update_background, "[[0.169,0.169,0.169]]"),
391+
)
392+
v3.VListItem(
393+
title="Graphite",
394+
click=(update_background, "[[0.200,0.200,0.200]]"),
395+
)
396+
v3.VListItem(
397+
title="Perceptual Mid-Gray",
398+
click=(update_background, "[[0.467,0.467,0.467]]"),
399+
)
400+
v3.VListItem(
401+
title="Medium Gray",
402+
click=(update_background, "[[0.502,0.502,0.502]]"),
403+
)
404+
v3.VListItem(
405+
title="Light Gray",
406+
click=(update_background, "[[0.851,0.851,0.851]]"),
407+
)
408+
v3.VListItem(
409+
title="Off-White",
410+
click=(update_background, "[[0.949,0.949,0.949]]"),
411+
)
412+
v3.VListItem(
413+
title="White",
414+
click=(update_background, "[[1,1,1]]"),
415+
)
416+
v3.VListItem(
417+
title="Deep Space Blue",
418+
click=(update_background, "[[0.043,0.063,0.125]]"),
419+
)

‎src/e3sm_quickview/view_manager.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def __init__(self, server, source):
6161
self._render_window = vtkRenderWindow()
6262
self._render_window.OffScreenRenderingOn()
6363
self._picker = vtkCellPicker(tolerance=0.0005)
64+
self._bg_color = None
6465

6566
# Perf: time the actual VTK render on the shared render window.
6667
# Emits `view.shared.render_window` with the elapsed time for
@@ -162,6 +163,13 @@ def refresh_ui(self, **_):
162163
for view in self._var2view.values():
163164
view._build_ui()
164165

166+
def update_background(self, color):
167+
self._bg_color = color
168+
for view in self._var2view.values():
169+
view.update_background(color)
170+
171+
self.render()
172+
165173
def camera_projection(self):
166174
self._camera.focal_point = (0, 0, 0)
167175
self._camera.position = (0, 0, 1)
@@ -325,6 +333,7 @@ def get_view(self, variable_name, variable_type):
325333
self.server, self.source, variable_name, variable_type, self._camera
326334
)
327335
self._var2view[variable_name] = view
336+
view.update_background(self._bg_color)
328337

329338
return view
330339

‎src/e3sm_quickview/view_panel.py‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,24 @@ def render(self):
100100
if self.ctx.view:
101101
self.ctx.view.update()
102102

103+
def update_background(self, color):
104+
if color is None:
105+
return
106+
107+
size = len(color)
108+
if size == 3:
109+
self.renderer.background = tuple(color)
110+
self.renderer.gradient_background = 0
111+
elif size == 6:
112+
self.renderer.background = tuple(color[0:3])
113+
self.renderer.background2 = tuple(color[3:6])
114+
self.renderer.gradient_background = 1
115+
else:
116+
msg = f"Invalid background color: {color}"
117+
raise ValueError(msg)
118+
119+
self.render()
120+
103121
@property
104122
def data_array(self):
105123
data_reader = self.source.data_reader

0 commit comments

Comments
 (0)