]> git.basschouten.com Git - openhab-addons.git/commitdiff
[nanoleaf] Use new core class ColorUtil for RGB conversion (#14773)
authorHolger Friedrich <holgerfriedrich@users.noreply.github.com>
Mon, 1 May 2023 18:43:22 +0000 (20:43 +0200)
committerGitHub <noreply@github.com>
Mon, 1 May 2023 18:43:22 +0000 (20:43 +0200)
Signed-off-by: Holger Friedrich <mail@holger-friedrich.de>
bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/handler/NanoleafPanelHandler.java
bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/layout/shape/HexagonCorners.java
bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/layout/shape/Point.java
bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/layout/shape/Shape.java
bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/layout/shape/SingleLine.java

index ed2b7fa11805f353547f92b388dfa16f8d564205..676011174cd172cbb4bf1756b62e6e06582f2a8d 100644 (file)
@@ -14,8 +14,6 @@ package org.openhab.binding.nanoleaf.internal.handler;
 
 import static org.openhab.binding.nanoleaf.internal.NanoleafBindingConstants.*;
 
-import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.concurrent.ScheduledFuture;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
@@ -48,6 +46,7 @@ import org.openhab.core.thing.binding.BridgeHandler;
 import org.openhab.core.thing.binding.ThingHandler;
 import org.openhab.core.types.Command;
 import org.openhab.core.types.RefreshType;
+import org.openhab.core.util.ColorUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -220,15 +219,8 @@ public class NanoleafPanelHandler extends BaseThingHandler implements NanoleafPa
         logger.trace("Setting new color {} to panel {}", newPanelColor, getPanelID());
         setPanelColor(newPanelColor);
         // transform to RGB
-        PercentType[] rgbPercent = newPanelColor.toRGB();
-        logger.trace("Setting new rgbpercent {} {} {}", rgbPercent[0], rgbPercent[1], rgbPercent[2]);
-        int red = rgbPercent[0].toBigDecimal().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)
-                .multiply(new BigDecimal(255)).intValue();
-        int green = rgbPercent[1].toBigDecimal().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)
-                .multiply(new BigDecimal(255)).intValue();
-        int blue = rgbPercent[2].toBigDecimal().divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP)
-                .multiply(new BigDecimal(255)).intValue();
-        logger.trace("Setting new rgb {} {} {}", red, green, blue);
+        int[] rgb = ColorUtil.hsbToRgb(newPanelColor);
+        logger.trace("Setting new rgb {} {} {}", rgb[0], rgb[1], rgb[2]);
         Bridge bridge = getBridge();
         if (bridge != null) {
             Effects effects = new Effects();
@@ -243,14 +235,14 @@ public class NanoleafPanelHandler extends BaseThingHandler implements NanoleafPa
                 // Light Panels and Canvas use different stream commands
                 if (config.deviceType.equals(CONFIG_DEVICE_TYPE_LIGHTPANELS)
                         || config.deviceType.equals(CONFIG_DEVICE_TYPE_CANVAS)) {
-                    logger.trace("Anim Data rgb {} {} {} {}", panelID, red, green, blue);
-                    write.setAnimData(String.format("1 %s 1 %d %d %d 0 10", panelID, red, green, blue));
+                    logger.trace("Anim Data rgb {} {} {} {}", panelID, rgb[0], rgb[1], rgb[2]);
+                    write.setAnimData(String.format("1 %s 1 %d %d %d 0 10", panelID, rgb[0], rgb[1], rgb[2]));
                 } else {
                     // this is only used in special streaming situations with canvas which is not yet supported
                     int quotient = Integer.divideUnsigned(panelID, 256);
                     int remainder = Integer.remainderUnsigned(panelID, 256);
                     write.setAnimData(
-                            String.format("0 1 %d %d %d %d %d 0 0 10", quotient, remainder, red, green, blue));
+                            String.format("0 1 %d %d %d %d %d 0 0 10", quotient, remainder, rgb[0], rgb[1], rgb[2]));
                 }
                 write.setLoop(false);
                 effects.setWrite(write);
index 3cabae992e80e6bea6a7ebb844b212eb4d7cca1f..ecc3b5d90d83f3e609bbebf5468d374d83f39d42 100644 (file)
@@ -27,6 +27,7 @@ import org.openhab.binding.nanoleaf.internal.layout.Point2D;
 import org.openhab.binding.nanoleaf.internal.layout.ShapeType;
 import org.openhab.binding.nanoleaf.internal.model.PositionDatum;
 import org.openhab.core.library.types.HSBType;
+import org.openhab.core.util.ColorUtil;
 
 /**
  * A hexagon shape.
@@ -132,7 +133,7 @@ public class HexagonCorners extends Panel {
 
     private static Color getColor(int panelId, PanelState state) {
         HSBType color = state.getHSBForPanel(panelId);
-        return new Color(color.getRGB());
+        return new Color(ColorUtil.hsbTosRgb(color));
     }
 
     private Color getAverageColor(PanelState state) {
index 6d30415bbb01c3d5cd8349260184c4a11e1c21db..295dc9f5185943ff27c5a3221b4f07d8e11e1c36 100644 (file)
@@ -24,6 +24,7 @@ import org.openhab.binding.nanoleaf.internal.layout.PanelState;
 import org.openhab.binding.nanoleaf.internal.layout.Point2D;
 import org.openhab.binding.nanoleaf.internal.layout.ShapeType;
 import org.openhab.core.library.types.HSBType;
+import org.openhab.core.util.ColorUtil;
 
 /**
  * A shape without any area.
@@ -55,7 +56,7 @@ public class Point extends Panel {
 
         if (settings.shouldFillWithColor()) {
             HSBType color = state.getHSBForPanel(panelId);
-            graphics.setColor(new Color(color.getRGB()));
+            graphics.setColor(new Color(ColorUtil.hsbTosRgb(color)));
             graphics.fillOval(pos.getX(), pos.getY(), POINT_DIAMETER, POINT_DIAMETER);
         }
 
index df7c6545ebc4a85e8a0b5886ea4d278762ac614c..9409999e48006b5675e3090a56137c098bce2e9f 100644 (file)
@@ -24,6 +24,7 @@ import org.openhab.binding.nanoleaf.internal.layout.PanelState;
 import org.openhab.binding.nanoleaf.internal.layout.Point2D;
 import org.openhab.binding.nanoleaf.internal.layout.ShapeType;
 import org.openhab.core.library.types.HSBType;
+import org.openhab.core.util.ColorUtil;
 
 /**
  * Draws shapes, which are panels with a single LED.
@@ -77,7 +78,7 @@ public abstract class Shape extends Panel {
         }
 
         HSBType color = state.getHSBForPanel(getPanelId());
-        graphics.setColor(new Color(color.getRGB()));
+        graphics.setColor(new Color(ColorUtil.hsbTosRgb(color)));
         if (settings.shouldFillWithColor()) {
             graphics.fillPolygon(p);
         }
index 512d82b9523d1fad95317d0f33fd62dab7faf5e0..b611d4cfb73348509f020d67b7034a6dd6ed26c3 100644 (file)
@@ -29,6 +29,7 @@ import org.openhab.binding.nanoleaf.internal.layout.Point2D;
 import org.openhab.binding.nanoleaf.internal.layout.ShapeType;
 import org.openhab.binding.nanoleaf.internal.model.PositionDatum;
 import org.openhab.core.library.types.HSBType;
+import org.openhab.core.util.ColorUtil;
 
 /**
  * A single line.
@@ -123,6 +124,6 @@ public class SingleLine extends Panel {
 
     private static Color getColor(int panelId, PanelState state) {
         HSBType color = state.getHSBForPanel(panelId);
-        return new Color(color.getRGB());
+        return new Color(ColorUtil.hsbTosRgb(color));
     }
 }