kopia lustrzana https://github.com/peterhinch/micropython-micro-gui
Sliders: legends now grey-out.
rodzic
c15e441cc8
commit
01e8d72601
|
@ -19,7 +19,7 @@ to a wide range of displays. It is also portable between hosts.
|
||||||
|
|
||||||
Touch GUI's have many advantages, however they have drawbacks, principally cost
|
Touch GUI's have many advantages, however they have drawbacks, principally cost
|
||||||
and the need for calibration. Note that the latter does not apply to the
|
and the need for calibration. Note that the latter does not apply to the
|
||||||
[official LCD160cr](https://store.micropython.org/product/LCD160CRv1.1H)).
|
[official LCD160cr](https://store.micropython.org/product/LCD160CRv1.1H).
|
||||||
Another problem is that touch controllers vary, magnifying the difficulty of
|
Another problem is that touch controllers vary, magnifying the difficulty of
|
||||||
writing a portable GUI.
|
writing a portable GUI.
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
# Copyright (c) 2021 Peter Hinch
|
# Copyright (c) 2021 Peter Hinch
|
||||||
|
|
||||||
from micropython import const
|
from micropython import const
|
||||||
from gui.core.ugui import LinearIO, display # Class and instance
|
from gui.core.ugui import LinearIO, display
|
||||||
from gui.widgets.label import Label
|
from gui.core.colors import *
|
||||||
|
|
||||||
# Null function
|
# Null function
|
||||||
dolittle = lambda *_ : None
|
dolittle = lambda *_ : None
|
||||||
|
@ -40,8 +40,6 @@ class Slider(LinearIO):
|
||||||
self.slot_x0 = centre - _HALF_SLOT_WIDTH
|
self.slot_x0 = centre - _HALF_SLOT_WIDTH
|
||||||
self.slot_y0 = row + _SLIDE_DEPTH // 2
|
self.slot_y0 = row + _SLIDE_DEPTH // 2
|
||||||
self.slot_h = height - _SLIDE_DEPTH - 1
|
self.slot_h = height - _SLIDE_DEPTH - 1
|
||||||
# Prevent Label objects being added to display list when already there.
|
|
||||||
self.drawn = False
|
|
||||||
self.draw = True # Ensure a redraw on next refresh
|
self.draw = True # Ensure a redraw on next refresh
|
||||||
if active: # Run callback (e.g. to set dynamic colors)
|
if active: # Run callback (e.g. to set dynamic colors)
|
||||||
self.callback(self, *self.args)
|
self.callback(self, *self.args)
|
||||||
|
@ -65,8 +63,8 @@ class Slider(LinearIO):
|
||||||
display.fill_rect(self.slot_x0, self.slot_y0, slot_w, slot_len, self.slotcolor)
|
display.fill_rect(self.slot_x0, self.slot_y0, slot_w, slot_len, self.slotcolor)
|
||||||
display.rect(self.slot_x0, self.slot_y0, slot_w, slot_len, self.fgcolor)
|
display.rect(self.slot_x0, self.slot_y0, slot_w, slot_len, self.fgcolor)
|
||||||
|
|
||||||
# Legends: if redrawing, they are already on the Screen's display list
|
txtcolor = GREY if self.greyed_out() else self.fontcolor
|
||||||
if self.legends is not None and not self.drawn:
|
if self.legends is not None:
|
||||||
if len(self.legends) <= 1:
|
if len(self.legends) <= 1:
|
||||||
dy = 0
|
dy = 0
|
||||||
else:
|
else:
|
||||||
|
@ -75,7 +73,8 @@ class Slider(LinearIO):
|
||||||
wri = self.writer
|
wri = self.writer
|
||||||
fhdelta = wri.height / 2
|
fhdelta = wri.height / 2
|
||||||
for legend in self.legends:
|
for legend in self.legends:
|
||||||
Label(wri, int(yl - fhdelta), x + self.width + 4, legend, fgcolor = self.fontcolor)
|
display.print_left(wri, x + self.width + 4, int(yl - fhdelta),
|
||||||
|
legend, txtcolor, self.bgcolor)
|
||||||
yl -= dy
|
yl -= dy
|
||||||
|
|
||||||
slide_y = round(self.slide_y0 - self._value * slot_len)
|
slide_y = round(self.slide_y0 - self._value * slot_len)
|
||||||
|
@ -112,8 +111,6 @@ class HorizSlider(LinearIO):
|
||||||
self.slot_w = width - _SLIDE_DEPTH - 1
|
self.slot_w = width - _SLIDE_DEPTH - 1
|
||||||
centre = row + height // 2
|
centre = row + height // 2
|
||||||
self.slot_y0 = centre - _HALF_SLOT_WIDTH
|
self.slot_y0 = centre - _HALF_SLOT_WIDTH
|
||||||
# Prevent Label objects being added to display list when already there.
|
|
||||||
self.drawn = False
|
|
||||||
self.draw = True # Ensure a redraw on next refresh
|
self.draw = True # Ensure a redraw on next refresh
|
||||||
if active: # Run callback (e.g. to set dynamic colors)
|
if active: # Run callback (e.g. to set dynamic colors)
|
||||||
self.callback(self, *self.args)
|
self.callback(self, *self.args)
|
||||||
|
@ -136,8 +133,8 @@ class HorizSlider(LinearIO):
|
||||||
display.fill_rect(self.slot_x0, self.slot_y0, slot_len, slot_h, self.slotcolor)
|
display.fill_rect(self.slot_x0, self.slot_y0, slot_len, slot_h, self.slotcolor)
|
||||||
display.rect(self.slot_x0, self.slot_y0, slot_len, slot_h, self.fgcolor)
|
display.rect(self.slot_x0, self.slot_y0, slot_len, slot_h, self.fgcolor)
|
||||||
|
|
||||||
# Legends: if redrawing, they are already on the Screen's display list
|
txtcolor = GREY if self.greyed_out() else self.fontcolor
|
||||||
if self.legends is not None and not self.drawn:
|
if self.legends is not None:
|
||||||
if len(self.legends) <= 1:
|
if len(self.legends) <= 1:
|
||||||
dx = 0
|
dx = 0
|
||||||
else:
|
else:
|
||||||
|
@ -146,7 +143,8 @@ class HorizSlider(LinearIO):
|
||||||
wri = self.writer
|
wri = self.writer
|
||||||
for legend in self.legends:
|
for legend in self.legends:
|
||||||
offset = wri.stringlen(legend) / 2
|
offset = wri.stringlen(legend) / 2
|
||||||
Label(wri, y - wri.height - 4, int(xl - offset), legend, fgcolor = self.fontcolor)
|
display.print_left(wri, int(xl - offset), y - wri.height - 4,
|
||||||
|
legend, txtcolor, self.bgcolor)
|
||||||
xl += dx
|
xl += dx
|
||||||
|
|
||||||
self.slide_x = round(self.col + self._value * slot_len)
|
self.slide_x = round(self.col + self._value * slot_len)
|
||||||
|
|
Ładowanie…
Reference in New Issue