diff --git a/fptest_fpgui.lpk b/fptest_fpgui.lpk
index dac7e7c..d042f09 100644
--- a/fptest_fpgui.lpk
+++ b/fptest_fpgui.lpk
@@ -15,7 +15,7 @@
-
+
@@ -24,6 +24,10 @@
+
+
+
+
diff --git a/fptest_fpgui.pas b/fptest_fpgui.pas
index 8c922f0..de528ab 100644
--- a/fptest_fpgui.pas
+++ b/fptest_fpgui.pas
@@ -7,7 +7,7 @@
interface
uses
- GUITestRunner, formimages;
+ GUITestRunner, formimages, CustomGauge;
implementation
diff --git a/src/fpGUI/customgauge.pas b/src/fpGUI/customgauge.pas
new file mode 100644
index 0000000..06f3e82
--- /dev/null
+++ b/src/fpGUI/customgauge.pas
@@ -0,0 +1,119 @@
+{
+ This unit defines a custom Gauge descendant which improves the visibility
+ of the background. The background is what tells the end user the state
+ of the test run.
+
+ Copyright (c) 2011 by Graeme Geldenhuys
+ All rights reserved.
+}
+unit CustomGauge;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ fpg_base, fpg_main, fpg_gauge;
+
+type
+ TGUIRunnerGauge = class(TfpgBaseGauge)
+ protected
+ procedure BarDraw; override;
+ procedure BackgroundDraw; override;
+ published
+ property Align;
+ property Anchors;
+ property BorderStyle;
+ property Color;
+ property Enabled;
+ property FirstColor;
+ property Hint;
+ property Kind;
+ property MaxValue;
+ property MinValue;
+ property ParentShowHint;
+ property Progress;
+ property SecondColor;
+ property ShowHint;
+ property ShowText;
+ property Visible;
+ property OnShowHint;
+ end;
+
+
+implementation
+
+{ TGUIRunnerGauge }
+
+procedure TGUIRunnerGauge.BarDraw;
+var
+ BarLength: Longint;
+ SavedRect: TfpgRect;
+begin
+ SavedRect := FClientRect; // save client rect for text !!
+ with FClientRect do
+ begin
+ case FKind of
+ gkHorizontalBar:
+ begin
+ { now paint as normal }
+ BarLength := Longint(Trunc( (Width * Percentage) / 100.0 ) );
+ if BarLength > 0 then
+ begin
+ if BarLength > Width then
+ BarLength := Width;
+ Width := BarLength;
+ // left top
+ Canvas.SetColor(fpgLighter(Color, 45));
+ Canvas.DrawLine(Left, Bottom, Left, Top); // left
+ Canvas.DrawLine(Left, Top, Right, Top); // top
+ // right bottom
+ Canvas.SetColor(fpgDarker(Color, 45));
+ Canvas.DrawLine(Right, Top, Right, Bottom); // right
+ Canvas.DrawLine(Right, Bottom, Left, Bottom); // bottom
+ // inside gradient fill
+ InflateRect(FClientRect, -1, -1);
+ Canvas.GradientFill(FClientRect, Color, fpgLighter(Color, 45), gdVertical);
+ end; { if }
+ FClientRect := SavedRect;
+ end;
+ gkVerticalBar:
+ begin
+ inherited BarDraw;
+ end;
+ end; { case }
+ end; { FClientRect }
+end;
+
+procedure TGUIRunnerGauge.BackgroundDraw;
+begin
+ FClientRect.SetRect(0, 0, Width, Height);
+ with FClientRect do
+ begin
+ { Kind specific Bacground }
+ case FKind of
+ { Currently Text doesn't require additional Bacground }
+ { And so horizontal and vertical bar - Unless style requires it}
+ gkHorizontalBar:
+ begin
+ {Client area is Widget area, to start with}
+ Canvas.ClearClipRect;
+ Canvas.Clear(TfpgColor($c4c4c4));
+ { This must be adjusted according the selected style }
+ Canvas.SetColor(TfpgColor($999999));
+ Canvas.SetLineStyle(1, lsSolid);
+ Canvas.DrawRectangle(FClientRect);
+ { This must be completed and adjusted with border style }
+ InflateRect(FClientRect, -1, -1);
+ Canvas.SetLineStyle(1, lsSolid); // just in case background changed that
+ end;
+ else
+ begin
+ inherited BackgroundDraw;
+ end;
+ end;
+ end; { with }
+end;
+
+end.
+