led: better implementation of the white channel
This commit is contained in:
parent
836092659d
commit
82b75a528a
@ -3,7 +3,7 @@ import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, GLib
|
||||
from math import pi
|
||||
from math import pi, floor
|
||||
from ks_includes.KlippyGcodes import KlippyGcodes
|
||||
from ks_includes.screen_panel import ScreenPanel
|
||||
|
||||
@ -144,7 +144,7 @@ class Panel(ScreenPanel):
|
||||
def on_draw(self, da, ctx, color=None):
|
||||
if color is None:
|
||||
color = self.color_data
|
||||
ctx.set_source_rgb(color[0], color[1], color[2])
|
||||
ctx.set_source_rgb(*self.rgbw_to_rgb(color))
|
||||
# Set the size of the rectangle
|
||||
width = height = da.get_allocated_width() * .9
|
||||
x = da.get_allocated_width() * .05
|
||||
@ -160,7 +160,7 @@ class Panel(ScreenPanel):
|
||||
def update_preview(self, args):
|
||||
self.update_color_data()
|
||||
self.preview.queue_draw()
|
||||
self.preview_label.set_label(self.rgbw_to_hex(self.color_data))
|
||||
self.preview_label.set_label(self.rgb_to_hex(self.rgbw_to_rgb(self.color_data)))
|
||||
|
||||
def process_update(self, action, data):
|
||||
if action != 'notify_status_update':
|
||||
@ -205,11 +205,19 @@ class Panel(ScreenPanel):
|
||||
return parsed
|
||||
|
||||
@staticmethod
|
||||
def rgbw_to_hex(color):
|
||||
def rgb_to_hex(color):
|
||||
hex_color = '#'
|
||||
for value in color[:3]:
|
||||
for value in color:
|
||||
int_value = round(value * 255)
|
||||
hex_color += hex(int_value)[2:].zfill(2)
|
||||
alpha = round(color[3] * 255)
|
||||
hex_color += hex(alpha)[2:].zfill(2)
|
||||
return hex_color.upper()
|
||||
|
||||
@staticmethod
|
||||
def rgbw_to_rgb(color):
|
||||
# The idea here is to use the white channel as a saturation control
|
||||
# The white channel 'washes' the color
|
||||
return (
|
||||
[color[i] + color[3] for i in range(3)] # Special case of only white channel
|
||||
if color[0] == 0 and color[1] == 0 and color[2] == 0
|
||||
else [color[i] + (1 - color[i]) * color[3] / 3 for i in range(3)]
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user