diff --git a/CHANGELOG.md b/CHANGELOG.md index 79bff3b0..504554ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +## 1.0.2 + +**Features** + +- Support for Multiple Needle Pointers +- Support for Multiple Shape Pointers +- Interactivity for Needle Pointers in `RadialGauge` +- Interactivity for Shape Pointers in `RadialGauge` + +**Fixes** + +- More control over positioning `RadialGauge` +- Refactored `RadialGauge` +- More control over styling of `NeedlePointer` + ## 1.0.1 **Fixes** diff --git a/README.md b/README.md index e189e2ac..73cfe930 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ To fully explore the capabilities of our Linear Gauge, we recommend checking out ## Table of contents - [Getting Started](#getting-started) -- [Linear Gauge Features](#customization) +- [Linear Gauge](#linear-gauge) - [Orientation](#gauge-orientation) - [Ruler Style](#rulerStyle) @@ -41,7 +41,13 @@ To fully explore the capabilities of our Linear Gauge, we recommend checking out - [Animation](#animation) - [Interactivity](#interactivity) -- [Radial Gauge](#radial-gauge-pre-release) +- [Radial Gauge](#radial-gauge) + + - [Position](#position) + - [Needle Pointer](#needle-pointer) + - [Shape Pointer](#shape-pointer) + - [Radial Value Bar](#radial-value-bar) + - [Interactivity](#interactivity-radial) - [Demo Application](#demo-application) - [Credits](#credits) @@ -88,7 +94,7 @@ class _MyGaugeExampleState extends State { } ``` -## Customization +## Linear Gauge ### **Gauge Orientation**: @@ -145,19 +151,65 @@ The `Pointer` is interactive , it responds to user horizontal & vertical drag.

animations gif

-### **Radial Gauge (PRE-RELEASE)** +## **Radial Gauge** A `Radial Gauge` is a graphical representation used to visualize and display a value within a circular format. It consists of several components, including a radial track, a needle pointer, and a value bar. The radial track represents the range or scale of values that the gauge can display, with the ability for users to set the start and end points of the track. -Customization: -RadialTrack -The `RadialTrack` widget is used to create a radial track component for the radial gauge in Flutter. It provides a customizable visual representation of the scale or range of values on the gauge. With this you can change properties like startAngle endAngle radiusFactor and much more -Needle Pointer -The `NeedlePointer` widget allows you to create a Needle Pointer and Customize it -RadialValueBar -The `RadialValueBar` is used within the RadialGauge to represent a value on the gauge using a horizontal bar. It provides a visual indication of the current value within the range of the radial track. - -radial png radial png radial png -radial png radial png radial png + +### **Position**: + +#### **Angles** + +The RadialGauge can be easily laid out at different angles around its center. You have the freedom to specify the starting and ending angles, defining the arc over which the gauge will be displayed. This feature is particularly useful when you want to display multiple gauges side by side or need to emphasize a specific range on the gauge. + +Default **`startAngle`** : -30° + +Default **`endAngle`**`: 210° + +

animations gif

+ +#### **Radii Customization** + +`radiusFactor` can be used to size the adjust the scaling factor of the radius and change the radius of the gauge accordingly. + +#### **X and Y Coordinates** + +To precisely position the RadialGauge on your canvas or user interface, you can set the x and y coordinates of its center. This way, you can easily integrate the gauge into your existing layout or place it at specific locations as per your application's design requirements. + +By combining these layout options, you can create stunning and interactive radial gauges that effectively present data to your users, whether it's for monitoring, analytics, or any other visualization needs. + +Default **`xCoordinate`** : 0.5 + +Default **`yCoordinate`**`: 0.5 + +

animations gif

+ +# Needle Pointer + +The NeedlePointer is a powerful component that enables you to create and customize Needle Pointers for your gauges. With this widget, you have the flexibility to design multiple Needle Pointers and adjust their styles using the **`gaugeNeedle`** and **`plainneedle`** enums. + +

animations gif

+ +# Shape Pointer + +The RadialShapePointer allows you to add Shape Pointer to your Gauge.The shape can be customized using properties such as color, width and height. + +> Currently, Only Circle Shape is supported + +

animations gif

+ +# Radial Value Bar + +The RadialValueBar is a crucial component used within the RadialGauge to visually represent a specific value on the gauge using a bar. This bar provides users with a clear and intuitive indication of the current value within the defined range of the radial track. + +

animations gif

+ +# Interactivity Radial + +In the Radial Gauge, the `NeedlePointer` and `RadialShapePointer` can be set to interactive, making them respond to user's horizontal and vertical drag. + +

animations gif

+ +

animations gif

## License diff --git a/example/lib/main.dart b/example/lib/main.dart index 56ff157c..cb40c6d9 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,4 +1,3 @@ -import 'package:example/valuebar_position.dart'; import 'package:flutter/material.dart'; import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; @@ -6,53 +5,37 @@ void main() { runApp( const MaterialApp( debugShowCheckedModeBanner: false, - home: MyValueBarPosition(), + home: RadialGaugeExample(), ), ); } -class MyGaugeExample extends StatefulWidget { - const MyGaugeExample({Key? key}) : super(key: key); +/// +/// The following code is a Simple Example of [LinearGauge] Widget. +/// You can customize the [LinearGauge] Widget as per your need. +/// +class LinearGaugeExample extends StatefulWidget { + const LinearGaugeExample({Key? key}) : super(key: key); @override - State createState() => _MyGaugeExampleState(); + State createState() => _LinearGaugeExampleState(); } -class _MyGaugeExampleState extends State { - double value = 50; - bool inverseRulers = false; - +class _LinearGaugeExampleState extends State { @override Widget build(BuildContext context) { return Scaffold( body: Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - ElevatedButton( - onPressed: () { - inverseRulers = !inverseRulers; - setState(() {}); - }, - child: const Text("Inverse Rulers")), - Container( - color: Colors.pink.withOpacity(0.1), - child: LinearGauge( - gaugeOrientation: GaugeOrientation.horizontal, - valueBar: [ - ValueBar( - value: value, - offset: 20, - position: ValueBarPosition.top, - ) - ], - enableGaugeAnimation: true, - rulers: RulerStyle( - rulerPosition: RulerPosition.bottom, - inverseRulers: inverseRulers, - showLabel: inverseRulers, - ), - ), + child: LinearGauge( + gaugeOrientation: GaugeOrientation.horizontal, + enableGaugeAnimation: true, + rulers: RulerStyle( + rulerPosition: RulerPosition.bottom, + ), + pointers: const [ + Pointer( + value: 50, + shape: PointerShape.circle, ), ], ), @@ -60,3 +43,43 @@ class _MyGaugeExampleState extends State { ); } } + +/// +/// The following code is a Simple Example of [RadialGauge] Widget. +/// You can customize the [RadialGauge] Widget as per your need. +/// + +class RadialGaugeExample extends StatefulWidget { + const RadialGaugeExample({super.key}); + + @override + State createState() => _RadialGaugeExampleState(); +} + +class _RadialGaugeExampleState extends State { + @override + Widget build(BuildContext context) { + return const Scaffold( + backgroundColor: Colors.white, + body: RadialGauge( + track: RadialTrack( + color: Colors.grey, + start: 0, + end: 100, + trackStyle: TrackStyle( + showLastLabel: false, + secondaryRulerColor: Colors.grey, + secondaryRulerPerInterval: 3)), + needlePointer: [ + NeedlePointer( + value: 30, + color: Colors.red, + tailColor: Colors.black, + tailRadius: 0, + needleStyle: NeedleStyle.flatNeedle, + ), + ], + ), + ); + } +} diff --git a/example/pubspec.lock b/example/pubspec.lock index ba7afa3a..0e91abcf 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" url: "https://pub.dev" source: hosted - version: "2.10.0" + version: "2.11.0" boolean_selector: dependency: transitive description: @@ -21,10 +21,10 @@ packages: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" clock: dependency: transitive description: @@ -37,10 +37,10 @@ packages: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" url: "https://pub.dev" source: hosted - version: "1.17.0" + version: "1.17.1" cupertino_icons: dependency: "direct main" description: @@ -81,15 +81,15 @@ packages: path: ".." relative: true source: path - version: "1.0.1" + version: "1.0.2" js: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.6.5" + version: "0.6.7" lints: dependency: transitive description: @@ -102,10 +102,10 @@ packages: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" url: "https://pub.dev" source: hosted - version: "0.12.13" + version: "0.12.15" material_color_utilities: dependency: transitive description: @@ -118,18 +118,18 @@ packages: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" sky_engine: dependency: transitive description: flutter @@ -179,10 +179,10 @@ packages: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.5.1" vector_math: dependency: transitive description: @@ -192,5 +192,5 @@ packages: source: hosted version: "2.1.4" sdks: - dart: ">=2.18.0 <3.0.0" + dart: ">=3.0.0-0 <4.0.0" flutter: ">=1.17.0" diff --git a/example/screens/needle-interactive.gif b/example/screens/needle-interactive.gif new file mode 100644 index 00000000..6ccd3e5c Binary files /dev/null and b/example/screens/needle-interactive.gif differ diff --git a/example/screens/radial-angles.png b/example/screens/radial-angles.png new file mode 100644 index 00000000..2965f229 Binary files /dev/null and b/example/screens/radial-angles.png differ diff --git a/example/screens/radial-coordinates.gif b/example/screens/radial-coordinates.gif new file mode 100644 index 00000000..0188a30e Binary files /dev/null and b/example/screens/radial-coordinates.gif differ diff --git a/example/screens/radial-needle.png b/example/screens/radial-needle.png new file mode 100644 index 00000000..5b55cc9e Binary files /dev/null and b/example/screens/radial-needle.png differ diff --git a/example/screens/radial-pointer.png b/example/screens/radial-pointer.png new file mode 100644 index 00000000..b2ee244a Binary files /dev/null and b/example/screens/radial-pointer.png differ diff --git a/example/screens/radial-valueBar.png b/example/screens/radial-valueBar.png new file mode 100644 index 00000000..78646b3e Binary files /dev/null and b/example/screens/radial-valueBar.png differ diff --git a/example/screens/shape-interactive.gif b/example/screens/shape-interactive.gif new file mode 100644 index 00000000..eb4fa3be Binary files /dev/null and b/example/screens/shape-interactive.gif differ diff --git a/lib/geekyants_flutter_gauges.dart b/lib/geekyants_flutter_gauges.dart index 5c8dffc5..9a24c748 100644 --- a/lib/geekyants_flutter_gauges.dart +++ b/lib/geekyants_flutter_gauges.dart @@ -34,4 +34,5 @@ export './src/radial_gauge/radial_gauge.dart'; export './src/radial_gauge/radial_track.dart'; export 'src/radial_gauge/pointer/needle_pointer.dart'; export 'src/radial_gauge/valuebar/radial_value_bar.dart'; -export 'src/radial_gauge/shape_pointer/radial_shape_pointer.dart'; +export 'src/radial_gauge/pointer/radial_shape_pointer.dart'; +export 'src/radial_gauge/pointer/radial_widget_pointer.dart'; diff --git a/lib/src/linear_gauge/linear_gauge_painter.dart b/lib/src/linear_gauge/linear_gauge_painter.dart index e0a468af..3058d880 100644 --- a/lib/src/linear_gauge/linear_gauge_painter.dart +++ b/lib/src/linear_gauge/linear_gauge_painter.dart @@ -1,6 +1,5 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/rendering.dart'; -// ignore: implementation_imports import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; import 'package:geekyants_flutter_gauges/src/linear_gauge/curve/custom_curve_painter.dart'; import 'dart:math' as math; @@ -2232,3 +2231,5 @@ class LinearGaugeParentData extends MultiChildLayoutParentData { this.gaugeEnd, this.linearGaugeLabel); } + +// class Temp implements MouseTrackerAnnotation {} diff --git a/lib/src/radial_gauge/pointer/needle_pointer.dart b/lib/src/radial_gauge/pointer/needle_pointer.dart index f8216d69..1dee3039 100644 --- a/lib/src/radial_gauge/pointer/needle_pointer.dart +++ b/lib/src/radial_gauge/pointer/needle_pointer.dart @@ -37,13 +37,16 @@ class NeedlePointer extends LeafRenderObjectWidget { this.gradient, this.color = Colors.red, this.tailColor = Colors.red, - this.needleWidth = 10, + this.needleWidth = 30, this.needleHeight = 300, + this.onChanged, + this.isInteractive = false, this.needleStyle = NeedleStyle.gaugeNeedle, this.tailRadius = 80}) : super(key: key); final double value; + final bool isInteractive; final Color color; final double needleHeight; final double needleWidth; @@ -51,6 +54,7 @@ class NeedlePointer extends LeafRenderObjectWidget { final LinearGradient? gradient; final Color tailColor; final NeedleStyle needleStyle; + final ValueChanged? onChanged; @override RenderObject createRenderObject(BuildContext context) { @@ -62,8 +66,10 @@ class NeedlePointer extends LeafRenderObjectWidget { value: value, tailColor: tailColor, needleStyle: needleStyle, + isInteractive: isInteractive, color: color, needleHeight: needleHeight, + onChanged: onChanged, needleWidth: needleWidth, tailRadius: tailRadius, ); @@ -76,10 +82,12 @@ class NeedlePointer extends LeafRenderObjectWidget { renderObject ..setValue = value ..setColor = color + ..setIsInteractive = isInteractive ..setTailColor = tailColor ..setGradient = gradient ?? LinearGradient(colors: [color, color]) ..setNeedleHeight = needleHeight ..setTailRadius = tailRadius + ..onChanged = onChanged ..setNeedleStyle = needleStyle ..setNeedleWidth = needleWidth ..setRadialGauge = scope.rGauge; diff --git a/lib/src/radial_gauge/pointer/needle_pointer_painter.dart b/lib/src/radial_gauge/pointer/needle_pointer_painter.dart index 84d4d7b7..e3f4849d 100644 --- a/lib/src/radial_gauge/pointer/needle_pointer_painter.dart +++ b/lib/src/radial_gauge/pointer/needle_pointer_painter.dart @@ -1,4 +1,5 @@ import 'dart:math'; +import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import '../../../geekyants_flutter_gauges.dart'; @@ -8,10 +9,12 @@ class RenderNeedlePointer extends RenderBox { required double value, required Color color, required RadialGauge radialGauge, + required ValueChanged? onChanged, required double needleHeight, required double tailRadius, required double needleWidth, required NeedleStyle needleStyle, + required bool isInteractive, required Color tailColor, required LinearGradient gradient, @@ -20,10 +23,12 @@ class RenderNeedlePointer extends RenderBox { _color = color, _radialGauge = radialGauge, _gradient = gradient, + _onChanged = onChanged, _needleHeight = needleHeight, _tailRadius = tailRadius, _tailColor = tailColor, _needleStyle = needleStyle, + _isInteractive = isInteractive, _needleWidth = needleWidth, super(); @@ -33,22 +38,53 @@ class RenderNeedlePointer extends RenderBox { if (_gradient == gradient) return; _gradient = gradient; markNeedsPaint(); + markNeedsLayout(); } + ValueChanged? get onChanged => _onChanged; + ValueChanged? _onChanged; + set onChanged(ValueChanged? value) { + if (value == _onChanged) { + return; + } + _onChanged = value; + markNeedsPaint(); + markNeedsLayout(); + } + + //getter and setter for value + RadialGauge get getRadialGauge => _radialGauge!; RadialGauge? _radialGauge; set setRadialGauge(RadialGauge radialGauge) { if (_radialGauge == radialGauge) return; _radialGauge = radialGauge; markNeedsPaint(); + markNeedsLayout(); } + // Sets the Interaction for [RenderNeedlePointer]. + set setIsInteractive(bool value) { + if (value == _isInteractive) { + return; + } + + _isInteractive = value; + markNeedsPaint(); + markNeedsLayout(); + } + + // Gets the Interaction assigned to [RenderNeedlePointer]. + bool get isInteractive => _isInteractive; + bool _isInteractive; + NeedleStyle get getNeedleStyle => _needleStyle; NeedleStyle _needleStyle; set setNeedleStyle(NeedleStyle needleStyle) { if (_needleStyle == needleStyle) return; _needleStyle = needleStyle; markNeedsPaint(); + markNeedsLayout(); } double get getValue => _value; @@ -57,6 +93,7 @@ class RenderNeedlePointer extends RenderBox { if (_value == value) return; _value = value; markNeedsPaint(); + markNeedsLayout(); } double get getNeedleWidth => _needleWidth; @@ -65,6 +102,7 @@ class RenderNeedlePointer extends RenderBox { if (_needleWidth == needleWidth) return; _needleWidth = needleWidth; markNeedsPaint(); + markNeedsLayout(); } double get getTailRadius => _tailRadius; @@ -73,6 +111,7 @@ class RenderNeedlePointer extends RenderBox { if (_tailRadius == tailRadius) return; _tailRadius = tailRadius; markNeedsPaint(); + markNeedsLayout(); } double get getNeedleHeight => _needleHeight; @@ -81,6 +120,7 @@ class RenderNeedlePointer extends RenderBox { if (_needleHeight == needleHeight) return; _needleHeight = needleHeight; markNeedsPaint(); + markNeedsLayout(); } Color get getTailColor => _tailColor; @@ -89,6 +129,7 @@ class RenderNeedlePointer extends RenderBox { if (_tailColor == tailColor) return; _tailColor = tailColor; markNeedsPaint(); + markNeedsLayout(); } Color get getColor => _color; @@ -97,27 +138,34 @@ class RenderNeedlePointer extends RenderBox { if (_color == color) return; _color = color; markNeedsPaint(); + markNeedsLayout(); } @override - bool hitTest(BoxHitTestResult result, {required Offset position}) { - return false; - } - - @override - Size computeDryLayout(BoxConstraints constraints) { - return constraints.constrain(constraints.biggest); + bool hitTestSelf(Offset position) { + Offset calulatedPosition = localToGlobal(position); + if (needlePointerRect.contains(calulatedPosition)) { + return true; + } else { + return false; + } + // Return false if the position is outside the needlePointerRect } @override void performLayout() { - size = computeDryLayout(constraints); + // size = Size(_needleWidth + _tailRadius, _needleHeight); + size = Size(constraints.maxWidth, constraints.maxHeight); } + late Path needlePointerRect; + @override void paint(PaintingContext context, Offset offset) { final canvas = context.canvas; - final center = offset; + offset = Offset(size.width * getRadialGauge.xCenterCoordinate + offset.dx, + size.height * getRadialGauge.yCenterCoordinate + offset.dy); + final center = Offset(offset.dx + _needleWidth, offset.dy + _needleHeight); Rect circle = Rect.fromLTWH(offset.dx - getTailRadius / 2, offset.dy - getTailRadius / 2, _tailRadius, _tailRadius); @@ -134,16 +182,19 @@ class RenderNeedlePointer extends RenderBox { double startAngle = (_radialGauge!.track.startAngle - 180) * (pi / 180); double endAngle = (_radialGauge!.track.endAngle - 180) * (pi / 180); - final maxH = size.shortestSide / 2 * getRadialGauge.radiusFactor; + final maxH = size.shortestSide / 2 * getRadialGauge.radiusFactor - + 2 * getRadialGauge.track.thickness; - final double needleMultiplier = _needleHeight.clamp(0, maxH - 40); + final double needleMultiplier = _needleHeight.clamp(0, maxH); final double angle = startAngle + (value / 100) * (endAngle - startAngle); - double needleEndX = center.dx + needleMultiplier * cos(angle); - double needleEndY = center.dy + needleMultiplier * sin(angle); - double needleStartX = center.dx; - double needleStartY = center.dy; + double needleEndX = + center.dx + needleMultiplier * cos(angle) - _needleWidth; + double needleEndY = + center.dy + needleMultiplier * sin(angle) - _needleHeight; + double needleStartX = center.dx - _needleWidth; + double needleStartY = center.dy - _needleHeight; final needlePaint = Paint() ..color = _color @@ -163,17 +214,19 @@ class RenderNeedlePointer extends RenderBox { needlePath.lineTo(needleStartX + getTailRadius / 2 * cos(angle - pi / 2), needleStartY - (getTailRadius / 2) * sin(angle + pi / 2)); - double temp1 = 30; - needlePath.moveTo(offset.dx + temp1 * cos(angle + pi / 2), - offset.dy - temp1 * sin(angle - pi / 2)); - needlePath.lineTo(needleStartX + temp1 * cos(angle - pi / 2), - needleStartY - (temp1) * sin(angle + pi / 2)); + double needleWidth = _needleWidth; + needlePath.moveTo(offset.dx + needleWidth * cos(angle + pi / 2), + offset.dy - needleWidth * sin(angle - pi / 2)); + needlePath.lineTo(needleStartX + needleWidth * cos(angle - pi / 2), + needleStartY - (needleWidth) * sin(angle + pi / 2)); needlePath.lineTo(needleEndX, needleEndY); // Offset c = Offset(offset.dx, offset.dy - getTailRadius); // canvas.drawCircle(c, 100, Paint()..color = Colors.black); needlePath.close(); + needlePointerRect = needlePath; + // canvas.drawPath(needlePath, Paint()..color = Colors.green); // Needle Pointer paint if (getNeedleStyle == NeedleStyle.gaugeNeedle) { canvas.drawPath(needlePath, needlePaint); @@ -182,6 +235,7 @@ class RenderNeedlePointer extends RenderBox { // Simple Needle canvas.drawLine(Offset(needleStartX, needleStartY), Offset(needleEndX, needleEndY), needlePaint); + canvas.drawPath(circlePath, Paint()..color = _tailColor); } } @@ -191,3 +245,26 @@ class RenderNeedlePointer extends RenderBox { return newValue; } } + +// @override +// void applyPaintTransform(RenderBox child, Matrix4 transform) { +// if (child is RenderNeedlePointer) { +// final centerX = size.width / 2; +// final centerY = size.height / 2; + +// transform.translate(centerX, centerY); +// double value = calculateValueAngle( +// child.getValue, getRadialGauge.track.start, getRadialGauge.track.end); +// double startAngle = (getRadialGauge.track.startAngle - 180) * (pi / 180); +// double endAngle = (getRadialGauge.track.endAngle - 180) * (pi / 180); +// double angle = startAngle + (value / 100) * (endAngle - startAngle); +// double toRotateAngle = angle - (pi / 2); +// transform.rotateZ(toRotateAngle); // Specify the rotation in radians +// transform.translate( +// -centerX - child.getNeedleWidth / 2 - child.getTailRadius / 2, +// -centerY - child.getNeedleHeight + child.getTailRadius / 2); + +// super.applyPaintTransform(child, transform); +// markNeedsLayout(); +// } +// } diff --git a/lib/src/radial_gauge/pointer/radial_shape_pointer.dart b/lib/src/radial_gauge/pointer/radial_shape_pointer.dart new file mode 100644 index 00000000..75bc510b --- /dev/null +++ b/lib/src/radial_gauge/pointer/radial_shape_pointer.dart @@ -0,0 +1,116 @@ +import 'package:flutter/material.dart'; +import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/pointer/radial_shape_pointer_painter.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_state.dart'; + +/// +/// [RadialShapePointer] is used to render the shape pointer in the [RadialGauge]. +/// +/// Currently Only Supports Circle Shape Pointers. +/// +/// ```dart +///RadialGauge( +/// track: const RadialTrack(start: 0, end: 100), +/// shapePointer: [ +/// RadialShapePointer( +/// value: value, +/// color: Colors.pink, +/// height: 20, +/// width: 20, +/// ), +/// ], +/// ), +/// ``` +/// + +class RadialShapePointer extends LeafRenderObjectWidget { + /// [RadialShapePointer] is used to render the shape pointer in the [RadialGauge]. + /// + /// Currently Only Supports Circle Shape Pointers. + /// More Shapes to be added soon! + const RadialShapePointer({ + super.key, + required this.value, + this.color = Colors.red, + this.height = 10, + this.width = 10, + this.onChanged, + this.isInteractive = false, + this.shape = PointerShape.triangle, + }); + + /// + /// `value` sets the value of the [RadialShapePointer] on the [RadialGauge] + /// + final double value; + + /// + /// `color` sets the color of the [RadialShapePointer] on the [RadialGauge] + /// + final Color color; + + /// + /// `isInteractive` specifies whether to enable the interaction for the pointers. + /// + /// Defaults to false. + final bool isInteractive; + + /// + /// `onChanged` is a callback function that will be invoked when a `pointer` + /// value is changed. + /// + final ValueChanged? onChanged; + + /// + /// `height` sets the height of the [RadialShapePointer] on the [RadialGauge] + /// + /// Defaults to 10. + /// + final double height; + + /// + /// `width` sets the width of the [RadialShapePointer] on the [RadialGauge] + /// + /// Defaults to 10. + /// + final double width; + + /// + /// `shape` sets the shape of the [RadialShapePointer] on the [RadialGauge] + /// Defaults to [PointerShape.circle] + /// + /// Currently Only Supports Circle Shape Pointers. + /// + final PointerShape shape; + + @override + RenderObject createRenderObject(BuildContext context) { + final RadialGaugeState scope = RadialGaugeState.of(context); + + return RenderRadialShapePointer( + value: value, + color: color, + height: height, + width: width, + isInteractive: isInteractive, + onChanged: onChanged, + shape: shape, + radialGauge: scope.rGauge, + ); + } + + @override + void updateRenderObject( + BuildContext context, RenderRadialShapePointer renderObject) { + final RadialGaugeState scope = RadialGaugeState.of(context); + renderObject + ..setValue = value + ..setRadialGauge = scope.rGauge + ..setColor = color + ..setHeight = height + ..setWidth = width + ..onChanged = onChanged + ..setIsInteractive = isInteractive + ..setShape = shape; + } +} diff --git a/lib/src/radial_gauge/shape_pointer/radial_shape_pointer.dart b/lib/src/radial_gauge/pointer/radial_shape_pointer_painter.dart similarity index 65% rename from lib/src/radial_gauge/shape_pointer/radial_shape_pointer.dart rename to lib/src/radial_gauge/pointer/radial_shape_pointer_painter.dart index 2e77a685..8e2d94c5 100644 --- a/lib/src/radial_gauge/shape_pointer/radial_shape_pointer.dart +++ b/lib/src/radial_gauge/pointer/radial_shape_pointer_painter.dart @@ -1,67 +1,24 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; -import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_state.dart'; - -/// [RadialShapePointer] is used to render the shape pointer in the [RadialGauge]. - -class RadialShapePointer extends LeafRenderObjectWidget { - /// [RadialShapePointer] is used to render the shape pointer in the [RadialGauge]. - const RadialShapePointer({ - super.key, - required this.value, - this.color = Colors.red, - this.height = 10, - this.width = 10, - this.shape = PointerShape.triangle, - }); - - final double value; - final Color color; - final double height; - final double width; - final PointerShape shape; - @override - RenderObject createRenderObject(BuildContext context) { - final RadialGaugeState scope = RadialGaugeState.of(context); - - return RenderRadialShapePointer( - value: value, - color: color, - height: height, - width: width, - shape: shape, - radialGauge: scope.rGauge, - ); - } - - @override - void updateRenderObject( - BuildContext context, RenderRadialShapePointer renderObject) { - final RadialGaugeState scope = RadialGaugeState.of(context); - renderObject - ..setValue = value - ..setRadialGauge = scope.rGauge - ..setColor = color - ..setHeight = height - ..setWidth = width - ..setShape = shape; - } -} +import '../../../geekyants_flutter_gauges.dart'; class RenderRadialShapePointer extends RenderBox { RenderRadialShapePointer({ required double value, required Color color, required double height, + required ValueChanged? onChanged, required double width, + required bool isInteractive, required PointerShape shape, required RadialGauge radialGauge, }) : _value = value, _color = color, _height = height, + _onChanged = onChanged, + _isInteractive = isInteractive, _width = width, _shape = shape, _radialGauge = radialGauge; @@ -79,15 +36,44 @@ class RenderRadialShapePointer extends RenderBox { } @override - bool hitTestSelf(Offset position) { - return true; + void performLayout() { + size = Size(constraints.maxWidth, constraints.maxHeight); } @override - void performLayout() { - size = Size(constraints.maxWidth, constraints.maxHeight); + bool hitTestSelf(Offset position) { + Offset calculatedPosition = localToGlobal(position); + + if (pointerRect.contains(calculatedPosition)) { + return true; + } else { + return false; + } + } + + ValueChanged? get onChanged => _onChanged; + ValueChanged? _onChanged; + set onChanged(ValueChanged? value) { + if (value == _onChanged) { + return; + } + _onChanged = value; } + // Sets the Interaction for [RenderNeedlePointer]. + set setIsInteractive(bool value) { + if (value == _isInteractive) { + return; + } + + _isInteractive = value; + markNeedsPaint(); + } + + // Gets the Interaction assigned to [RenderNeedlePointer]. + bool get isInteractive => _isInteractive; + bool _isInteractive; + set setValue(double value) { if (_value == value) { return; @@ -136,14 +122,20 @@ class RenderRadialShapePointer extends RenderBox { markNeedsPaint(); } + late Rect pointerRect; + @override void paint(PaintingContext context, Offset offset) { final canvas = context.canvas; double gaugeStart = _radialGauge.track.start; double gaugeEnd = _radialGauge.track.end; + // final center = Offset(offset.dx, offset.dy); + + final center = Offset( + size.width * _radialGauge.xCenterCoordinate + offset.dx, + size.height * _radialGauge.yCenterCoordinate + offset.dy); - final center = offset; double value = calculateValueAngle(_value, gaugeStart, gaugeEnd); double startAngle = (_radialGauge.track.startAngle - 180) * (pi / 180); double endAngle = (_radialGauge.track.endAngle - 180) * (pi / 180); @@ -153,15 +145,22 @@ class RenderRadialShapePointer extends RenderBox { double needleLength = 30; double needleWidth = 10; final pointerPath = Path(); + // double pointerOffset = 430 + 0; double pointerOffset = (size.shortestSide / 2 - _radialGauge.track.thickness) * _radialGauge.radiusFactor; - // needleEndY = center.dy + 250 * sin(angle); + + double circlePointerOffset = + (size.shortestSide / 2 - _radialGauge.track.thickness) * + _radialGauge.radiusFactor; + double pointerEndX = center.dx + pointerOffset * cos(angle); double pointerEndY = center.dy + pointerOffset * sin(angle); - // needleEndX = center.dx + 250 * cos(angle); - // // needleEndX = center.dx + getTailRadius / 2 + needleMultiplier * cos(angle); + + double circlePointerEndX = center.dx + circlePointerOffset * cos(angle); + double circlePointerEndY = center.dy + circlePointerOffset * sin(angle); + pointerPath.moveTo(pointerEndX, pointerEndY); pointerPath.lineTo( pointerEndX - needleWidth * cos(angle + pi / 2), @@ -177,9 +176,13 @@ class RenderRadialShapePointer extends RenderBox { ); pointerPath.close(); - canvas.drawCircle( - Offset(pointerEndX, pointerEndY), _width, Paint()..color = _color); - // canvas.drawPath(pointerPath, Paint()..color = Colors.red); + pointerRect = Rect.fromCircle( + center: Offset(pointerEndX, pointerEndY), radius: _width); + + // canvas.drawRect(pointerRect, Paint()..color = _color); + canvas.drawCircle(Offset(circlePointerEndX, circlePointerEndY), _width, + Paint()..color = _color); + // canvas.drawPath(pointerPath, Paint()..color = _color); } double calculateValueAngle(double value, double gaugeStart, double gaugeEnd) { diff --git a/lib/src/radial_gauge/pointer/radial_widget_painter.dart b/lib/src/radial_gauge/pointer/radial_widget_painter.dart new file mode 100644 index 00000000..fd14135e --- /dev/null +++ b/lib/src/radial_gauge/pointer/radial_widget_painter.dart @@ -0,0 +1,99 @@ +import 'dart:math'; +import 'package:flutter/rendering.dart'; +import '../../../geekyants_flutter_gauges.dart'; + +class RenderRadialWidgetPointer extends RenderProxyBox { + RenderRadialWidgetPointer({ + Key? key, + required double value, + required RadialGauge radialGauge, + required bool isInteractive, + required ValueChanged? onChanged, + }) : _value = value, + _radialGauge = radialGauge, + _isInteractive = isInteractive, + _onChanged = onChanged; + + /// Gets the value to [RadialWidgetPointer]. + double get value => _value; + double _value; + + /// Sets the value for [RadialWidgetPointer]. + set setValue(double value) { + if (_value == value) { + return; + } + _value = value; + markNeedsPaint(); + markNeedsLayout(); + } + + /// Sets isInteractive for [RadialWidgetPointer]. + set setIsInteractive(bool value) { + if (value == _isInteractive) { + return; + } + + _isInteractive = value; + markNeedsPaint(); + markNeedsLayout(); + } + + RadialGauge get radialGauge => _radialGauge; + RadialGauge _radialGauge; + set setRadialGauge(RadialGauge value) { + if (value == _radialGauge) { + return; + } + + _radialGauge = value; + markNeedsPaint(); + markNeedsLayout(); + } + + /// Gets isInteractive for [RadialWidgetPointer]. + bool get isInteractive => _isInteractive; + bool _isInteractive; + + /// Gets and sets the onChanged assigned to [RadialWidgetPointer]. + ValueChanged? get onChanged => _onChanged; + ValueChanged? _onChanged; + set onChanged(ValueChanged? value) { + if (value == _onChanged) { + return; + } + _onChanged = value; + } + + @override + void paint(PaintingContext context, Offset offset) { + double gaugeStart = _radialGauge.track.start; + double gaugeEnd = _radialGauge.track.end; + + // final center = Offset(offset.dx, offset.dy); + final center = Offset( + 1440 * _radialGauge.xCenterCoordinate - + 2 * _radialGauge.track.thickness, + 900 * _radialGauge.yCenterCoordinate - _radialGauge.track.thickness); + double value = calculateValueAngle(_value, gaugeStart, gaugeEnd); + double startAngle = (_radialGauge.track.startAngle - 180) * (pi / 180); + double endAngle = (_radialGauge.track.endAngle - 180) * (pi / 180); + + final double angle = startAngle + (value / 100) * (endAngle - startAngle); + + double circlePointerOffset = + (900 / 2 - _radialGauge.track.thickness) * _radialGauge.radiusFactor; + + double circlePointerEndX = center.dx + circlePointerOffset * cos(angle); + double circlePointerEndY = center.dy + circlePointerOffset * sin(angle); + // canvas.drawCircle(Offset(circlePointerEndX, circlePointerEndY), 30, + // Paint()..color = Colors.red); + super.paint(context, Offset(circlePointerEndX, circlePointerEndY)); + } + + double calculateValueAngle(double value, double gaugeStart, double gaugeEnd) { + double newValue = (value - gaugeStart) / (gaugeEnd - gaugeStart) * 100; + + return newValue; + } +} diff --git a/lib/src/radial_gauge/pointer/radial_widget_pointer.dart b/lib/src/radial_gauge/pointer/radial_widget_pointer.dart new file mode 100644 index 00000000..e1e460e3 --- /dev/null +++ b/lib/src/radial_gauge/pointer/radial_widget_pointer.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/pointer/radial_widget_painter.dart'; +import '../radial_gauge_state.dart'; + +/// +/// A [RadialWidgetPointer] is used to render the widget pointer in the [RadialGauge]. +/// +/// ```dart +///RadialGauge( +/// widgetPointer: [ +/// RadialWidgetPointer(value: 100, child: FlutterLogo()) +/// ], +/// track: RadialTrack( +/// trackStyle: TrackStyle(), +/// start: 0, +/// end: 100, +/// ), +/// ), +/// ``` +/// + +class RadialWidgetPointer extends SingleChildRenderObjectWidget { + const RadialWidgetPointer({ + Key? key, + required this.value, + required Widget child, + this.isInteractive = false, + this.onChanged, + }) : super(key: key, child: child); + + /// + /// `value` Sets the value of the pointer on the [RadialGauge] + /// + final double value; + + /// + /// Specifies whether to enable the interaction for the pointers. + /// + final bool isInteractive; + + /// + /// onChanged is a callback function that will be invoked when a `pointer` + /// value is changed. + /// + final ValueChanged? onChanged; + + @override + RenderObject createRenderObject(BuildContext context) { + final RadialGaugeState scope = RadialGaugeState.of(context); + + return RenderRadialWidgetPointer( + value: value, + radialGauge: scope.rGauge, + isInteractive: isInteractive, + onChanged: onChanged, + ); + } + + @override + void updateRenderObject( + BuildContext context, RenderRadialWidgetPointer renderObject) { + final RadialGaugeState scope = RadialGaugeState.of(context); + renderObject + ..setValue = value + ..setRadialGauge = scope.rGauge + ..setIsInteractive = isInteractive + ..onChanged = onChanged; + super.updateRenderObject(context, renderObject); + } +} diff --git a/lib/src/radial_gauge/radial_gauge.dart b/lib/src/radial_gauge/radial_gauge.dart index 2cc74a77..5571bb9d 100644 --- a/lib/src/radial_gauge/radial_gauge.dart +++ b/lib/src/radial_gauge/radial_gauge.dart @@ -1,10 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:geekyants_flutter_gauges/geekyants_flutter_gauges.dart'; -import 'package:geekyants_flutter_gauges/src/radial_gauge/pointer/needle_pointer_painter.dart'; import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_container.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_painter.dart'; import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_state.dart'; -import 'package:geekyants_flutter_gauges/src/radial_gauge/valuebar/radial_value_bar_painter.dart'; /// Creates a Radial Gauge Widget to display the values in a Radial Scale. /// The widget can be customized using the properties available in [RadialGauge]. @@ -42,6 +40,7 @@ class RadialGauge extends StatefulWidget { this.radiusFactor = 1, this.shapePointer = const [], this.needlePointer = const [], + this.widgetPointer = const [], // List? track, }) : super(key: key); @@ -110,6 +109,23 @@ class RadialGauge extends StatefulWidget { /// final List? shapePointer; + /// + /// The list of [RadialWidgetPointer] to be displayed in the Radial Gauge. + /// + /// ```dart + /// RadialGauge( + /// track: RadialTrack( + /// start: 0, + /// end: 100, + /// ), + /// widgetPointer: [ + /// RadialWidgetPointer(value: 10, child: FlutterLogo()), + /// ], + /// ), + /// ``` + /// + final List? widgetPointer; + /// /// The list of [RadialTrack] to be displayed in the Radial Gauge. /// @@ -190,6 +206,11 @@ class _RadialGaugeState extends State { _addChild(widget.needlePointer![i], null, null); } } + if (widget.widgetPointer != null) { + for (int i = 0; i < widget.widgetPointer!.length; i++) { + _addChild(widget.widgetPointer![i], null, null); + } + } if (widget.valueBar != null) { for (int i = 0; i < widget.valueBar!.length; i++) { _addChild(widget.valueBar![i], null, null); @@ -248,6 +269,8 @@ class RRadialGauge extends MultiChildRenderObjectWidget { BuildContext context, covariant RenderRadialGauge renderObject) { renderObject ..setTrack = rGauge.track + ..setXCenterCoordinate = rGauge.xCenterCoordinate + ..setYCenterCoordinate = rGauge.yCenterCoordinate ..setValueBar = rGauge.valueBar ..setShapePointer = rGauge.shapePointer ..setXCenterCoordinate = rGauge.xCenterCoordinate @@ -255,189 +278,3 @@ class RRadialGauge extends MultiChildRenderObjectWidget { ..setNeedlePointer = rGauge.needlePointer!; } } - -class RenderRadialGauge extends RenderBox - with - ContainerRenderObjectMixin, - RenderBoxContainerDefaultsMixin, - DebugOverflowIndicatorMixin { - RenderRadialGauge({ - Key? key, - required RadialTrack track, - required double radiusFactor, - required double xCenterCoordinate, - required double yCenterCoordinate, - required List? needlePointer, - required List? shapePointer, - required List? valueBar, - }) : _track = track, - _needlePointer = needlePointer, - _valueBar = valueBar, - _xCenterCoordinate = xCenterCoordinate, - _radiusFactor = radiusFactor, - _shapePointer = shapePointer, - _yCenterCoordinate = yCenterCoordinate, - super(); - - double gaugeHeight = 0; - double gaugeWidth = 0; - double valueBarTopHeight = 0, valueBarWidth = 0; - - List? get getShapePointer => _shapePointer; - List? _shapePointer; - - set setShapePointer(List? shapePointer) { - if (_shapePointer == shapePointer) return; - _shapePointer = shapePointer; - - markNeedsPaint(); - } - - double get getRadiusFactor => _radiusFactor; - double _radiusFactor; - set setRadiusFactor(double radiusFactor) { - if (_radiusFactor == radiusFactor) return; - _radiusFactor = radiusFactor; - markNeedsPaint(); - } - - double get xCenterCoordinate => _xCenterCoordinate; - double _xCenterCoordinate; - set setXCenterCoordinate(double xCenterCoordinate) { - if (_xCenterCoordinate == xCenterCoordinate) return; - _xCenterCoordinate = xCenterCoordinate; - markNeedsPaint(); - } - - double get yCenterCoordinate => _yCenterCoordinate; - double _yCenterCoordinate; - set setYCenterCoordinate(double yCenterCoordinate) { - if (_yCenterCoordinate == yCenterCoordinate) return; - _yCenterCoordinate = yCenterCoordinate; - markNeedsPaint(); - } - - RadialTrack get getTrack => _track; - RadialTrack _track; - set setTrack(RadialTrack track) { - if (_track == track) return; - _track = track; - markNeedsPaint(); - } - - List get getValueBar => _valueBar!; - List? _valueBar; - set setValueBar(List? valueBar) { - if (_valueBar == valueBar) return; - _valueBar = valueBar; - markNeedsPaint(); - } - - List get getNeedlePointer => _needlePointer!; - List? _needlePointer; - set setNeedlePointer(List? needlePointer) { - if (_needlePointer == needlePointer) return; - _needlePointer = needlePointer; - markNeedsPaint(); - } - - late double? extraH; - @override - void performLayout() { - size = computeDryLayout(constraints); - - RenderBox? child = firstChild; - - while (child != null) { - final MultiChildLayoutParentData childParentData = - child.parentData as MultiChildLayoutParentData; - - if (child is RenderRadialValueBar) { - childParentData.offset = Offset( - size.width * xCenterCoordinate, size.height * yCenterCoordinate); - - extraH = (child.getRadialOffset); - final childConstraints = BoxConstraints( - maxWidth: size.width, - maxHeight: size.height, - ); - child.layout(childConstraints, parentUsesSize: true); - } else if (child is RenderRadialGaugeContainer) { - childParentData.offset = Offset((size.width * xCenterCoordinate), - (size.height * yCenterCoordinate)); - - final childConstraints = BoxConstraints( - maxWidth: size.width, - maxHeight: size.height, - ); - - child.layout(childConstraints, parentUsesSize: true); - } else if (child is RenderNeedlePointer) { - childParentData.offset = Offset( - size.width * xCenterCoordinate, size.height * yCenterCoordinate); - final childConstraints = BoxConstraints( - maxWidth: size.shortestSide - getTrack.thickness, - maxHeight: size.shortestSide - getTrack.thickness, - ); - child.layout(childConstraints, parentUsesSize: true); - } else if (child is RenderRadialShapePointer) { - childParentData.offset = Offset( - size.width * xCenterCoordinate, size.height * yCenterCoordinate); - child.layout(constraints, parentUsesSize: true); - } else { - childParentData.offset = - Offset(((size.width) / 2), ((size.height) / 2)); - } - - child = childParentData.nextSibling; - } - } - - late double kheight; - late double kwidth; - double kDefaultRadialGaugeSize = 350.0; - - @override - Size computeDryLayout(BoxConstraints constraints) { - final double actualHeight = constraints.hasBoundedHeight - ? constraints.maxHeight - : kDefaultRadialGaugeSize; - final double actualWidth = constraints.hasBoundedWidth - ? constraints.maxWidth - : kDefaultRadialGaugeSize; - - kheight = actualHeight; - kwidth = actualWidth; - - Size s = Size(actualWidth, actualHeight); - - return constraints.constrain(s); - } - - getRadialGaugeContainerSize() { - Offset c = Offset(kheight / 2, kwidth / 2); - - final Rect rect = - Rect.fromCenter(center: c, width: kwidth, height: kheight); - - return rect.size; - } - - @override - void setupParentData(RenderObject child) { - if (child.parentData is! MultiChildLayoutParentData) { - child.parentData = MultiChildLayoutParentData(); - } - } - - @override - bool hitTestChildren(BoxHitTestResult result, {required Offset position}) { - final bool isHit = super.defaultHitTestChildren(result, position: position); - return isHit; - } - - @override - void paint(PaintingContext context, Offset offset) { - defaultPaint(context, offset); - } -} diff --git a/lib/src/radial_gauge/radial_gauge_container.dart b/lib/src/radial_gauge/radial_gauge_container.dart index c876ebcc..1b00e5b7 100644 --- a/lib/src/radial_gauge/radial_gauge_container.dart +++ b/lib/src/radial_gauge/radial_gauge_container.dart @@ -1,8 +1,6 @@ -import 'dart:math'; - import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_container_painter.dart'; class RadialGaugeContainer extends LeafRenderObjectWidget { const RadialGaugeContainer({ @@ -25,209 +23,3 @@ class RadialGaugeContainer extends LeafRenderObjectWidget { renderObject.setRadialGauge = radialGauge; } } - -class RenderRadialGaugeContainer extends RenderBox { - RenderRadialGaugeContainer({ - Key? key, - required RadialGauge radialGauge, - }) : _radialGauge = radialGauge, - super(); - - RadialGauge get getRadialGauge => _radialGauge; - RadialGauge _radialGauge; - set setRadialGauge(RadialGauge radialGauge) { - if (_radialGauge == radialGauge) return; - _radialGauge = radialGauge; - markNeedsPaint(); - } - - @override - bool hitTest(BoxHitTestResult result, {required Offset position}) { - return false; - } - - @override - Size computeDryLayout(BoxConstraints constraints) { - return constraints.constrain(constraints.biggest); - } - - @override - void performLayout() { - size = Size(constraints.maxWidth, constraints.maxHeight); - } - - void paintRulersAndLabels( - Canvas canvas, - double numParts, - double startAngle, - double partAngle, - double radius, - double thickness, - double rulerLength, - Offset center, - ) { - // Primary Ruler Paint - final Paint primaryRulerPaint = Paint() - ..color = getRadialGauge.track.trackStyle.primaryRulerColor! - ..strokeWidth = getRadialGauge.track.trackStyle.primaryRulersWidth! - ..style = PaintingStyle.stroke; - - // Secondary Ruler Paint - final Paint secondaryRulerPaint = Paint() - ..color = getRadialGauge.track.trackStyle.secondaryRulerColor! - ..strokeWidth = getRadialGauge.track.trackStyle.secondaryRulersWidth! - ..style = PaintingStyle.stroke; - - // Loop to draw the Rulers and Labels - for (int i = 0; i <= numParts; i++) { - final double angle = - startAngle + i * partAngle; // angle of the current part - final Offset startPoint = Offset( - (radius - thickness) * cos(angle), (radius - thickness) * sin(angle)); - final Offset endPoint = Offset( - ((radius - thickness) - rulerLength) * cos(angle), - ((radius - thickness) - rulerLength) * sin(angle)); - - final Offset labelEndPoint = Offset( - (radius - rulerLength - 20 - thickness) * cos(angle), - (radius - rulerLength - 20 - thickness) * sin(angle)); - - var secondaryRulerInterval = - getRadialGauge.track.trackStyle.secondaryRulerPerInterval ?? 1; - var secondaryRulerLength = - getRadialGauge.track.trackStyle.secondaryRulersHeight ?? 5; - - final double secondaryRulerAngle = - partAngle / (secondaryRulerInterval + 1); - - // Draw the primary Ruler - if (getRadialGauge.track.trackStyle.showPrimaryRulers) { - canvas.drawLine( - center + startPoint, center + endPoint, primaryRulerPaint); - } - if (i != numParts) { - for (int j = 1; j <= secondaryRulerInterval; j++) { - final double secondaryAngle = angle + (j * secondaryRulerAngle); - final Offset secondaryStartPoint = Offset( - (radius - thickness) * cos(secondaryAngle), - (radius - thickness) * sin(secondaryAngle)); - - final Offset secondaryEndPoint = Offset( - ((radius - thickness) - secondaryRulerLength) * - cos(secondaryAngle), - ((radius - thickness) - secondaryRulerLength) * - sin(secondaryAngle)); - - // Draw the secondary Ruler - if (getRadialGauge.track.trackStyle.showSecondaryRulers) { - canvas.drawLine( - center + secondaryStartPoint, - center + secondaryEndPoint, - secondaryRulerPaint, - ); - } - } - } - - //* DRAW LABELS - final TextPainter textPainter = - TextPainter(textDirection: TextDirection.ltr); - const String labelFormat = '%d'; - final double langle = - startAngle + i * partAngle; // the angle of the current ruler - // the y coordinate of the label - final String label = labelFormat.replaceAll( - '%d', ((langle - startAngle) * 180 / pi).round().toString()); - double l = double.parse(label); - // print(object) - double sAngle = _radialGauge.track.startAngle; - double eAngle = _radialGauge.track.endAngle; - - double range = eAngle - sAngle; - double start = _radialGauge.track.start; - double end = _radialGauge.track.end; - double valueRange = (end - start); - - double exactValue = - start + double.parse(((l / range) * valueRange).toStringAsFixed(2)); - Color textColor = Colors.black; - textPainter.text = TextSpan( - text: exactValue.toString(), - style: TextStyle(color: textColor, fontWeight: FontWeight.bold)); - textPainter.layout(); - - final Offset labelOffset = Offset( - (labelEndPoint.dx + center.dx) - textPainter.width / 2, - (labelEndPoint.dy + center.dy) - textPainter.height / 2); - if (getRadialGauge.track.trackStyle.showLabel!) { - textPainter.paint(canvas, labelOffset); - } - } - } - - int calculateNumOfDivisions(int steps, double start, double end) { - double range = end - start.toDouble(); - int numOfDivisions = range ~/ steps; - - return numOfDivisions; - } - - @override - void paint(PaintingContext context, Offset offset) { - final canvas = context.canvas; - - // Angles in radians - double startAngle = (getRadialGauge.track.startAngle - 180) * (pi / 180); - double endAngle = (getRadialGauge.track.endAngle - 180) * (pi / 180); - if (startAngle > endAngle) { - double temp = startAngle; - startAngle = endAngle; - endAngle = temp; - } - - var thickness = getRadialGauge.track.thickness; - double shortestSide = size.shortestSide; - - double rulerLength = - getRadialGauge.track.trackStyle.primaryRulersHeight ?? 10; - double arcLength = endAngle - startAngle; // length of the arc in radians - - double numParts = calculateNumOfDivisions( - getRadialGauge.track.steps, - getRadialGauge.track.start, - getRadialGauge.track.end, - ).toDouble(); - - // double radialOffset = getRadialGauge.valueBar!.first.radialOffset; - - double partAngle = arcLength / numParts; // angle of each part in radians - double radius = (shortestSide / 2 - thickness) * - getRadialGauge.radiusFactor; // radius of the arc - - final center = offset; - - final Paint containerPaint = Paint() - ..color = getRadialGauge.track.color - ..strokeCap = StrokeCap.round - ..strokeWidth = thickness - ..style = PaintingStyle.stroke; - - // Rect for Arc - Rect rectForArc = Rect.fromCircle(center: center, radius: radius); - - // Gradient - if (getRadialGauge.track.gradient != null) { - LinearGradient gradient = getRadialGauge.track.gradient!; - containerPaint.shader = gradient.createShader(rectForArc); - } - - // Drawing The Arc - if (!getRadialGauge.track.hideTrack) { - canvas.drawArc(rectForArc, startAngle, arcLength, false, containerPaint); - } - - // Drawing the Rulers and Labels - paintRulersAndLabels(canvas, numParts, startAngle, partAngle, radius, - thickness, rulerLength, center); - } -} diff --git a/lib/src/radial_gauge/radial_gauge_container_painter.dart b/lib/src/radial_gauge/radial_gauge_container_painter.dart new file mode 100644 index 00000000..3df64bfc --- /dev/null +++ b/lib/src/radial_gauge/radial_gauge_container_painter.dart @@ -0,0 +1,225 @@ +import 'dart:math'; + +import 'package:flutter/material.dart'; + +import '../../geekyants_flutter_gauges.dart'; + +class RenderRadialGaugeContainer extends RenderBox { + RenderRadialGaugeContainer({ + Key? key, + required RadialGauge radialGauge, + }) : _radialGauge = radialGauge, + super(); + + RadialGauge get getRadialGauge => _radialGauge; + RadialGauge _radialGauge; + set setRadialGauge(RadialGauge radialGauge) { + if (_radialGauge == radialGauge) return; + _radialGauge = radialGauge; + markNeedsPaint(); + markNeedsLayout(); + } + + @override + Size computeDryLayout(BoxConstraints constraints) { + return constraints.constrain(constraints.biggest); + } + + @override + void performLayout() { + size = Size(constraints.maxWidth, constraints.maxHeight); + } + + void paintRulersAndLabels( + Canvas canvas, + double numParts, + double startAngle, + double partAngle, + double radius, + double thickness, + double rulerLength, + Offset center, + ) { + bool showFirstLabel = getRadialGauge.track.trackStyle.showFirstLabel; + bool showLastLabel = getRadialGauge.track.trackStyle.showLastLabel; + // Primary Ruler Paint + final Paint primaryRulerPaint = Paint() + ..color = getRadialGauge.track.trackStyle.primaryRulerColor! + ..strokeWidth = getRadialGauge.track.trackStyle.primaryRulersWidth! + ..style = PaintingStyle.stroke; + + // Secondary Ruler Paint + final Paint secondaryRulerPaint = Paint() + ..color = getRadialGauge.track.trackStyle.secondaryRulerColor! + ..strokeWidth = getRadialGauge.track.trackStyle.secondaryRulersWidth! + ..style = PaintingStyle.stroke; + + // Loop to draw the Rulers and Labels + for (int i = 0; i <= numParts; i++) { + double rulerOffset = getRadialGauge.track.trackStyle.rulersOffset ?? 0; + final double angle = + startAngle + i * partAngle; // angle of the current part + final Offset startPoint = Offset( + (radius - thickness - rulerOffset) * cos(angle), + (radius - thickness - rulerOffset) * sin(angle)); + final Offset endPoint = Offset( + ((radius - thickness - rulerOffset) - rulerLength) * cos(angle), + ((radius - thickness - rulerOffset) - rulerLength) * sin(angle)); + + final Offset labelEndPoint = Offset( + (radius - rulerLength - 20 - thickness) * cos(angle), + (radius - rulerLength - 20 - thickness) * sin(angle)); + + var secondaryRulerInterval = + getRadialGauge.track.trackStyle.secondaryRulerPerInterval ?? 1; + var secondaryRulerLength = + getRadialGauge.track.trackStyle.secondaryRulersHeight ?? 5; + + final double secondaryRulerAngle = + partAngle / (secondaryRulerInterval + 1); + + // Draw the primary Ruler + if (getRadialGauge.track.trackStyle.showPrimaryRulers) { + canvas.drawLine( + center + startPoint, center + endPoint, primaryRulerPaint); + } + if (i != numParts) { + for (int j = 1; j <= secondaryRulerInterval; j++) { + final double secondaryAngle = angle + (j * secondaryRulerAngle); + final Offset secondaryStartPoint = Offset( + (radius - thickness - rulerOffset) * cos(secondaryAngle), + (radius - thickness - rulerOffset) * sin(secondaryAngle)); + + final Offset secondaryEndPoint = Offset( + ((radius - thickness - rulerOffset) - secondaryRulerLength) * + cos(secondaryAngle), + ((radius - thickness - rulerOffset) - secondaryRulerLength) * + sin(secondaryAngle)); + + // Draw the secondary Ruler + if (getRadialGauge.track.trackStyle.showSecondaryRulers) { + canvas.drawLine( + center + secondaryStartPoint, + center + secondaryEndPoint, + secondaryRulerPaint, + ); + } + } + } + + //* DRAW LABELS + final TextPainter textPainter = + TextPainter(textDirection: TextDirection.ltr); + + const String labelFormat = '%d'; + final double langle = + startAngle + i * partAngle; // the angle of the current ruler + // the y coordinate of the label + final String label = labelFormat.replaceAll( + '%d', ((langle - startAngle) * 180 / pi).round().toString()); + double l = double.parse(label); + double sAngle = _radialGauge.track.startAngle; + double eAngle = _radialGauge.track.endAngle; + + double range = eAngle - sAngle; + double start = _radialGauge.track.start; + double end = _radialGauge.track.end; + double valueRange = (end - start); + + double exactValue = + start + double.parse(((l / range) * valueRange).toStringAsFixed(2)); + Color textColor = Colors.black; + textPainter.text = TextSpan( + text: exactValue.toString(), + style: getRadialGauge.track.trackStyle.labelStyle ?? + TextStyle(color: textColor, fontWeight: FontWeight.bold)); + textPainter.layout(); + + if (i == 0 && !showFirstLabel) { + continue; // Skip drawing the first label + } + + // Check if it's the last label and showLastLabel is false + if (i == numParts && !showLastLabel) { + continue; // Skip drawing the last label + } + + final Offset labelOffset = Offset( + (labelEndPoint.dx + center.dx) - textPainter.width / 2, + (labelEndPoint.dy + center.dy) - textPainter.height / 2); + if (getRadialGauge.track.trackStyle.showLabel!) { + textPainter.paint(canvas, labelOffset); + } + } + } + + int calculateNumOfDivisions(int steps, double start, double end) { + double range = end - start.toDouble(); + int numOfDivisions = range ~/ steps; + + return numOfDivisions; + } + + @override + void paint(PaintingContext context, Offset offset) { + final canvas = context.canvas; + + // Center of the canvas + offset = Offset(offset.dx, offset.dy); + // offset = Offset(size.width * getRadialGauge.xCenterCoordinate, + // size.height * getRadialGauge.yCenterCoordinate); + // Angles in radians + double startAngle = (getRadialGauge.track.startAngle - 180) * (pi / 180); + double endAngle = (getRadialGauge.track.endAngle - 180) * (pi / 180); + if (startAngle > endAngle) { + double temp = startAngle; + startAngle = endAngle; + endAngle = temp; + } + + var thickness = getRadialGauge.track.thickness; + double shortestSide = size.shortestSide; + + double rulerLength = + getRadialGauge.track.trackStyle.primaryRulersHeight ?? 10; + double arcLength = endAngle - startAngle; // length of the arc in radians + + double numParts = calculateNumOfDivisions( + getRadialGauge.track.steps, + getRadialGauge.track.start, + getRadialGauge.track.end, + ).toDouble(); + + // double radialOffset = getRadialGauge.valueBar!.first.radialOffset; + + double partAngle = arcLength / numParts; // angle of each part in radians + double radius = (shortestSide / 2 - thickness) * + getRadialGauge.radiusFactor; // radius of the arc + + final center = offset; + + final Paint containerPaint = Paint() + ..color = getRadialGauge.track.color + ..strokeCap = StrokeCap.round + ..strokeWidth = thickness + ..style = PaintingStyle.stroke; + + // Rect for Arc + Rect rectForArc = Rect.fromCircle(center: center, radius: radius); + + // Gradient + if (getRadialGauge.track.gradient != null) { + LinearGradient gradient = getRadialGauge.track.gradient!; + containerPaint.shader = gradient.createShader(rectForArc); + } + + // Drawing The Arc + if (!getRadialGauge.track.hideTrack) { + canvas.drawArc(rectForArc, startAngle, arcLength, false, containerPaint); + } + + // Drawing the Rulers and Labels + paintRulersAndLabels(canvas, numParts, startAngle, partAngle, radius, + thickness, rulerLength, center); + } +} diff --git a/lib/src/radial_gauge/radial_gauge_painter.dart b/lib/src/radial_gauge/radial_gauge_painter.dart new file mode 100644 index 00000000..7312e756 --- /dev/null +++ b/lib/src/radial_gauge/radial_gauge_painter.dart @@ -0,0 +1,401 @@ +import 'dart:math'; +import 'package:flutter/gestures.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/pointer/needle_pointer_painter.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/pointer/radial_shape_pointer_painter.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/pointer/radial_widget_painter.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/radial_gauge_container_painter.dart'; +import 'package:geekyants_flutter_gauges/src/radial_gauge/valuebar/radial_value_bar_painter.dart'; + +import '../../geekyants_flutter_gauges.dart'; + +class RenderRadialGauge extends RenderBox + with + ContainerRenderObjectMixin, + RenderBoxContainerDefaultsMixin, + DebugOverflowIndicatorMixin { + RenderRadialGauge({ + Key? key, + required RadialTrack track, + required double radiusFactor, + required double xCenterCoordinate, + required double yCenterCoordinate, + required List? needlePointer, + required List? shapePointer, + required List? valueBar, + }) : _track = track, + _needlePointer = needlePointer, + _valueBar = valueBar, + _xCenterCoordinate = xCenterCoordinate, + _radiusFactor = radiusFactor, + _shapePointer = shapePointer, + _yCenterCoordinate = yCenterCoordinate { + _horizontalDrag = HorizontalDragGestureRecognizer() + ..onUpdate = _handleDragUpdate + ..onEnd = _handleDragEnd + ..onStart = _handleDragStart + ..dragStartBehavior = DragStartBehavior.start; + _verticalDrag = VerticalDragGestureRecognizer() + ..onUpdate = _handleDragUpdate + ..onEnd = _handleDragEnd + ..onStart = _handleDragStart + ..dragStartBehavior = DragStartBehavior.start; + } + + double gaugeHeight = 0; + double gaugeWidth = 0; + double valueBarTopHeight = 0, valueBarWidth = 0; + + /// Horizontal Gesture Recognizer for the Radial Gauge. + late HorizontalDragGestureRecognizer _horizontalDrag; + + /// Vertical Gesture Recognizer for the Radial Gauge. + late VerticalDragGestureRecognizer _verticalDrag; + + List? get getShapePointer => _shapePointer; + List? _shapePointer; + + set setShapePointer(List? shapePointer) { + if (_shapePointer == shapePointer) return; + _shapePointer = shapePointer; + + markNeedsPaint(); + markNeedsLayout(); + } + + double get getRadiusFactor => _radiusFactor; + double _radiusFactor; + set setRadiusFactor(double radiusFactor) { + if (_radiusFactor == radiusFactor) return; + _radiusFactor = radiusFactor; + markNeedsPaint(); + markNeedsLayout(); + } + + double get xCenterCoordinate => _xCenterCoordinate; + double _xCenterCoordinate; + set setXCenterCoordinate(double xCenterCoordinate) { + if (_xCenterCoordinate == xCenterCoordinate) return; + _xCenterCoordinate = xCenterCoordinate; + markNeedsPaint(); + markNeedsLayout(); + } + + double get yCenterCoordinate => _yCenterCoordinate; + double _yCenterCoordinate; + set setYCenterCoordinate(double yCenterCoordinate) { + if (_yCenterCoordinate == yCenterCoordinate) return; + _yCenterCoordinate = yCenterCoordinate; + markNeedsPaint(); + markNeedsLayout(); + } + + RadialTrack get getTrack => _track; + RadialTrack _track; + set setTrack(RadialTrack track) { + if (_track == track) return; + _track = track; + markNeedsPaint(); + markNeedsLayout(); + } + + List get getValueBar => _valueBar!; + List? _valueBar; + set setValueBar(List? valueBar) { + if (_valueBar == valueBar) return; + _valueBar = valueBar; + markNeedsPaint(); + markNeedsLayout(); + } + + List get getNeedlePointer => _needlePointer!; + List? _needlePointer; + set setNeedlePointer(List? needlePointer) { + if (_needlePointer == needlePointer) return; + _needlePointer = needlePointer; + markNeedsPaint(); + markNeedsLayout(); + } + + late Offset centOffset; + late double? extraH; + late Offset center; + @override + void performLayout() { + size = computeDryLayout(constraints); + Size s = size; + + RenderBox? child = firstChild; + center = + Offset(size.width * xCenterCoordinate, size.height * yCenterCoordinate); + + while (child != null) { + final RadialGaugeParentData childParentData = + child.parentData as RadialGaugeParentData; + + if (child is RenderRadialShapePointer) { + childParentData.offset = const Offset(0, 0); + centOffset = childParentData.offset; + final childConstrainst = BoxConstraints( + maxWidth: size.width, + maxHeight: size.height, + ); + + child.layout(childConstrainst, parentUsesSize: true); + } else if (child is RenderRadialWidgetPointer) { + childParentData.offset = const Offset(0, 0); + final childConstrainst = BoxConstraints( + maxWidth: size.width, + maxHeight: size.height, + ); + child.layout(childConstrainst, parentUsesSize: true); + } else if (child is RenderRadialGaugeContainer) { + childParentData.offset = center; + + final childConstraints = BoxConstraints( + maxWidth: s.width, + maxHeight: s.height, + ); + + child.layout(childConstraints, parentUsesSize: true); + } else if (child is RenderRadialValueBar) { + childParentData.offset = center; + + extraH = (child.getRadialOffset); + final childConstraints = BoxConstraints( + maxWidth: size.width, + maxHeight: size.height, + ); + child.layout(childConstraints, parentUsesSize: true); + } else if (child is RenderNeedlePointer) { + childParentData.offset = const Offset(0, 0); + centOffset = childParentData.offset; + final childConstraints = BoxConstraints( + maxWidth: size.width, + maxHeight: size.height, + ); + child.layout(childConstraints, parentUsesSize: true); + } else { + childParentData.offset = + Offset(((size.width) / 2), ((size.height) / 2)); + } + + child = childParentData.nextSibling; + } + } + + late double kheight; + late double kwidth; + double kDefaultRadialGaugeSize = 350.0; + + @override + Size computeDryLayout(BoxConstraints constraints) { + final double actualHeight = constraints.hasBoundedHeight + ? constraints.maxHeight + : kDefaultRadialGaugeSize; + final double actualWidth = constraints.hasBoundedWidth + ? constraints.maxWidth + : kDefaultRadialGaugeSize; + + kheight = actualHeight; + kwidth = actualWidth; + + Size s = Size(actualWidth, actualHeight); + + return constraints.constrain(s); + } + + getRadialGaugeContainerSize() { + Offset c = Offset(kheight / 2, kwidth / 2); + + final Rect rect = + Rect.fromCenter(center: c, width: kwidth, height: kheight); + + return rect.size; + } + + @override + void setupParentData(RenderObject child) { + if (child.parentData is! RadialGaugeParentData) { + child.parentData = RadialGaugeParentData( + center: Offset.zero, + height: 500, + width: 500, + ); + } + } + + late HitTestTarget _pointerType; + late RenderNeedlePointer _movableWidget; + late RenderRadialShapePointer _movableShapePointer; + bool _restrictNeedlePointer = false; + + @override + bool hitTestChildren(BoxHitTestResult result, {required Offset position}) { + final bool isHit = super.defaultHitTestChildren(result, position: position); + // HitTestTarget child = result.path.last.target; + + if (isHit && !_restrictNeedlePointer) { + final HitTestTarget child = result.path.last.target; + + if (child is RenderNeedlePointer) { + _pointerType = child; + _movableWidget = child; + if (!_movableWidget.isInteractive) { + return false; + } + + return true; + } else if (child is RenderRadialShapePointer) { + _pointerType = child; + _movableShapePointer = child; + if (!_movableShapePointer.isInteractive) { + return false; + } + + return true; + } + // } + } + // Calculate the bounds of the rendered shape + + return false; + } + + @override + void handleEvent(PointerEvent event, covariant BoxHitTestEntry entry) { + assert(debugHandleEvent(event, entry)); + if (event is PointerDownEvent) { + _horizontalDrag.addPointer(event); + _verticalDrag.addPointer(event); + _restrictNeedlePointer = true; + } + super.handleEvent(event, entry); + } + + // @override + // void applyPaintTransform(RenderBox child, Matrix4 transform) { + // if (child is RenderNeedlePointer) { + // final centerX = size.width / 2; + // final centerY = size.height / 2; + + // transform.translate(centerX, centerY); + // double value = calculateValueAngle( + // getNeedlePointer[0].value, getTrack.start, getTrack.end); + // double startAngle = (getTrack.startAngle) * (pi / 180); + // double endAngle = (getTrack.endAngle) * (pi / 180); + // double angle = startAngle + (value / 100) * (endAngle - startAngle); + // double toRotateAngle = angle - (pi / 2); + // transform.rotateZ(toRotateAngle); // Specify the rotation in radians + // transform.translate( + // -centerX - child.getNeedleWidth / 2 - child.getTailRadius / 2, + // -centerY - child.getNeedleHeight + child.getTailRadius / 2); + + // super.applyPaintTransform(child, transform); + // markNeedsLayout(); + // markNeedsCompositedLayerUpdate(); + // } + // } + + double calculateValueAngle(double value, double gaugeStart, double gaugeEnd) { + double newValue = (value - gaugeStart) / (gaugeEnd - gaugeStart) * 100; + + return newValue; + } + + @override + void paint(PaintingContext context, Offset offset) { + defaultPaint(context, offset); + } + + void _handleDragUpdate(DragUpdateDetails details) { + final Offset localPosition = globalToLocal(details.globalPosition); + final double angle = _getAngleFromOffset(localPosition); + final double value = _getValueFromAngle(angle); + + if (value >= getTrack.start && value <= getTrack.end) { + if (_pointerType is RenderNeedlePointer) { + if (_movableWidget.isInteractive) { + if (_movableWidget.onChanged != null) { + _movableWidget.onChanged!(value); + } + } + } else if (_pointerType is RenderRadialShapePointer) { + if (_movableShapePointer.isInteractive) { + if (_movableShapePointer.onChanged != null) { + _movableShapePointer.onChanged!(value); + } + } + } + } + + markNeedsPaint(); + markNeedsSemanticsUpdate(); + } + + _getAngleFromOffset(Offset offset) { + final double centerX = size.width * xCenterCoordinate + centOffset.dx; + final double centerY = size.height * yCenterCoordinate + centOffset.dy; + + final double dx = offset.dx - centerX; + final double dy = offset.dy - centerY; + final double angle = atan2(dy, dx); + + return (angle + pi); + } + + _getValueFromAngle(double angle) { + final double startAngle = (getTrack.startAngle) * (pi / 180); + final double endAngle = (getTrack.endAngle) * (pi / 180); + + double normalizedAngle = (angle - startAngle) % (2 * pi); + if (normalizedAngle < 0) { + // normalizedAngle = 0; + normalizedAngle += 2 * pi; + // normalizedAngle += 2 * pi; // Make sure the angle is positive + } + + final double value = (normalizedAngle / + (endAngle - startAngle) * + (getTrack.end - getTrack.start)) + + getTrack.start; + return value; + } + + void _handleDragStart(DragStartDetails details) { + if (_pointerType is RenderNeedlePointer) { + _movableWidget.setIsInteractive = true; + } else if (_pointerType is RenderRadialShapePointer) { + _movableShapePointer.setIsInteractive = true; + } + markNeedsLayout(); + markNeedsSemanticsUpdate(); + } + + void _handleDragEnd(DragEndDetails details) { + _restrictNeedlePointer = false; + + _horizontalDrag.dispose(); + _verticalDrag.dispose(); + } + + @override + void dispose() { + super.dispose(); + _horizontalDrag.dispose(); + _verticalDrag.dispose(); + } +} + +class RadialGaugeParentData extends MultiChildLayoutParentData { + Offset center; + double width; + double height; + + RadialGaugeParentData({ + required this.center, + required this.width, + required this.height, + }); +} diff --git a/lib/src/radial_gauge/radial_track.dart b/lib/src/radial_gauge/radial_track.dart index ab314088..f89efd3b 100644 --- a/lib/src/radial_gauge/radial_track.dart +++ b/lib/src/radial_gauge/radial_track.dart @@ -50,6 +50,10 @@ class RadialTrack { this.hideTrack = false, this.thickness = 10, this.trackStyle = const TrackStyle( + labelStyle: TextStyle( + fontSize: 12, + color: Colors.black, + ), primaryRulersHeight: 25, primaryRulerColor: Colors.black54, secondaryRulerColor: Colors.grey, @@ -59,7 +63,6 @@ class RadialTrack { secondaryRulerPerInterval: 4.0, ), this.gradient, - Widget? child, }); /// @@ -121,6 +124,21 @@ class RadialTrack { } class TrackStyle extends BaseRulerStyle { + /// + /// The [showFirstLabel] property is used to show/Hide the first label of the Radial Gauge. + /// + final bool showFirstLabel; + + /// + /// The [showLastLabel] property is used to show/Hide the last label of the Radial Gauge. + /// + final bool showLastLabel; + + /// + /// The [labelStyle] property is used to customize the label of the Radial Gauge. + /// + final TextStyle? labelStyle; + const TrackStyle({ super.primaryRulersHeight, super.primaryRulerColor = Colors.black54, @@ -135,5 +153,8 @@ class TrackStyle extends BaseRulerStyle { super.labelOffset = 0, super.rulersOffset = 0, super.inverseRulers = false, + this.showFirstLabel = true, + this.showLastLabel = true, + this.labelStyle, }); } diff --git a/lib/src/radial_gauge/valuebar/radial_value_bar_painter.dart b/lib/src/radial_gauge/valuebar/radial_value_bar_painter.dart index 3b5dbc48..9ed12bfb 100644 --- a/lib/src/radial_gauge/valuebar/radial_value_bar_painter.dart +++ b/lib/src/radial_gauge/valuebar/radial_value_bar_painter.dart @@ -115,11 +115,10 @@ class RenderRadialValueBar extends RenderBox { double arcLength = endAngle - startAngle; double shortestSide = size.shortestSide; - double radius = - shortestSide / 2.0 - getRadialGauge.track.thickness - getRadialOffset; - // getRadialGauge.track.thickness - - // getRadialOffset - - // getValueBarThickness; // + double radius = (shortestSide / 2.0 - + getRadialGauge.track.thickness - + getRadialOffset) * + getRadialGauge.radiusFactor; Rect c = Rect.fromCircle(center: center, radius: radius); canvas.drawArc(c, startAngle, arcLength, false, containerPaint); diff --git a/pubspec.yaml b/pubspec.yaml index 97504098..033680db 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: geekyants_flutter_gauges description: A linear gauge package for Flutter that displays progress and can be customized for appearance and behavior. -version: 1.0.1 +version: 1.0.2 homepage: https://github.com/GeekyAnts/GaugesFlutter environment: diff --git a/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-left-right-extendLinearGauge.png b/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-left-right-extendLinearGauge.png index 5c1a258c..733a3ebe 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-left-right-extendLinearGauge.png and b/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-left-right-extendLinearGauge.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-top-bottom-extendLinearGauge.png b/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-top-bottom-extendLinearGauge.png index 54454528..22e0f644 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-top-bottom-extendLinearGauge.png and b/test/custom_curve_test/goldens/custom-curve-bezier-endHeight-100-top-bottom-extendLinearGauge.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-left-right.png b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-left-right.png index 840d31f6..08b4e1ba 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-left-right.png and b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-left-right.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-top-bottom.png b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-top-bottom.png index 6b2338e5..5b0ab2e0 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-top-bottom.png and b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-0-top-bottom.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-left-right.png b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-left-right.png index 70186e75..2e0f5398 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-left-right.png and b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-left-right.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-top-bottom.png b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-top-bottom.png index d4172cd5..09e3a714 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-top-bottom.png and b/test/custom_curve_test/goldens/custom-curve-bezier-midpoint-100-top-bottom.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-left-right.png b/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-left-right.png index 1448ff00..48cdd548 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-left-right.png and b/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-left-right.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-top-bottom.png b/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-top-bottom.png index aaa65148..bd63e3c6 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-top-bottom.png and b/test/custom_curve_test/goldens/custom-curve-concave-midpoint-50-top-bottom.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-left-right.png b/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-left-right.png index bfa5d2fe..b36c7186 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-left-right.png and b/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-left-right.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-top-bottom.png b/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-top-bottom.png index 23123ada..5a1b479f 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-top-bottom.png and b/test/custom_curve_test/goldens/custom-curve-convex-midpoint-50-top-bottom.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-left-right-extendLinearGauge.png b/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-left-right-extendLinearGauge.png index 009f59d7..1df2b0dc 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-left-right-extendLinearGauge.png and b/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-left-right-extendLinearGauge.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-top-bottom-exendLinearGauge.png b/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-top-bottom-exendLinearGauge.png index 2cf3f95c..65174422 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-top-bottom-exendLinearGauge.png and b/test/custom_curve_test/goldens/custom-curve-linear-endHeight-100-top-bottom-exendLinearGauge.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right-custom-start-end.png b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right-custom-start-end.png index 28bcdff0..a10638ae 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right-custom-start-end.png and b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right-custom-start-end.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right.png b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right.png index ad5fb45c..8fc76429 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right.png and b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-left-right.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom-custom-start-end.png b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom-custom-start-end.png index 5013091a..83ac7902 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom-custom-start-end.png and b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom-custom-start-end.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom.png b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom.png index 2d394275..de6e6f98 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom.png and b/test/custom_curve_test/goldens/custom-curve-linear-midHeight-100-top-bottom.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-midpoint-50-bottom.png b/test/custom_curve_test/goldens/custom-curve-midpoint-50-bottom.png index aafbe934..203e4583 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-midpoint-50-bottom.png and b/test/custom_curve_test/goldens/custom-curve-midpoint-50-bottom.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-midpoint-50-top.png b/test/custom_curve_test/goldens/custom-curve-midpoint-50-top.png index 889a77cf..45544f34 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-midpoint-50-top.png and b/test/custom_curve_test/goldens/custom-curve-midpoint-50-top.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-left.png b/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-left.png index 0381ac83..ea9bb495 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-left.png and b/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-left.png differ diff --git a/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-right.png b/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-right.png index 6820daa5..c44055ac 100644 Binary files a/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-right.png and b/test/custom_curve_test/goldens/custom-curve-midpoint-50-vertical-right.png differ diff --git a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal-inverse.png b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal-inverse.png index 0c35e3f3..c7b7e048 100644 Binary files a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal-inverse.png and b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal-inverse.png differ diff --git a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal.png b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal.png index 8debc376..c272647d 100644 Binary files a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal.png and b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-horizontal.png differ diff --git a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical-inverse.png b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical-inverse.png index a46e4e74..ca20bb97 100644 Binary files a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical-inverse.png and b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical-inverse.png differ diff --git a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical.png b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical.png index 72d3e959..bcf38b25 100644 Binary files a/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical.png and b/test/custom_labels_test/goldens/custom-labels-valuebar-value-75-vertical.png differ diff --git a/test/custom_labels_test/goldens/extend-linear-gauge-25-vertical.png b/test/custom_labels_test/goldens/extend-linear-gauge-25-vertical.png index d6431ca8..975d588f 100644 Binary files a/test/custom_labels_test/goldens/extend-linear-gauge-25-vertical.png and b/test/custom_labels_test/goldens/extend-linear-gauge-25-vertical.png differ diff --git a/test/custom_labels_test/goldens/extend-linear-gauge-25.png b/test/custom_labels_test/goldens/extend-linear-gauge-25.png index ad4867c7..d100a00e 100644 Binary files a/test/custom_labels_test/goldens/extend-linear-gauge-25.png and b/test/custom_labels_test/goldens/extend-linear-gauge-25.png differ diff --git a/test/custom_labels_test/goldens/long-labels-Horizontal.png b/test/custom_labels_test/goldens/long-labels-Horizontal.png index 97f6be72..9b18b8ff 100644 Binary files a/test/custom_labels_test/goldens/long-labels-Horizontal.png and b/test/custom_labels_test/goldens/long-labels-Horizontal.png differ diff --git a/test/custom_labels_test/goldens/long-labels-Vertical.png b/test/custom_labels_test/goldens/long-labels-Vertical.png index 8cabd27c..9f84bd87 100644 Binary files a/test/custom_labels_test/goldens/long-labels-Vertical.png and b/test/custom_labels_test/goldens/long-labels-Vertical.png differ diff --git a/test/custom_labels_test/goldens/multiple-labels-horizontal.png b/test/custom_labels_test/goldens/multiple-labels-horizontal.png index b9218d07..2287d40b 100644 Binary files a/test/custom_labels_test/goldens/multiple-labels-horizontal.png and b/test/custom_labels_test/goldens/multiple-labels-horizontal.png differ diff --git a/test/custom_labels_test/goldens/multiple-labels-inverse-horizontal.png b/test/custom_labels_test/goldens/multiple-labels-inverse-horizontal.png index bc7c6600..10f8eebe 100644 Binary files a/test/custom_labels_test/goldens/multiple-labels-inverse-horizontal.png and b/test/custom_labels_test/goldens/multiple-labels-inverse-horizontal.png differ diff --git a/test/custom_labels_test/goldens/multiple-labels-inverse-vertical.png b/test/custom_labels_test/goldens/multiple-labels-inverse-vertical.png index 80063d87..ff279e85 100644 Binary files a/test/custom_labels_test/goldens/multiple-labels-inverse-vertical.png and b/test/custom_labels_test/goldens/multiple-labels-inverse-vertical.png differ diff --git a/test/custom_labels_test/goldens/multiple-labels-vertical.png b/test/custom_labels_test/goldens/multiple-labels-vertical.png index 4e1efd2f..0eb93a50 100644 Binary files a/test/custom_labels_test/goldens/multiple-labels-vertical.png and b/test/custom_labels_test/goldens/multiple-labels-vertical.png differ diff --git a/test/custom_labels_test/goldens/no-labels-horizontal.png b/test/custom_labels_test/goldens/no-labels-horizontal.png index 59ba1f11..c001da69 100644 Binary files a/test/custom_labels_test/goldens/no-labels-horizontal.png and b/test/custom_labels_test/goldens/no-labels-horizontal.png differ diff --git a/test/custom_labels_test/goldens/no-labels-vertical.png b/test/custom_labels_test/goldens/no-labels-vertical.png index ad9bba14..5b15e798 100644 Binary files a/test/custom_labels_test/goldens/no-labels-vertical.png and b/test/custom_labels_test/goldens/no-labels-vertical.png differ diff --git a/test/custom_labels_test/goldens/ruler-position-bottom.png b/test/custom_labels_test/goldens/ruler-position-bottom.png index 5e7b5154..85fa93c2 100644 Binary files a/test/custom_labels_test/goldens/ruler-position-bottom.png and b/test/custom_labels_test/goldens/ruler-position-bottom.png differ diff --git a/test/custom_labels_test/goldens/ruler-position-left.png b/test/custom_labels_test/goldens/ruler-position-left.png index 9fc2526b..91ac97d3 100644 Binary files a/test/custom_labels_test/goldens/ruler-position-left.png and b/test/custom_labels_test/goldens/ruler-position-left.png differ diff --git a/test/custom_labels_test/goldens/ruler-position-right.png b/test/custom_labels_test/goldens/ruler-position-right.png index 02cb0cbb..4786b73e 100644 Binary files a/test/custom_labels_test/goldens/ruler-position-right.png and b/test/custom_labels_test/goldens/ruler-position-right.png differ diff --git a/test/custom_labels_test/goldens/ruler-position-top.png b/test/custom_labels_test/goldens/ruler-position-top.png index 30343870..ee170420 100644 Binary files a/test/custom_labels_test/goldens/ruler-position-top.png and b/test/custom_labels_test/goldens/ruler-position-top.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0-vertical.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0-vertical.png index ad9bba14..5b15e798 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0-vertical.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0-vertical.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0.png index 59ba1f11..c001da69 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-0.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20-vertical.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20-vertical.png index 6196de98..c325b7c3 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20-vertical.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20-vertical.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20.png index 4699b1ef..9c9ae61e 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-100-thickness-20.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-20-thickness-15-right.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-20-thickness-15-right.png index f213013b..39117d23 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-20-thickness-15-right.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-20-thickness-15-right.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-200-thickness-15-bottom.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-200-thickness-15-bottom.png index 18a04bf0..dc77df1d 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-200-thickness-15-bottom.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-200-thickness-15-bottom.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50-vertical.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50-vertical.png index 8633fee6..fcf0e40d 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50-vertical.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50-vertical.png differ diff --git a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50.png b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50.png index f86acc6b..17148907 100644 Binary files a/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50.png and b/test/extend_linear_gauge_test/goldens/extend-linear-gauge-50.png differ diff --git a/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container-vertical.png b/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container-vertical.png index 531e7f58..ef538980 100644 Binary files a/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container-vertical.png and b/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container-vertical.png differ diff --git a/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container.png b/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container.png index 4bb28413..c71ee235 100644 Binary files a/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container.png and b/test/linear_gauge_container_test/goldens/both-edge-border-radius-linear-gauge-container.png differ diff --git a/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container-vertical.png b/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container-vertical.png index d897c6c5..53b6048c 100644 Binary files a/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container-vertical.png and b/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container-vertical.png differ diff --git a/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container.png b/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container.png index 594cc2b9..20594e2e 100644 Binary files a/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container.png and b/test/linear_gauge_container_test/goldens/end-edge-border-radius-linear-gauge-container.png differ diff --git a/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container-vertical.png b/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container-vertical.png index 15cae69d..9b400e72 100644 Binary files a/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container-vertical.png and b/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container-vertical.png differ diff --git a/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container.png b/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container.png index ffd77da5..6442deab 100644 Binary files a/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container.png and b/test/linear_gauge_container_test/goldens/start-edge-border-radius-linear-gauge-container.png differ diff --git a/test/pointers_test/goldens/align-center-bottom-circle-value-30-align.png b/test/pointers_test/goldens/align-center-bottom-circle-value-30-align.png index d4d61231..185efba4 100644 Binary files a/test/pointers_test/goldens/align-center-bottom-circle-value-30-align.png and b/test/pointers_test/goldens/align-center-bottom-circle-value-30-align.png differ diff --git a/test/pointers_test/goldens/align-center-left-circle-value-20-vertical.png b/test/pointers_test/goldens/align-center-left-circle-value-20-vertical.png index b24ef018..121dd9e7 100644 Binary files a/test/pointers_test/goldens/align-center-left-circle-value-20-vertical.png and b/test/pointers_test/goldens/align-center-left-circle-value-20-vertical.png differ diff --git a/test/pointers_test/goldens/align-end-bottom-circle-value-30-align.png b/test/pointers_test/goldens/align-end-bottom-circle-value-30-align.png index 53de6e01..76436958 100644 Binary files a/test/pointers_test/goldens/align-end-bottom-circle-value-30-align.png and b/test/pointers_test/goldens/align-end-bottom-circle-value-30-align.png differ diff --git a/test/pointers_test/goldens/align-end-bottom-circle-value-60-width-30.png b/test/pointers_test/goldens/align-end-bottom-circle-value-60-width-30.png index 8e1b4efd..f2cbe09a 100644 Binary files a/test/pointers_test/goldens/align-end-bottom-circle-value-60-width-30.png and b/test/pointers_test/goldens/align-end-bottom-circle-value-60-width-30.png differ diff --git a/test/pointers_test/goldens/align-end-bottom-diamond-value-60-width-30.png b/test/pointers_test/goldens/align-end-bottom-diamond-value-60-width-30.png index fe3a45f4..20a8f319 100644 Binary files a/test/pointers_test/goldens/align-end-bottom-diamond-value-60-width-30.png and b/test/pointers_test/goldens/align-end-bottom-diamond-value-60-width-30.png differ diff --git a/test/pointers_test/goldens/align-end-bottom-rectangle-value-60-width-30.png b/test/pointers_test/goldens/align-end-bottom-rectangle-value-60-width-30.png index 0a522183..4e129d47 100644 Binary files a/test/pointers_test/goldens/align-end-bottom-rectangle-value-60-width-30.png and b/test/pointers_test/goldens/align-end-bottom-rectangle-value-60-width-30.png differ diff --git a/test/pointers_test/goldens/align-end-bottom-triangle-value-60-width-30.png b/test/pointers_test/goldens/align-end-bottom-triangle-value-60-width-30.png index bc0073e7..0a662946 100644 Binary files a/test/pointers_test/goldens/align-end-bottom-triangle-value-60-width-30.png and b/test/pointers_test/goldens/align-end-bottom-triangle-value-60-width-30.png differ diff --git a/test/pointers_test/goldens/align-end-inverse-center-triangle-value-10-width-50-height-50-vertical.png b/test/pointers_test/goldens/align-end-inverse-center-triangle-value-10-width-50-height-50-vertical.png index 2ed89eb4..a8d41303 100644 Binary files a/test/pointers_test/goldens/align-end-inverse-center-triangle-value-10-width-50-height-50-vertical.png and b/test/pointers_test/goldens/align-end-inverse-center-triangle-value-10-width-50-height-50-vertical.png differ diff --git a/test/pointers_test/goldens/align-end-inverse-right-diamond-value-60-width-50-vertical.png b/test/pointers_test/goldens/align-end-inverse-right-diamond-value-60-width-50-vertical.png index e39eb7bb..604c72b5 100644 Binary files a/test/pointers_test/goldens/align-end-inverse-right-diamond-value-60-width-50-vertical.png and b/test/pointers_test/goldens/align-end-inverse-right-diamond-value-60-width-50-vertical.png differ diff --git a/test/pointers_test/goldens/align-end-inverse-top-circle-value-60.png b/test/pointers_test/goldens/align-end-inverse-top-circle-value-60.png index 1f7bb432..7454db45 100644 Binary files a/test/pointers_test/goldens/align-end-inverse-top-circle-value-60.png and b/test/pointers_test/goldens/align-end-inverse-top-circle-value-60.png differ diff --git a/test/pointers_test/goldens/align-end-inverse-top-diamond-value-60.png b/test/pointers_test/goldens/align-end-inverse-top-diamond-value-60.png index c62a0b10..946048c5 100644 Binary files a/test/pointers_test/goldens/align-end-inverse-top-diamond-value-60.png and b/test/pointers_test/goldens/align-end-inverse-top-diamond-value-60.png differ diff --git a/test/pointers_test/goldens/align-end-inverse-top-rectangle-value-60.png b/test/pointers_test/goldens/align-end-inverse-top-rectangle-value-60.png index e7574fa5..2d2772fd 100644 Binary files a/test/pointers_test/goldens/align-end-inverse-top-rectangle-value-60.png and b/test/pointers_test/goldens/align-end-inverse-top-rectangle-value-60.png differ diff --git a/test/pointers_test/goldens/align-end-inverse-top-triangle-value-60.png b/test/pointers_test/goldens/align-end-inverse-top-triangle-value-60.png index 51bdc0d2..5c628db8 100644 Binary files a/test/pointers_test/goldens/align-end-inverse-top-triangle-value-60.png and b/test/pointers_test/goldens/align-end-inverse-top-triangle-value-60.png differ diff --git a/test/pointers_test/goldens/align-end-left-circle-value-20-vertical.png b/test/pointers_test/goldens/align-end-left-circle-value-20-vertical.png index b91be6cd..55419cc5 100644 Binary files a/test/pointers_test/goldens/align-end-left-circle-value-20-vertical.png and b/test/pointers_test/goldens/align-end-left-circle-value-20-vertical.png differ diff --git a/test/pointers_test/goldens/align-end-right-circle-value-60-width-30-vertical.png b/test/pointers_test/goldens/align-end-right-circle-value-60-width-30-vertical.png index 1d50eca8..17bfcef3 100644 Binary files a/test/pointers_test/goldens/align-end-right-circle-value-60-width-30-vertical.png and b/test/pointers_test/goldens/align-end-right-circle-value-60-width-30-vertical.png differ diff --git a/test/pointers_test/goldens/align-end-right-rectangle-value-60-width-50-vertical.png b/test/pointers_test/goldens/align-end-right-rectangle-value-60-width-50-vertical.png index 283f945b..7c731654 100644 Binary files a/test/pointers_test/goldens/align-end-right-rectangle-value-60-width-50-vertical.png and b/test/pointers_test/goldens/align-end-right-rectangle-value-60-width-50-vertical.png differ diff --git a/test/pointers_test/goldens/align-start-bottom-circle-value-30-align.png b/test/pointers_test/goldens/align-start-bottom-circle-value-30-align.png index 8ad49179..65355e20 100644 Binary files a/test/pointers_test/goldens/align-start-bottom-circle-value-30-align.png and b/test/pointers_test/goldens/align-start-bottom-circle-value-30-align.png differ diff --git a/test/pointers_test/goldens/align-start-bottom-diamond-value-30.png b/test/pointers_test/goldens/align-start-bottom-diamond-value-30.png index 9f82ad32..81594e65 100644 Binary files a/test/pointers_test/goldens/align-start-bottom-diamond-value-30.png and b/test/pointers_test/goldens/align-start-bottom-diamond-value-30.png differ diff --git a/test/pointers_test/goldens/align-start-bottom-rectangle-value-30.png b/test/pointers_test/goldens/align-start-bottom-rectangle-value-30.png index 4f3a2968..05d6fd3f 100644 Binary files a/test/pointers_test/goldens/align-start-bottom-rectangle-value-30.png and b/test/pointers_test/goldens/align-start-bottom-rectangle-value-30.png differ diff --git a/test/pointers_test/goldens/align-start-bottom-triangle-value-30.png b/test/pointers_test/goldens/align-start-bottom-triangle-value-30.png index 32a49f28..3da59c73 100644 Binary files a/test/pointers_test/goldens/align-start-bottom-triangle-value-30.png and b/test/pointers_test/goldens/align-start-bottom-triangle-value-30.png differ diff --git a/test/pointers_test/goldens/align-start-inverse-left-circle-value-60-vertical.png b/test/pointers_test/goldens/align-start-inverse-left-circle-value-60-vertical.png index 0e57d12a..e26244ed 100644 Binary files a/test/pointers_test/goldens/align-start-inverse-left-circle-value-60-vertical.png and b/test/pointers_test/goldens/align-start-inverse-left-circle-value-60-vertical.png differ diff --git a/test/pointers_test/goldens/align-start-inverse-top-circle-value-60.png b/test/pointers_test/goldens/align-start-inverse-top-circle-value-60.png index a4aba9be..475b0f09 100644 Binary files a/test/pointers_test/goldens/align-start-inverse-top-circle-value-60.png and b/test/pointers_test/goldens/align-start-inverse-top-circle-value-60.png differ diff --git a/test/pointers_test/goldens/align-start-left-circle-value-20-vertical.png b/test/pointers_test/goldens/align-start-left-circle-value-20-vertical.png index 0aa902e7..39b54122 100644 Binary files a/test/pointers_test/goldens/align-start-left-circle-value-20-vertical.png and b/test/pointers_test/goldens/align-start-left-circle-value-20-vertical.png differ diff --git a/test/pointers_test/goldens/bottom-circle-value-30-inverse.png b/test/pointers_test/goldens/bottom-circle-value-30-inverse.png index 7f236345..cfbea0d7 100644 Binary files a/test/pointers_test/goldens/bottom-circle-value-30-inverse.png and b/test/pointers_test/goldens/bottom-circle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/bottom-diamond-value-30-inverse.png b/test/pointers_test/goldens/bottom-diamond-value-30-inverse.png index ca6fda0d..45d05e14 100644 Binary files a/test/pointers_test/goldens/bottom-diamond-value-30-inverse.png and b/test/pointers_test/goldens/bottom-diamond-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/bottom-rectangle-value-30-inverse.png b/test/pointers_test/goldens/bottom-rectangle-value-30-inverse.png index ba1ad579..eed95d1e 100644 Binary files a/test/pointers_test/goldens/bottom-rectangle-value-30-inverse.png and b/test/pointers_test/goldens/bottom-rectangle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/bottom-triangle-value-30-inverse.png b/test/pointers_test/goldens/bottom-triangle-value-30-inverse.png index 8157945d..5b16e89f 100644 Binary files a/test/pointers_test/goldens/bottom-triangle-value-30-inverse.png and b/test/pointers_test/goldens/bottom-triangle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/center-circle-value-30-inverse.png b/test/pointers_test/goldens/center-circle-value-30-inverse.png index 85cb1c0c..93ca0e4b 100644 Binary files a/test/pointers_test/goldens/center-circle-value-30-inverse.png and b/test/pointers_test/goldens/center-circle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/center-diamond-value-30-inverse.png b/test/pointers_test/goldens/center-diamond-value-30-inverse.png index 98c2890c..e1dcadfc 100644 Binary files a/test/pointers_test/goldens/center-diamond-value-30-inverse.png and b/test/pointers_test/goldens/center-diamond-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/center-rectangle-value-30-inverse.png b/test/pointers_test/goldens/center-rectangle-value-30-inverse.png index d837d20f..5dc8b3f6 100644 Binary files a/test/pointers_test/goldens/center-rectangle-value-30-inverse.png and b/test/pointers_test/goldens/center-rectangle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/center-triangle-value-30-inverse.png b/test/pointers_test/goldens/center-triangle-value-30-inverse.png index b3f0f927..f2375053 100644 Binary files a/test/pointers_test/goldens/center-triangle-value-30-inverse.png and b/test/pointers_test/goldens/center-triangle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/circle-color-blue.png b/test/pointers_test/goldens/circle-color-blue.png index 51fe7466..ccdcf66a 100644 Binary files a/test/pointers_test/goldens/circle-color-blue.png and b/test/pointers_test/goldens/circle-color-blue.png differ diff --git a/test/pointers_test/goldens/circle-value-0-width-150-vertical.png b/test/pointers_test/goldens/circle-value-0-width-150-vertical.png index 8c0aab68..29f1e72e 100644 Binary files a/test/pointers_test/goldens/circle-value-0-width-150-vertical.png and b/test/pointers_test/goldens/circle-value-0-width-150-vertical.png differ diff --git a/test/pointers_test/goldens/circle-value-0-width-150.png b/test/pointers_test/goldens/circle-value-0-width-150.png index c9ed010c..43f863a1 100644 Binary files a/test/pointers_test/goldens/circle-value-0-width-150.png and b/test/pointers_test/goldens/circle-value-0-width-150.png differ diff --git a/test/pointers_test/goldens/circle-value-0.png b/test/pointers_test/goldens/circle-value-0.png index c9ed010c..43f863a1 100644 Binary files a/test/pointers_test/goldens/circle-value-0.png and b/test/pointers_test/goldens/circle-value-0.png differ diff --git a/test/pointers_test/goldens/circle-value-100-vertical-ruler-right-pointer.png b/test/pointers_test/goldens/circle-value-100-vertical-ruler-right-pointer.png index 44e970cf..0cd1230a 100644 Binary files a/test/pointers_test/goldens/circle-value-100-vertical-ruler-right-pointer.png and b/test/pointers_test/goldens/circle-value-100-vertical-ruler-right-pointer.png differ diff --git a/test/pointers_test/goldens/circle-value-100-width-20-vertical-ruler-center-pointer.png b/test/pointers_test/goldens/circle-value-100-width-20-vertical-ruler-center-pointer.png index 547aadf4..aa52d50b 100644 Binary files a/test/pointers_test/goldens/circle-value-100-width-20-vertical-ruler-center-pointer.png and b/test/pointers_test/goldens/circle-value-100-width-20-vertical-ruler-center-pointer.png differ diff --git a/test/pointers_test/goldens/circle-value-100.png b/test/pointers_test/goldens/circle-value-100.png index 6e864521..b00df3ba 100644 Binary files a/test/pointers_test/goldens/circle-value-100.png and b/test/pointers_test/goldens/circle-value-100.png differ diff --git a/test/pointers_test/goldens/circle-value-50.png b/test/pointers_test/goldens/circle-value-50.png index 44fd40b0..24458706 100644 Binary files a/test/pointers_test/goldens/circle-value-50.png and b/test/pointers_test/goldens/circle-value-50.png differ diff --git a/test/pointers_test/goldens/diamond-color-blue.png b/test/pointers_test/goldens/diamond-color-blue.png index 04b1efd3..96a16c17 100644 Binary files a/test/pointers_test/goldens/diamond-color-blue.png and b/test/pointers_test/goldens/diamond-color-blue.png differ diff --git a/test/pointers_test/goldens/diamond-value-0-height-150-vertical.png b/test/pointers_test/goldens/diamond-value-0-height-150-vertical.png index 8d6a462b..27599e4d 100644 Binary files a/test/pointers_test/goldens/diamond-value-0-height-150-vertical.png and b/test/pointers_test/goldens/diamond-value-0-height-150-vertical.png differ diff --git a/test/pointers_test/goldens/diamond-value-0-height-150.png b/test/pointers_test/goldens/diamond-value-0-height-150.png index ccf5efad..c9afec07 100644 Binary files a/test/pointers_test/goldens/diamond-value-0-height-150.png and b/test/pointers_test/goldens/diamond-value-0-height-150.png differ diff --git a/test/pointers_test/goldens/diamond-value-0-width-150-vertical.png b/test/pointers_test/goldens/diamond-value-0-width-150-vertical.png index b0ca6e30..54832c00 100644 Binary files a/test/pointers_test/goldens/diamond-value-0-width-150-vertical.png and b/test/pointers_test/goldens/diamond-value-0-width-150-vertical.png differ diff --git a/test/pointers_test/goldens/diamond-value-0-width-150.png b/test/pointers_test/goldens/diamond-value-0-width-150.png index 91984eb1..c56814ef 100644 Binary files a/test/pointers_test/goldens/diamond-value-0-width-150.png and b/test/pointers_test/goldens/diamond-value-0-width-150.png differ diff --git a/test/pointers_test/goldens/diamond-value-0.png b/test/pointers_test/goldens/diamond-value-0.png index 172c1d46..eb044600 100644 Binary files a/test/pointers_test/goldens/diamond-value-0.png and b/test/pointers_test/goldens/diamond-value-0.png differ diff --git a/test/pointers_test/goldens/diamond-value-100-vertical-ruler-right-pointer.png b/test/pointers_test/goldens/diamond-value-100-vertical-ruler-right-pointer.png index ecc1e25b..59989024 100644 Binary files a/test/pointers_test/goldens/diamond-value-100-vertical-ruler-right-pointer.png and b/test/pointers_test/goldens/diamond-value-100-vertical-ruler-right-pointer.png differ diff --git a/test/pointers_test/goldens/diamond-value-100-width-20-vertical-ruler-center-pointer.png b/test/pointers_test/goldens/diamond-value-100-width-20-vertical-ruler-center-pointer.png index 2e8f4999..ae594055 100644 Binary files a/test/pointers_test/goldens/diamond-value-100-width-20-vertical-ruler-center-pointer.png and b/test/pointers_test/goldens/diamond-value-100-width-20-vertical-ruler-center-pointer.png differ diff --git a/test/pointers_test/goldens/diamond-value-100.png b/test/pointers_test/goldens/diamond-value-100.png index eb610ce1..d15a2d05 100644 Binary files a/test/pointers_test/goldens/diamond-value-100.png and b/test/pointers_test/goldens/diamond-value-100.png differ diff --git a/test/pointers_test/goldens/diamond-value-50.png b/test/pointers_test/goldens/diamond-value-50.png index c4fb58a4..52aee2a6 100644 Binary files a/test/pointers_test/goldens/diamond-value-50.png and b/test/pointers_test/goldens/diamond-value-50.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-0.png b/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-0.png index 129b113e..575d3988 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-0.png and b/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-0.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-100.png b/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-100.png index d6cfb63e..3eaa4cf0 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-100.png and b/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-100.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-50.png b/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-50.png index 12feff7f..cde081de 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-50.png and b/test/pointers_test/goldens/extendLinearGauge-circle-bottom-value-50.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-0.png b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-0.png index 0290005d..bde07216 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-0.png and b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-0.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-100.png b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-100.png index 6ae13635..65845211 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-100.png and b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-100.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50-vertical.png b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50-vertical.png index 5b535088..26be3a49 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50.png b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50.png index 8507c0ee..1792d986 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50.png and b/test/pointers_test/goldens/extendLinearGauge-circle-center-value-50.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-inverse.png b/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-inverse.png index 7e85184d..6c8cfb98 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical-inverse.png b/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical-inverse.png index c759d12c..eecb2760 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical.png b/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical.png index 43c5a961..37f6f5e4 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-circle-left-value-0-height-20-width-20-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-right-value-90-vertical.png b/test/pointers_test/goldens/extendLinearGauge-circle-right-value-90-vertical.png index d8f37c8f..99ad2760 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-right-value-90-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-circle-right-value-90-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-top-value-0.png b/test/pointers_test/goldens/extendLinearGauge-circle-top-value-0.png index abe384c9..54963891 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-top-value-0.png and b/test/pointers_test/goldens/extendLinearGauge-circle-top-value-0.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-top-value-100.png b/test/pointers_test/goldens/extendLinearGauge-circle-top-value-100.png index 46701986..88962735 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-top-value-100.png and b/test/pointers_test/goldens/extendLinearGauge-circle-top-value-100.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-circle-top-value-50.png b/test/pointers_test/goldens/extendLinearGauge-circle-top-value-50.png index 3caf4729..0006d750 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-circle-top-value-50.png and b/test/pointers_test/goldens/extendLinearGauge-circle-top-value-50.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-100.png b/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-100.png index 9ce40111..a204e1af 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-100.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-100.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-90-height-40-width-30.png b/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-90-height-40-width-30.png index 50f08396..9f6c622e 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-90-height-40-width-30.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-bottom-value-90-height-40-width-30.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-0-height-30-width-20.png b/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-0-height-30-width-20.png index 023ba9c6..34d61fec 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-0-height-30-width-20.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-0-height-30-width-20.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical-inverse.png b/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical-inverse.png index 3d60505a..1d62a82e 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical.png b/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical.png index de0266e3..461f41e8 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-center-value-50-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-left-value-0-height-40-width-40-vertical.png b/test/pointers_test/goldens/extendLinearGauge-diamond-left-value-0-height-40-width-40-vertical.png index 47701619..1361925c 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-left-value-0-height-40-width-40-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-left-value-0-height-40-width-40-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-right-value-30-height-50-width-30-vertical.png b/test/pointers_test/goldens/extendLinearGauge-diamond-right-value-30-height-50-width-30-vertical.png index 2af4df6e..5bd19e49 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-right-value-30-height-50-width-30-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-right-value-30-height-50-width-30-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-20.png b/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-20.png index d39c4b38..644dc8a7 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-20.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-20.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30-inverse.png b/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30-inverse.png index 7f91afe6..9ca21817 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30.png b/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30.png index 371d5668..37ba3403 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30.png and b/test/pointers_test/goldens/extendLinearGauge-diamond-top-value-80-height-30.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-bottom-value-100.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-bottom-value-100.png index 8963789d..290a9300 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-bottom-value-100.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-bottom-value-100.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-height-40.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-height-40.png index cb7f765b..204ffb43 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-height-40.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-height-40.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-inverse.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-inverse.png index e4459ce0..a6691d42 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0.png index 1411a91d..40135e41 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-0.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-50-vertical.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-50-vertical.png index 1da72afd..a23323f4 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-50-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-center-value-50-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-left-value-0-height-40-width-40-vertical.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-left-value-0-height-40-width-40-vertical.png index cd5eff82..1b972576 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-left-value-0-height-40-width-40-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-left-value-0-height-40-width-40-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical-inverse.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical-inverse.png index d5f349dd..b031a11b 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical.png index 4169b314..fbe38d3a 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-right-value-30-height-20-width-60-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-rectangle-top-value-30.png b/test/pointers_test/goldens/extendLinearGauge-rectangle-top-value-30.png index df7f866a..47ef8362 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-rectangle-top-value-30.png and b/test/pointers_test/goldens/extendLinearGauge-rectangle-top-value-30.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100-inverse.png b/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100-inverse.png index 8bb87d48..c8a1fc6c 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100.png b/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100.png index 2932c12f..5c5da42e 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-bottom-value-100.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-0.png b/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-0.png index c3bbd3e3..ff1e9036 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-0.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-0.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-50-vertical.png b/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-50-vertical.png index 2266e048..fbeeeb13 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-50-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-center-value-50-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical-inverse.png b/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical-inverse.png index adb10937..92df2d2f 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical-inverse.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical-inverse.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical.png b/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical.png index 42cf1f73..f4bde7a5 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-left-value-0-height-20-width-20-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-right-value-30-height-20-width-20-vertical.png b/test/pointers_test/goldens/extendLinearGauge-triangle-right-value-30-height-20-width-20-vertical.png index 081e8da7..ddf15381 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-right-value-30-height-20-width-20-vertical.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-right-value-30-height-20-width-20-vertical.png differ diff --git a/test/pointers_test/goldens/extendLinearGauge-triangle-top-value-60.png b/test/pointers_test/goldens/extendLinearGauge-triangle-top-value-60.png index db7863f5..8655668d 100644 Binary files a/test/pointers_test/goldens/extendLinearGauge-triangle-top-value-60.png and b/test/pointers_test/goldens/extendLinearGauge-triangle-top-value-60.png differ diff --git a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0-vertical.png b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0-vertical.png index 16152116..849bedb9 100644 Binary files a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0-vertical.png and b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0-vertical.png differ diff --git a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0.png b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0.png index 3ad78bcc..7df412c8 100644 Binary files a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0.png and b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-0.png differ diff --git a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100-vertical.png b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100-vertical.png index 39049941..c7f7ac48 100644 Binary files a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100-vertical.png and b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100-vertical.png differ diff --git a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100.png b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100.png index 922c883a..72c2c71f 100644 Binary files a/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100.png and b/test/pointers_test/goldens/inverse-showLabel-false-triangle-value-100.png differ diff --git a/test/pointers_test/goldens/rectangle-color-blue.png b/test/pointers_test/goldens/rectangle-color-blue.png index 2deca833..bc4c0f45 100644 Binary files a/test/pointers_test/goldens/rectangle-color-blue.png and b/test/pointers_test/goldens/rectangle-color-blue.png differ diff --git a/test/pointers_test/goldens/rectangle-value-0-height-150-vertical.png b/test/pointers_test/goldens/rectangle-value-0-height-150-vertical.png index 9160f168..365fcdeb 100644 Binary files a/test/pointers_test/goldens/rectangle-value-0-height-150-vertical.png and b/test/pointers_test/goldens/rectangle-value-0-height-150-vertical.png differ diff --git a/test/pointers_test/goldens/rectangle-value-0-height-150.png b/test/pointers_test/goldens/rectangle-value-0-height-150.png index 65d0dca2..0183eb0d 100644 Binary files a/test/pointers_test/goldens/rectangle-value-0-height-150.png and b/test/pointers_test/goldens/rectangle-value-0-height-150.png differ diff --git a/test/pointers_test/goldens/rectangle-value-0-width-150-vertical.png b/test/pointers_test/goldens/rectangle-value-0-width-150-vertical.png index 413ff3b1..77c37938 100644 Binary files a/test/pointers_test/goldens/rectangle-value-0-width-150-vertical.png and b/test/pointers_test/goldens/rectangle-value-0-width-150-vertical.png differ diff --git a/test/pointers_test/goldens/rectangle-value-0-width-150.png b/test/pointers_test/goldens/rectangle-value-0-width-150.png index d85f42c3..ce2ff9b7 100644 Binary files a/test/pointers_test/goldens/rectangle-value-0-width-150.png and b/test/pointers_test/goldens/rectangle-value-0-width-150.png differ diff --git a/test/pointers_test/goldens/rectangle-value-0.png b/test/pointers_test/goldens/rectangle-value-0.png index 42d8b1a6..ff97e824 100644 Binary files a/test/pointers_test/goldens/rectangle-value-0.png and b/test/pointers_test/goldens/rectangle-value-0.png differ diff --git a/test/pointers_test/goldens/rectangle-value-100-vertical-ruler-right-pointer.png b/test/pointers_test/goldens/rectangle-value-100-vertical-ruler-right-pointer.png index 952d9092..cdd50b50 100644 Binary files a/test/pointers_test/goldens/rectangle-value-100-vertical-ruler-right-pointer.png and b/test/pointers_test/goldens/rectangle-value-100-vertical-ruler-right-pointer.png differ diff --git a/test/pointers_test/goldens/rectangle-value-100-width-20-vertical-ruler-center-pointer.png b/test/pointers_test/goldens/rectangle-value-100-width-20-vertical-ruler-center-pointer.png index cbe3b9b6..2061b537 100644 Binary files a/test/pointers_test/goldens/rectangle-value-100-width-20-vertical-ruler-center-pointer.png and b/test/pointers_test/goldens/rectangle-value-100-width-20-vertical-ruler-center-pointer.png differ diff --git a/test/pointers_test/goldens/rectangle-value-100.png b/test/pointers_test/goldens/rectangle-value-100.png index baf08ddc..655ec8e8 100644 Binary files a/test/pointers_test/goldens/rectangle-value-100.png and b/test/pointers_test/goldens/rectangle-value-100.png differ diff --git a/test/pointers_test/goldens/rectangle-value-50.png b/test/pointers_test/goldens/rectangle-value-50.png index d697f056..20c5e1ee 100644 Binary files a/test/pointers_test/goldens/rectangle-value-50.png and b/test/pointers_test/goldens/rectangle-value-50.png differ diff --git a/test/pointers_test/goldens/showLabel-false-circle-value-0-vertical.png b/test/pointers_test/goldens/showLabel-false-circle-value-0-vertical.png index a3f5308d..4ddbdbf3 100644 Binary files a/test/pointers_test/goldens/showLabel-false-circle-value-0-vertical.png and b/test/pointers_test/goldens/showLabel-false-circle-value-0-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-circle-value-0.png b/test/pointers_test/goldens/showLabel-false-circle-value-0.png index 81f9a1da..a0cefa38 100644 Binary files a/test/pointers_test/goldens/showLabel-false-circle-value-0.png and b/test/pointers_test/goldens/showLabel-false-circle-value-0.png differ diff --git a/test/pointers_test/goldens/showLabel-false-circle-value-100-vertical.png b/test/pointers_test/goldens/showLabel-false-circle-value-100-vertical.png index 6972b2a8..6f920344 100644 Binary files a/test/pointers_test/goldens/showLabel-false-circle-value-100-vertical.png and b/test/pointers_test/goldens/showLabel-false-circle-value-100-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-circle-value-100.png b/test/pointers_test/goldens/showLabel-false-circle-value-100.png index 8be445ae..3724b7ad 100644 Binary files a/test/pointers_test/goldens/showLabel-false-circle-value-100.png and b/test/pointers_test/goldens/showLabel-false-circle-value-100.png differ diff --git a/test/pointers_test/goldens/showLabel-false-diamond-value-0-vertical.png b/test/pointers_test/goldens/showLabel-false-diamond-value-0-vertical.png index 55d24ab8..24ee9175 100644 Binary files a/test/pointers_test/goldens/showLabel-false-diamond-value-0-vertical.png and b/test/pointers_test/goldens/showLabel-false-diamond-value-0-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-diamond-value-0.png b/test/pointers_test/goldens/showLabel-false-diamond-value-0.png index efbf5789..56a8f176 100644 Binary files a/test/pointers_test/goldens/showLabel-false-diamond-value-0.png and b/test/pointers_test/goldens/showLabel-false-diamond-value-0.png differ diff --git a/test/pointers_test/goldens/showLabel-false-diamond-value-100-vertical.png b/test/pointers_test/goldens/showLabel-false-diamond-value-100-vertical.png index 35bcb29b..b55aa876 100644 Binary files a/test/pointers_test/goldens/showLabel-false-diamond-value-100-vertical.png and b/test/pointers_test/goldens/showLabel-false-diamond-value-100-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-diamond-value-100.png b/test/pointers_test/goldens/showLabel-false-diamond-value-100.png index 46a1b610..26057087 100644 Binary files a/test/pointers_test/goldens/showLabel-false-diamond-value-100.png and b/test/pointers_test/goldens/showLabel-false-diamond-value-100.png differ diff --git a/test/pointers_test/goldens/showLabel-false-rectangle-value-0-vertical.png b/test/pointers_test/goldens/showLabel-false-rectangle-value-0-vertical.png index f96ea71e..be31a37f 100644 Binary files a/test/pointers_test/goldens/showLabel-false-rectangle-value-0-vertical.png and b/test/pointers_test/goldens/showLabel-false-rectangle-value-0-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-rectangle-value-0.png b/test/pointers_test/goldens/showLabel-false-rectangle-value-0.png index 1f0fb11d..0aa75c6c 100644 Binary files a/test/pointers_test/goldens/showLabel-false-rectangle-value-0.png and b/test/pointers_test/goldens/showLabel-false-rectangle-value-0.png differ diff --git a/test/pointers_test/goldens/showLabel-false-rectangle-value-100-vertical.png b/test/pointers_test/goldens/showLabel-false-rectangle-value-100-vertical.png index 455b3836..6d4a11d6 100644 Binary files a/test/pointers_test/goldens/showLabel-false-rectangle-value-100-vertical.png and b/test/pointers_test/goldens/showLabel-false-rectangle-value-100-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-rectangle-value-100.png b/test/pointers_test/goldens/showLabel-false-rectangle-value-100.png index 3d530f09..1424895c 100644 Binary files a/test/pointers_test/goldens/showLabel-false-rectangle-value-100.png and b/test/pointers_test/goldens/showLabel-false-rectangle-value-100.png differ diff --git a/test/pointers_test/goldens/showLabel-false-triangle-value-0-vertical.png b/test/pointers_test/goldens/showLabel-false-triangle-value-0-vertical.png index 5138120e..6abcc962 100644 Binary files a/test/pointers_test/goldens/showLabel-false-triangle-value-0-vertical.png and b/test/pointers_test/goldens/showLabel-false-triangle-value-0-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-triangle-value-0.png b/test/pointers_test/goldens/showLabel-false-triangle-value-0.png index 429e1674..b69b0346 100644 Binary files a/test/pointers_test/goldens/showLabel-false-triangle-value-0.png and b/test/pointers_test/goldens/showLabel-false-triangle-value-0.png differ diff --git a/test/pointers_test/goldens/showLabel-false-triangle-value-100-vertical.png b/test/pointers_test/goldens/showLabel-false-triangle-value-100-vertical.png index dbd2e345..bb8c51cd 100644 Binary files a/test/pointers_test/goldens/showLabel-false-triangle-value-100-vertical.png and b/test/pointers_test/goldens/showLabel-false-triangle-value-100-vertical.png differ diff --git a/test/pointers_test/goldens/showLabel-false-triangle-value-100.png b/test/pointers_test/goldens/showLabel-false-triangle-value-100.png index 2789e364..27952979 100644 Binary files a/test/pointers_test/goldens/showLabel-false-triangle-value-100.png and b/test/pointers_test/goldens/showLabel-false-triangle-value-100.png differ diff --git a/test/pointers_test/goldens/top-circle-value-30-inverse.png b/test/pointers_test/goldens/top-circle-value-30-inverse.png index 92adba4d..32c098e1 100644 Binary files a/test/pointers_test/goldens/top-circle-value-30-inverse.png and b/test/pointers_test/goldens/top-circle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/top-diamond-value-30-inverse.png b/test/pointers_test/goldens/top-diamond-value-30-inverse.png index 6be1f68b..eb983a4d 100644 Binary files a/test/pointers_test/goldens/top-diamond-value-30-inverse.png and b/test/pointers_test/goldens/top-diamond-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/top-rectangle-value-30-inverse.png b/test/pointers_test/goldens/top-rectangle-value-30-inverse.png index 7717b922..e84cc595 100644 Binary files a/test/pointers_test/goldens/top-rectangle-value-30-inverse.png and b/test/pointers_test/goldens/top-rectangle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/top-triangle-value-30-inverse.png b/test/pointers_test/goldens/top-triangle-value-30-inverse.png index 8022ca4e..eecaa99c 100644 Binary files a/test/pointers_test/goldens/top-triangle-value-30-inverse.png and b/test/pointers_test/goldens/top-triangle-value-30-inverse.png differ diff --git a/test/pointers_test/goldens/triangle-color-blue.png b/test/pointers_test/goldens/triangle-color-blue.png index 4dc98380..5f9376ef 100644 Binary files a/test/pointers_test/goldens/triangle-color-blue.png and b/test/pointers_test/goldens/triangle-color-blue.png differ diff --git a/test/pointers_test/goldens/triangle-value-0-height-150-vertical.png b/test/pointers_test/goldens/triangle-value-0-height-150-vertical.png index 59ebbcc4..8437419a 100644 Binary files a/test/pointers_test/goldens/triangle-value-0-height-150-vertical.png and b/test/pointers_test/goldens/triangle-value-0-height-150-vertical.png differ diff --git a/test/pointers_test/goldens/triangle-value-0-height-150.png b/test/pointers_test/goldens/triangle-value-0-height-150.png index 5ec5d981..a4043050 100644 Binary files a/test/pointers_test/goldens/triangle-value-0-height-150.png and b/test/pointers_test/goldens/triangle-value-0-height-150.png differ diff --git a/test/pointers_test/goldens/triangle-value-0-width-150-vertical.png b/test/pointers_test/goldens/triangle-value-0-width-150-vertical.png index 2f855678..21ca6436 100644 Binary files a/test/pointers_test/goldens/triangle-value-0-width-150-vertical.png and b/test/pointers_test/goldens/triangle-value-0-width-150-vertical.png differ diff --git a/test/pointers_test/goldens/triangle-value-0-width-150.png b/test/pointers_test/goldens/triangle-value-0-width-150.png index fa2fe88d..8ca8d323 100644 Binary files a/test/pointers_test/goldens/triangle-value-0-width-150.png and b/test/pointers_test/goldens/triangle-value-0-width-150.png differ diff --git a/test/pointers_test/goldens/triangle-value-0.png b/test/pointers_test/goldens/triangle-value-0.png index 835bccec..1f1288fb 100644 Binary files a/test/pointers_test/goldens/triangle-value-0.png and b/test/pointers_test/goldens/triangle-value-0.png differ diff --git a/test/pointers_test/goldens/triangle-value-100-vertical-ruler-right-pointer.png b/test/pointers_test/goldens/triangle-value-100-vertical-ruler-right-pointer.png index f584a081..39b7d7a9 100644 Binary files a/test/pointers_test/goldens/triangle-value-100-vertical-ruler-right-pointer.png and b/test/pointers_test/goldens/triangle-value-100-vertical-ruler-right-pointer.png differ diff --git a/test/pointers_test/goldens/triangle-value-100-width-20-vertical-ruler-center-pointer.png b/test/pointers_test/goldens/triangle-value-100-width-20-vertical-ruler-center-pointer.png index 8db3b675..bf691099 100644 Binary files a/test/pointers_test/goldens/triangle-value-100-width-20-vertical-ruler-center-pointer.png and b/test/pointers_test/goldens/triangle-value-100-width-20-vertical-ruler-center-pointer.png differ diff --git a/test/pointers_test/goldens/triangle-value-100.png b/test/pointers_test/goldens/triangle-value-100.png index 0fe7d3ce..a4e383e6 100644 Binary files a/test/pointers_test/goldens/triangle-value-100.png and b/test/pointers_test/goldens/triangle-value-100.png differ diff --git a/test/pointers_test/goldens/triangle-value-50.png b/test/pointers_test/goldens/triangle-value-50.png index 7ac4747d..c44f5a61 100644 Binary files a/test/pointers_test/goldens/triangle-value-50.png and b/test/pointers_test/goldens/triangle-value-50.png differ diff --git a/test/pointers_test/goldens/value-0-label-triangle.png b/test/pointers_test/goldens/value-0-label-triangle.png index 09b7654e..517b2f79 100644 Binary files a/test/pointers_test/goldens/value-0-label-triangle.png and b/test/pointers_test/goldens/value-0-label-triangle.png differ diff --git a/test/pointers_test/goldens/value-100-label-triangle-hw-100.png b/test/pointers_test/goldens/value-100-label-triangle-hw-100.png index 3ba3588a..6790d24b 100644 Binary files a/test/pointers_test/goldens/value-100-label-triangle-hw-100.png and b/test/pointers_test/goldens/value-100-label-triangle-hw-100.png differ diff --git a/test/pointers_test/goldens/value-100-label-triangle.png b/test/pointers_test/goldens/value-100-label-triangle.png index bfd4cfed..ad654ddc 100644 Binary files a/test/pointers_test/goldens/value-100-label-triangle.png and b/test/pointers_test/goldens/value-100-label-triangle.png differ diff --git a/test/pointers_test/goldens/value-50-label-triangle.png b/test/pointers_test/goldens/value-50-label-triangle.png index 026b090d..c70093df 100644 Binary files a/test/pointers_test/goldens/value-50-label-triangle.png and b/test/pointers_test/goldens/value-50-label-triangle.png differ diff --git a/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-0to-50-to-80-extend.png b/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-0to-50-to-80-extend.png index 9dd442f4..b6072217 100644 Binary files a/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-0to-50-to-80-extend.png and b/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-0to-50-to-80-extend.png differ diff --git a/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend-vertical.png b/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend-vertical.png index a4c5c9d1..aede0035 100644 Binary files a/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend-vertical.png and b/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend.png b/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend.png index cdea581a..03b6321b 100644 Binary files a/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend.png and b/test/range_linear_gauge_test/goldens/fill-extend-range-linear-gauge-extend.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50-vertical.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50-vertical.png index 1c65498c..5b56fbb9 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50-vertical.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50.png index 59dfe2af..465d2c6a 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-0-to-50-to-100-extend-50.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50-vertical.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50-vertical.png index c4682145..0579da5d 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50-vertical.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50.png index c25f354d..7e3ede59 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-20-to-50-to-100-extend-50.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius-vertical.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius-vertical.png index 32c38f30..7d76ad66 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius-vertical.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius.png index d0987efa..02fd39d7 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-border-radius.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-extend-vertical.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-extend-vertical.png index 1fff0010..a8e190d2 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-extend-vertical.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-extend-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-extend.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-extend.png index 23ccdd08..a9ecb517 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-extend.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-extend.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb-vertical.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb-vertical.png index 3af7bb37..511ccba1 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb-vertical.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb.png index a5276f35..dc8ae37b 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-100-end-500-rgb.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb-vertical.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb-vertical.png index 314281d3..35c3ef95 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb-vertical.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb.png index b4f52bf4..9db6a4ef 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-negative-500-end-500-rgb.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value-vertical.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value-vertical.png index 20546e32..b9a0c268 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value-vertical.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value-vertical.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value.png index 63a41ee7..0be40b42 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-start-value-equal-to-end-value.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-red-only.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-red-only.png index 27c9b7b7..9154645d 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-red-only.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-red-only.png differ diff --git a/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-vertical-red-only.png b/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-vertical-red-only.png index 677a6ee3..c941a6c8 100644 Binary files a/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-vertical-red-only.png and b/test/range_linear_gauge_test/goldens/range-linear-gauge-thickness-30-vertical-red-only.png differ diff --git a/test/shader_paint_test/goldens/value-bar-value-100-with-shader-vertical.png b/test/shader_paint_test/goldens/value-bar-value-100-with-shader-vertical.png index b8caf0a4..943c74a1 100644 Binary files a/test/shader_paint_test/goldens/value-bar-value-100-with-shader-vertical.png and b/test/shader_paint_test/goldens/value-bar-value-100-with-shader-vertical.png differ diff --git a/test/shader_paint_test/goldens/value-bar-value-100-with-shader.png b/test/shader_paint_test/goldens/value-bar-value-100-with-shader.png index 362b255a..5e6c4246 100644 Binary files a/test/shader_paint_test/goldens/value-bar-value-100-with-shader.png and b/test/shader_paint_test/goldens/value-bar-value-100-with-shader.png differ diff --git a/test/value_bar_test/goldens/both-edge-border-radius-value-bar-vertical.png b/test/value_bar_test/goldens/both-edge-border-radius-value-bar-vertical.png index 8d238c59..7e839e40 100644 Binary files a/test/value_bar_test/goldens/both-edge-border-radius-value-bar-vertical.png and b/test/value_bar_test/goldens/both-edge-border-radius-value-bar-vertical.png differ diff --git a/test/value_bar_test/goldens/both-edge-border-radius-value-bar.png b/test/value_bar_test/goldens/both-edge-border-radius-value-bar.png index b5be80ea..ebe83353 100644 Binary files a/test/value_bar_test/goldens/both-edge-border-radius-value-bar.png and b/test/value_bar_test/goldens/both-edge-border-radius-value-bar.png differ diff --git a/test/value_bar_test/goldens/end-edge-border-radius-value-bar-vertical.png b/test/value_bar_test/goldens/end-edge-border-radius-value-bar-vertical.png index 4382ea88..04943c8c 100644 Binary files a/test/value_bar_test/goldens/end-edge-border-radius-value-bar-vertical.png and b/test/value_bar_test/goldens/end-edge-border-radius-value-bar-vertical.png differ diff --git a/test/value_bar_test/goldens/end-edge-border-radius-value-bar.png b/test/value_bar_test/goldens/end-edge-border-radius-value-bar.png index 5202c70e..57d8f77d 100644 Binary files a/test/value_bar_test/goldens/end-edge-border-radius-value-bar.png and b/test/value_bar_test/goldens/end-edge-border-radius-value-bar.png differ diff --git a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-100-vertical-inverse.png b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-100-vertical-inverse.png index d4d8d4dc..ae204897 100644 Binary files a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-100-vertical-inverse.png and b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-100-vertical-inverse.png differ diff --git a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-30-inverse.png b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-30-inverse.png index bd377066..aee698bd 100644 Binary files a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-30-inverse.png and b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-30-inverse.png differ diff --git a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50-vertical.png b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50-vertical.png index aed514bb..cbf89c7c 100644 Binary files a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50-vertical.png and b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50-vertical.png differ diff --git a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50.png b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50.png index c35521ab..5a7bd294 100644 Binary files a/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50.png and b/test/value_bar_test/goldens/extendLinearGauge-value-bar-value-50.png differ diff --git a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100-vertical.png b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100-vertical.png index 35239717..37f7e392 100644 Binary files a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100-vertical.png and b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100-vertical.png differ diff --git a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100.png b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100.png index ce2487f1..55a0e92c 100644 Binary files a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100.png and b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-100.png differ diff --git a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50-vertical.png b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50-vertical.png index ba4e92b8..11e723e1 100644 Binary files a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50-vertical.png and b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50-vertical.png differ diff --git a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50.png b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50.png index 48f14c62..0277797c 100644 Binary files a/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50.png and b/test/value_bar_test/goldens/fillExtend-extendLinearGauge-value-bar-value-50.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-bottom.png b/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-bottom.png index c92363a0..74fed447 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-bottom.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-bottom.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-right-vertical.png b/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-right-vertical.png index 74783871..b968f14d 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-right-vertical.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-offset-0-10-20-thickness-10-right-vertical.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-offset-20-10-0-thickness-10-center.png b/test/value_bar_test/goldens/multi-value-bar-value-100-offset-20-10-0-thickness-10-center.png index 2792a186..cfe7dfb9 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-offset-20-10-0-thickness-10-center.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-offset-20-10-0-thickness-10-center.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-left-vertical.png b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-left-vertical.png index 3d9d87b2..7141eeb0 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-left-vertical.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-left-vertical.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-top.png b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-top.png index 7df1ff14..53c5eb15 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-top.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-10-top.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center-vertical.png b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center-vertical.png index 3504bc36..1db54ddb 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center-vertical.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center-vertical.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center.png b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center.png index 94ac8077..6b6d2e47 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-thickness-30-20-10-center.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100-vertical.png b/test/value_bar_test/goldens/multi-value-bar-value-100-vertical.png index d4e495d9..b08a14d5 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100-vertical.png and b/test/value_bar_test/goldens/multi-value-bar-value-100-vertical.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-100.png b/test/value_bar_test/goldens/multi-value-bar-value-100.png index 49b5b197..1d6373af 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-100.png and b/test/value_bar_test/goldens/multi-value-bar-value-100.png differ diff --git a/test/value_bar_test/goldens/multi-value-bar-value-50-60-100.png b/test/value_bar_test/goldens/multi-value-bar-value-50-60-100.png index e88426d4..1b9b9d97 100644 Binary files a/test/value_bar_test/goldens/multi-value-bar-value-50-60-100.png and b/test/value_bar_test/goldens/multi-value-bar-value-50-60-100.png differ diff --git a/test/value_bar_test/goldens/start-edge-border-radius-value-bar-vertical.png b/test/value_bar_test/goldens/start-edge-border-radius-value-bar-vertical.png index 69f344d7..d7783228 100644 Binary files a/test/value_bar_test/goldens/start-edge-border-radius-value-bar-vertical.png and b/test/value_bar_test/goldens/start-edge-border-radius-value-bar-vertical.png differ diff --git a/test/value_bar_test/goldens/start-edge-border-radius-value-bar.png b/test/value_bar_test/goldens/start-edge-border-radius-value-bar.png index d574dfd5..327f9e6d 100644 Binary files a/test/value_bar_test/goldens/start-edge-border-radius-value-bar.png and b/test/value_bar_test/goldens/start-edge-border-radius-value-bar.png differ diff --git a/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom-negative-offset.png b/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom-negative-offset.png index d5b93560..e985a033 100644 Binary files a/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom-negative-offset.png and b/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom-negative-offset.png differ diff --git a/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom.png b/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom.png index d6cbd753..8d04b040 100644 Binary files a/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom.png and b/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20-bottom.png differ diff --git a/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20.png b/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20.png index 0d5cdd65..eca5834e 100644 Binary files a/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20.png and b/test/value_bar_test/goldens/value-bar-thickness-10-value-50-gauge-thickness-20.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-0-vertical.png b/test/value_bar_test/goldens/value-bar-value-0-vertical.png index ad9bba14..5b15e798 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-0-vertical.png and b/test/value_bar_test/goldens/value-bar-value-0-vertical.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-0.png b/test/value_bar_test/goldens/value-bar-value-0.png index 59ba1f11..c001da69 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-0.png and b/test/value_bar_test/goldens/value-bar-value-0.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-100-vertical.png b/test/value_bar_test/goldens/value-bar-value-100-vertical.png index 27e4c85a..36d90ec8 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-100-vertical.png and b/test/value_bar_test/goldens/value-bar-value-100-vertical.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-100.png b/test/value_bar_test/goldens/value-bar-value-100.png index d391485a..6d1aefe8 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-100.png and b/test/value_bar_test/goldens/value-bar-value-100.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-35-inverse-vertical.png b/test/value_bar_test/goldens/value-bar-value-35-inverse-vertical.png index b55e4ef7..0d81472c 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-35-inverse-vertical.png and b/test/value_bar_test/goldens/value-bar-value-35-inverse-vertical.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-35-inverse.png b/test/value_bar_test/goldens/value-bar-value-35-inverse.png index 1a16100f..799b0714 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-35-inverse.png and b/test/value_bar_test/goldens/value-bar-value-35-inverse.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-35-vertical.png b/test/value_bar_test/goldens/value-bar-value-35-vertical.png index 4ec520a2..72cca3e7 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-35-vertical.png and b/test/value_bar_test/goldens/value-bar-value-35-vertical.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-35.png b/test/value_bar_test/goldens/value-bar-value-35.png index 555e00b5..7d7b981d 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-35.png and b/test/value_bar_test/goldens/value-bar-value-35.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-50-vertical.png b/test/value_bar_test/goldens/value-bar-value-50-vertical.png index be1fcb2e..25fad489 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-50-vertical.png and b/test/value_bar_test/goldens/value-bar-value-50-vertical.png differ diff --git a/test/value_bar_test/goldens/value-bar-value-50.png b/test/value_bar_test/goldens/value-bar-value-50.png index 3212dd27..86b19ce8 100644 Binary files a/test/value_bar_test/goldens/value-bar-value-50.png and b/test/value_bar_test/goldens/value-bar-value-50.png differ