From f151c079dc36884c83e0347dbfa17a81f8baf702 Mon Sep 17 00:00:00 2001 From: Robert Vokac Date: Wed, 27 Mar 2024 17:40:37 +0100 Subject: [PATCH] Added fuel gauge II --- .../utils/timecalc/swing/common/Brush.java | 41 +++++++++++++++++++ .../{weather => }/ProgressFuelGauge.java | 34 ++++++++++++--- .../timecalc/swing/windows/MainWindow.java | 2 +- 3 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Brush.java rename modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/{weather => }/ProgressFuelGauge.java (69%) diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Brush.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Brush.java new file mode 100644 index 0000000..b810c31 --- /dev/null +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/Brush.java @@ -0,0 +1,41 @@ +package org.nanoboot.utils.timecalc.swing.common; + +import org.nanoboot.utils.timecalc.entity.Visibility; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; + +/** + * @author pc00289 + * @since 27.03.2024 + */ +public class Brush { + private final Graphics2D brush; + + public Brush (Graphics2D graphics2D) { + this.brush = graphics2D; + } + public void drawOval(int centreX, int centreY, int width, int height) { + brush.drawOval((int) (centreX - width / 2d), (int) (centreY - height / 2d), width, height); + } + public void drawArc(int centreX, int centreY, int width, int height, int startAngle, int angle) { + brush.drawArc((int) (centreX - width / 2d), (int) (centreY - height / 2d), width, height, startAngle + 90, angle); + } + public void drawBorder(int centreX, int centreY, int length, int startLength, int angle, + float stroke, Color color) { + double angleRadian = Math.PI * 2 * ((angle - 90d) / 360d); + Color currentColor = brush.getColor(); + brush.setColor(color); + int startX + = (int) (centreX + startLength * Math.cos(angleRadian)); + int startY + = (int) (centreY + startLength * Math.sin(angleRadian)); + int endX = (int) (centreX + (startLength + length) * Math.cos(angleRadian)); + int endY = (int) (centreY + (startLength + length) * Math.sin(angleRadian)); + + brush.setStroke(new BasicStroke(stroke)); + brush.drawLine(startX, startY, endX, endY); + brush.setColor(currentColor); + } +} diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/ProgressFuelGauge.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressFuelGauge.java similarity index 69% rename from modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/ProgressFuelGauge.java rename to modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressFuelGauge.java index 1dd944c..009ebb0 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/weather/ProgressFuelGauge.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/progress/ProgressFuelGauge.java @@ -1,10 +1,12 @@ -package org.nanoboot.utils.timecalc.swing.progress.weather; +package org.nanoboot.utils.timecalc.swing.progress; import org.nanoboot.utils.timecalc.app.GetProperty; import org.nanoboot.utils.timecalc.entity.Visibility; import org.nanoboot.utils.timecalc.entity.WidgetType; +import org.nanoboot.utils.timecalc.swing.common.Brush; import org.nanoboot.utils.timecalc.swing.common.SwingUtils; import org.nanoboot.utils.timecalc.swing.common.Widget; +import org.nanoboot.utils.timecalc.swing.progress.battery.Battery; import org.nanoboot.utils.timecalc.swing.windows.MainWindow; import org.nanoboot.utils.timecalc.utils.common.NumberFormats; import org.nanoboot.utils.timecalc.utils.property.Property; @@ -20,6 +22,7 @@ import java.awt.RenderingHints; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.function.Function; /** * @author Robert Vokac @@ -27,7 +30,7 @@ import java.util.Locale; */ public class ProgressFuelGauge extends Widget implements GetProperty { - public static final Color BLACK2 = new Color(32, 32, 32); + public static final Color BLACK2 = new Color(64, 64,64); public static final Color LIGHT_GRAY2 = new Color(160,160,160); private List menuItems = null; @@ -82,7 +85,6 @@ public class ProgressFuelGauge extends Widget implements GetProperty { ); brush.setColor(Color.WHITE); - int startX = getWidth() / 2; int startY = getHeight() - (ovalWidth / 2); int length = (int) (ovalWidth * 1.5d); @@ -103,9 +105,14 @@ public class ProgressFuelGauge extends Widget implements GetProperty { ((Graphics2D)brush).setStroke(new BasicStroke(1f)); int length_ = (int) (ovalWidth * 1.5d); //brush.drawOval(startX - length_, startY - length_, (int)(length_ * 2d), (int)(length_ * 2d)); - brush.drawArc(startX - length_, startY - length_ - 2, (int)(length_ * 2d), (int)(length_ * 2d), 180 + 45, 180 + 45 + 90); - brush.drawArc(startX - length_, startY - length_ + 6, (int)(length_ * 2d), (int)(length_ * 2d), 180 + 45, 180 + 45 + 90); + //brush.drawArc(startX - length_, startY - length_ - 2, (int)(length_ * 2d), (int)(length_ * 2d), 180 + 45, 180 + 45 + 90); + //brush.drawArc(startX - length_, startY - length_ + 6, (int)(length_ * 2d), (int)(length_ * 2d), 180 + 45, 180 + 45 + 90); + Brush tBrush = new Brush((Graphics2D) brush); +// tBrush.drawOval(startX, startY, length_ * 2, length_ * 2); +// tBrush.drawOval(startX, startY + 8, length_ * 2, length_ * 2); + tBrush.drawArc(startX, startY - 1 , length_ * 2, length_ * 2, -45, 90); + tBrush.drawArc(startX, startY + 5, length_ * 2, length_ * 2, -40, 80); brush.setColor(visibility.isStronglyColored() ? Color.BLACK : visibility.isWeaklyColored() ? Color.GRAY : Color.LIGHT_GRAY); @@ -116,6 +123,23 @@ public class ProgressFuelGauge extends Widget implements GetProperty { width_, width_ ); + brush.setColor(Color.WHITE); + + Function getAngle = (d -> (int)(-45 + 90 * d)); + brush.setColor(visibility.isStronglyColored() ? Color.RED : (visibility.isWeaklyColored() ? + Battery.ULTRA_LIGHT_RED : Color.GRAY)); + ((Graphics2D) brush).setStroke(new BasicStroke(6.5f)); + tBrush.drawArc(startX, startY + 2, length_ * 2, length_ * 2, + (int) (45d / 10d * 7.5d), + (int) (90d / 4d / 5d * 1.7d)); + brush.setColor(Color.WHITE); + tBrush.drawBorder(startX, startY, 5, length_ - 4, getAngle.apply(0.25d / 5d * 3d), 2f, brush.getColor()); + tBrush.drawBorder(startX, startY, 5, length_ - 4, getAngle.apply(0.25d), 2f, brush.getColor()); + tBrush.drawBorder(startX, startY, 6, length_ - 7, getAngle.apply(0.5d), 7f, brush.getColor()); + tBrush.drawBorder(startX, startY, 5, length_ - 4, getAngle.apply(0.75d), 2f, brush.getColor()); + tBrush.drawBorder(startX, startY, 6, length_ - 7, getAngle.apply(1d), 7f, brush.getColor()); + + //tBrush.drawBorder(startX, startY, 10, length_ - 4 - 5, getAngle.apply(donePercent()), 3f, brush.getColor()); this.setToolTipText(NumberFormats.FORMATTER_TWO_DECIMAL_PLACES.format(donePercent() * 100d) + "%"); } diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java index bfa8c17..e2b6679 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/windows/MainWindow.java @@ -37,7 +37,7 @@ import org.nanoboot.utils.timecalc.swing.progress.ProgressLife; import org.nanoboot.utils.timecalc.swing.progress.ProgressMoney; import org.nanoboot.utils.timecalc.swing.progress.ProgressSquare; import org.nanoboot.utils.timecalc.swing.progress.ProgressSwing; -import org.nanoboot.utils.timecalc.swing.progress.weather.ProgressFuelGauge; +import org.nanoboot.utils.timecalc.swing.progress.ProgressFuelGauge; import org.nanoboot.utils.timecalc.swing.progress.weather.ProgressWeather; import org.nanoboot.utils.timecalc.swing.progress.Time; import org.nanoboot.utils.timecalc.swing.progress.WalkingHumanProgress;