From 2bc72af1ccadad45bbc07b81cb22fe1b7ec01252 Mon Sep 17 00:00:00 2001 From: Graeme Geldenhuys Date: Thu, 29 Apr 2010 10:56:45 +0200 Subject: TRGBTriple conflicts with a declaration in the Windows unit. * I introduced a new record type TFPColor (same as the declaration in the FPImage unit. I also introduced new conversion functions that work with TFPColor. * I marked the TRGBTriple type as deprecated. * I replaced all TRGBTriple usage with TFPColor. --- src/corelib/fpg_base.pas | 68 ++++++++++++++++++++++++++++++++-------------- src/corelib/fpg_wuline.pas | 6 ++-- 2 files changed, 50 insertions(+), 24 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/fpg_base.pas b/src/corelib/fpg_base.pas index b3595300..08075076 100644 --- a/src/corelib/fpg_base.pas +++ b/src/corelib/fpg_base.pas @@ -40,6 +40,14 @@ type Green: word; Blue: word; Alpha: word; + end deprecated; + + // Same declaration as in FPImage unit, but we don't use FPImage yet, so declare it here + TFPColor = record + Red: word; + Green: word; + Blue: word; + Alpha: word; end; TWindowType = (wtChild, wtWindow, wtModalForm, wtPopup); @@ -600,8 +608,10 @@ function KeycodeToText(AKey: Word; AShiftState: TShiftState): string; function CheckClipboardKey(AKey: Word; AShiftstate: TShiftState): TClipboardKeyType; { Color } -function fpgColorToRGBTriple(const AColor: TfpgColor): TRGBTriple; -function RGBTripleTofpgColor(const AColor: TRGBTriple): TfpgColor; +function fpgColorToRGBTriple(const AColor: TfpgColor): TRGBTriple; deprecated; +function fpgColorToFPColor(const AColor: TfpgColor): TFPColor; +function RGBTripleTofpgColor(const AColor: TRGBTriple): TfpgColor; deprecated; +function FPColorTofpgColor(const AColor: TFPColor): TfpgColor; function fpgGetRed(const AColor: TfpgColor): word; function fpgGetGreen(const AColor: TfpgColor): word; function fpgGetBlue(const AColor: TfpgColor): word; @@ -806,7 +816,7 @@ begin end { if/else } end; -function fpgColorToRGBTriple(const AColor: TfpgColor): TRGBTriple; +function fpgColorToRGBTriple(const AColor: TfpgColor): TRGBTriple; deprecated; begin with Result do begin @@ -817,7 +827,23 @@ begin end end; -function RGBTripleTofpgColor(const AColor: TRGBTriple): TfpgColor; +function fpgColorToFPColor(const AColor: TfpgColor): TFPColor; +begin + with Result do + begin + Red := fpgGetRed(AColor); + Green := fpgGetGreen(AColor); + Blue := fpgGetBlue(AColor); +// Alpha := fpgGetAlpha(AColor); + end +end; + +function RGBTripleTofpgColor(const AColor: TRGBTriple): TfpgColor; deprecated; +begin + Result := AColor.Blue or (AColor.Green shl 8) or (AColor.Red shl 16);// or (AColor.Alpha shl 32); +end; + +function FPColorTofpgColor(const AColor: TFPColor): TfpgColor; begin Result := AColor.Blue or (AColor.Green shl 8) or (AColor.Red shl 16);// or (AColor.Alpha shl 32); end; @@ -860,16 +886,16 @@ end; function fpgGetAvgColor(const AColor1, AColor2: TfpgColor): TfpgColor; var - c1, c2: TRGBTriple; - avg: TRGBTriple; + c1, c2: TFPColor; + avg: TFPColor; begin - c1 := fpgColorToRGBTriple(AColor1); - c2 := fpgColorToRGBTriple(AColor2); + c1 := fpgColorToFPColor(AColor1); + c2 := fpgColorToFPColor(AColor2); avg.Red := c1.Red + (c2.Red - c1.Red) div 2; avg.Green := c1.Green + (c2.Green - c1.Green) div 2; avg.Blue := c1.Blue + (c2.Blue - c1.Blue) div 2; avg.Alpha := c1.Alpha + (c2.Alpha - c1.Alpha) div 2; - Result := RGBTripleTofpgColor(avg); + Result := FPColorTofpgColor(avg); end; function PtInRect(const ARect: TfpgRect; const APoint: TPoint): Boolean; @@ -1455,15 +1481,15 @@ end; procedure TfpgCanvasBase.GradientFill(ARect: TfpgRect; AStart, AStop: TfpgColor; ADirection: TGradientDirection); var - RGBStart: TRGBTriple; - RGBStop: TRGBTriple; + RGBStart: TFPColor; + RGBStop: TFPColor; RDiff, GDiff, BDiff: Integer; count: Integer; i: Integer; - newcolor: TRGBTriple; + newcolor: TFPColor; begin - RGBStart := fpgColorToRGBTriple(fpgColorToRGB(AStart)); - RGBStop := fpgColorToRGBTriple(fpgColorToRGB(AStop)); + RGBStart := fpgColorToFPColor(fpgColorToRGB(AStart)); + RGBStop := fpgColorToFPColor(fpgColorToRGB(AStop)); if ADirection = gdVertical then count := ARect.Bottom - ARect.Top @@ -1480,7 +1506,7 @@ begin newcolor.Red := RGBStart.Red + (i * RDiff) div count; newcolor.Green := RGBStart.Green + (i * GDiff) div count; newcolor.Blue := RGBStart.Blue + (i * BDiff) div count; - SetColor(RGBTripleTofpgColor(newcolor)); + SetColor(FPColorTofpgColor(newcolor)); // We have to overshoot by 1 pixel as DrawLine paints 1 pixel short (by design) if ADirection = gdHorizontal then @@ -1689,7 +1715,7 @@ var contributions: array[0..10] of TfpgInterpolationContribution; dif, w, gamma, a: double; c: TfpgColor; - rgb: TRGBTriple; + rgb: TFPColor; begin for x := 0 to Width - 1 do begin @@ -1733,7 +1759,7 @@ begin with contributions[r] do begin c := image.colors[place, y]; - rgb := fpgColorToRGBTriple(c); + rgb := fpgColorToFPColor(c); a := weight; // * rgb.Alpha / $FFFF; re := re + a * rgb.Red; gr := gr + a * rgb.Green; @@ -1747,7 +1773,7 @@ begin blue := ColorRound(bl); // alpha := ColorRound(gamma * $FFFF); end; - tempimage.colors[x, y] := RGBTripleTofpgColor(rgb); + tempimage.colors[x, y] := FPColorTofpgColor(rgb); end; end; end; @@ -1760,7 +1786,7 @@ var contributions: array[0..10] of TfpgInterpolationContribution; dif, w, gamma, a: double; c: TfpgColor; - rgb: TRGBTriple; + rgb: TFPColor; begin for y := 0 to Height - 1 do begin @@ -1804,7 +1830,7 @@ begin with contributions[r] do begin c := tempimage.colors[x, place]; - rgb := fpgColorToRGBTriple(c); + rgb := fpgColorToFPColor(c); a := weight;// * rgb.alpha / $FFFF; re := re + a * rgb.red; gr := gr + a * rgb.green; @@ -1818,7 +1844,7 @@ begin blue := ColorRound(bl); // alpha := ColorRound(gamma * $FFFF); end; - Canvas.Pixels[x + dx, y + dy] := RGBTripleTofpgColor(rgb); + Canvas.Pixels[x + dx, y + dy] := FPColorTofpgColor(rgb); end; end; end; diff --git a/src/corelib/fpg_wuline.pas b/src/corelib/fpg_wuline.pas index a67714f1..cfed0a73 100644 --- a/src/corelib/fpg_wuline.pas +++ b/src/corelib/fpg_wuline.pas @@ -44,7 +44,7 @@ type // Blend a pixel with the current colour procedure AlphaBlendPixel(ACanvas: TfpgCanvas; X, Y: integer; R, G, B: word; ARatio: Double); var - LBack, LNew: TRGBTriple; + LBack, LNew: TFPColor; LMinusRatio: Double; begin if (X < 0) or (X > TCanvasHack(ACanvas).FWindow.Width - 1) or (Y < 0) or @@ -52,11 +52,11 @@ begin Exit; // clipping LMinusRatio := 1 - ARatio; - LBack := fpgColorToRGBTriple(ACanvas.Pixels[X, Y]); + LBack := fpgColorToFPColor(ACanvas.Pixels[X, Y]); LNew.Blue := round(B*ARatio + LBack.Blue*LMinusRatio); LNew.Green := round(G*ARatio + LBack.Green*LMinusRatio); LNew.Red := round(R*ARatio + LBack.Red*LMinusRatio); - ACanvas.Pixels[X, Y] := RGBTripleTofpgColor(LNew); + ACanvas.Pixels[X, Y] := FPColorTofpgColor(LNew); end; // Draw a anti-aliased line -- cgit v1.2.3-70-g09d2