WIP: Add support for bicolor led in the simulator
I noticed that the bicolor led isn't supported in the simulator. Here is a quick mockup of how I would add support for it. I added an SVG filter to the #light rectangle in the SVG which lets us multiply the colours by a matrix in code. I then insert values so that the original green colour gets mixed into the combination of red and green requested by `watch_set_led_color` # Testing So far I've only tested this with the standard firmware build but it seems to work. # Possible issues I wasn't 100% sure what to do when red + green > 255, current behaviour is that it gets clamped to 255 in the simulator.
This commit is contained in:
@@ -32,7 +32,16 @@ void watch_disable_leds(void) {}
|
||||
|
||||
void watch_set_led_color(uint8_t red, uint8_t green) {
|
||||
EM_ASM({
|
||||
document.getElementById('light').style.opacity = $1 / 255;
|
||||
// the watch svg contains an feColorMatrix filter with id ledcolor
|
||||
// and a green svg gradient that mimics the led being on
|
||||
// https://developer.mozilla.org/en-US/docs/Web/SVG/Element/feColorMatrix
|
||||
// this changes the color of the gradient to match the red+green combination
|
||||
let filter = document.getElementById("ledcolor");
|
||||
let color_matrix = filter.children[0].values.baseVal;
|
||||
console.log($0, $1);
|
||||
color_matrix[1].value = $0 / 255; // red value
|
||||
color_matrix[6].value = $1 / 255; // green value
|
||||
document.getElementById('light').style.opacity = Math.min(255, $0 + $1) / 255;
|
||||
}, red, green);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user