mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-03 14:07:27 +01:00
TAChart: Make text output code aware of SetXor mode instead of direct call to DrawXorText
git-svn-id: trunk@38438 -
This commit is contained in:
parent
220eac068b
commit
3c118fcf49
@ -113,8 +113,8 @@ type
|
|||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses
|
uses
|
||||||
FPCanvas, Graphics, GraphMath, Math, SysUtils, Types,
|
GraphMath, Math, SysUtils, Types,
|
||||||
TAChartAxis, TACustomSeries, TADrawerCanvas, TAGeometry;
|
TAChartAxis, TACustomSeries, TAGeometry;
|
||||||
|
|
||||||
const
|
const
|
||||||
DEF_DISTANCE_FORMAT = '%0:.9g';
|
DEF_DISTANCE_FORMAT = '%0:.9g';
|
||||||
@ -225,10 +225,7 @@ begin
|
|||||||
DrawPointer(PointerEnd, p2);
|
DrawPointer(PointerEnd, p2);
|
||||||
if Marks.Visible then begin
|
if Marks.Visible then begin
|
||||||
p1 := (p1 + p2) div 2;
|
p1 := (p1 + p2) div 2;
|
||||||
if EffectiveDrawingMode = tdmNormal then
|
Marks.DrawLabel(FChart.Drawer, p1, p1, GetDistanceText, dummy)
|
||||||
Marks.DrawLabel(FChart.Drawer, p1, p1, GetDistanceText, dummy)
|
|
||||||
else
|
|
||||||
DrawXorText(FChart.Canvas, p1, GetDistanceText);
|
|
||||||
end;
|
end;
|
||||||
inherited;
|
inherited;
|
||||||
end;
|
end;
|
||||||
|
|||||||
@ -75,7 +75,6 @@ type
|
|||||||
|
|
||||||
function CanvasGetFontOrientationFunc(AFont: TFPCustomFont): Integer;
|
function CanvasGetFontOrientationFunc(AFont: TFPCustomFont): Integer;
|
||||||
function ChartColorSysToFPColor(AChartColor: TChartColor): TFPColor;
|
function ChartColorSysToFPColor(AChartColor: TChartColor): TFPColor;
|
||||||
procedure DrawXorText(ACanvas: TCanvas; APoint: TPoint; const AText: String);
|
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -96,28 +95,6 @@ begin
|
|||||||
Result := ChartColorToFPColor(ColorToRGB(AChartColor));
|
Result := ChartColorToFPColor(ColorToRGB(AChartColor));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure DrawXorText(ACanvas: TCanvas; APoint: TPoint; const AText: String);
|
|
||||||
var
|
|
||||||
bmp: TBitmap;
|
|
||||||
ext: TPoint;
|
|
||||||
begin
|
|
||||||
ext := ACanvas.TextExtent(AText);
|
|
||||||
bmp := TBitmap.Create;
|
|
||||||
try
|
|
||||||
bmp.SetSize(ext.X, ext.Y);
|
|
||||||
bmp.Canvas.Brush.Style := bsClear;
|
|
||||||
bmp.Canvas.Font := ACanvas.Font;
|
|
||||||
bmp.Canvas.Font.Color := clWhite;
|
|
||||||
bmp.Canvas.TextOut(0, 0, AText);
|
|
||||||
APoint -= ext div 2;
|
|
||||||
BitBlt(
|
|
||||||
ACanvas.Handle, APoint.X, APoint.Y, ext.X, ext.Y,
|
|
||||||
bmp.Canvas.Handle, 0, 0, SRCINVERT);
|
|
||||||
finally
|
|
||||||
bmp.Free;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
{ TCanvasDrawer }
|
{ TCanvasDrawer }
|
||||||
|
|
||||||
procedure TCanvasDrawer.AddToFontOrientation(ADelta: Integer);
|
procedure TCanvasDrawer.AddToFontOrientation(ADelta: Integer);
|
||||||
@ -304,8 +281,39 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCanvasDrawer.SimpleTextOut(AX, AY: Integer; const AText: String);
|
procedure TCanvasDrawer.SimpleTextOut(AX, AY: Integer; const AText: String);
|
||||||
|
|
||||||
|
procedure DrawXorText;
|
||||||
|
var
|
||||||
|
bmp: TBitmap;
|
||||||
|
p, ext, bmpSize: TPoint;
|
||||||
|
a: Double;
|
||||||
|
begin
|
||||||
|
ext := FCanvas.TextExtent(AText);
|
||||||
|
a := OrientToRad(FCanvas.Font.Orientation);
|
||||||
|
bmpSize := MeasureRotatedRect(ext, a);
|
||||||
|
p := bmpSize div 2 - RotatePoint(ext div 2, -a);
|
||||||
|
|
||||||
|
bmp := TBitmap.Create;
|
||||||
|
try
|
||||||
|
bmp.SetSize(bmpSize.X, bmpSize.Y);
|
||||||
|
bmp.Canvas.Brush.Style := bsClear;
|
||||||
|
bmp.Canvas.Font := FCanvas.Font;
|
||||||
|
bmp.Canvas.Font.Color := clWhite;
|
||||||
|
bmp.Canvas.TextOut(p.X, p.Y, AText);
|
||||||
|
bmp.Canvas.Pen.Color := clWhite;
|
||||||
|
BitBlt(
|
||||||
|
FCanvas.Handle, AX - p.X, AY - p.Y, bmpSize.X, bmpSize.Y,
|
||||||
|
bmp.Canvas.Handle, 0, 0, SRCINVERT);
|
||||||
|
finally
|
||||||
|
bmp.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
FCanvas.TextOut(AX, AY, AText);
|
if FXor then
|
||||||
|
DrawXorText
|
||||||
|
else
|
||||||
|
FCanvas.TextOut(AX, AY, AText);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user