LCL-GTK3: TextOut cleanup. Issue #36568, patch from CudaText man.

git-svn-id: trunk@62552 -
This commit is contained in:
juha 2020-01-14 16:26:35 +00:00
parent 872fe5d89c
commit 6e3d70b796
3 changed files with 9 additions and 45 deletions

View File

@ -4420,7 +4420,6 @@ begin
end;
end;
///
function CreateNewCodeBuffer(Descriptor: TProjectFileDescriptor;
NewOwner: TObject; NewFilename: string;
var NewCodeBuffer: TCodeBuffer; var NewUnitName: string): TModalResult;

View File

@ -220,8 +220,7 @@ type
function getPixel(x, y: Integer): TColor;
procedure drawRect(x1, y1, w, h: Integer; const AFill, ABorder: Boolean);
procedure drawRoundRect(x, y, w, h, rx, ry: Integer);
procedure drawText(x: Integer; y: Integer; const s: String); overload;
procedure drawText(x,y,w,h,flags: Integer; const s: String); overload;
procedure drawText(x, y: Integer; AText: PChar; ALen: Integer);
procedure drawEllipse(x, y, w, h: Integer; AFill, ABorder: Boolean);
procedure drawSurface(targetRect: PRect; Surface: Pcairo_surface_t; sourceRect: PRect;
mask: PGdkPixBuf; maskRect: PRect);
@ -1268,7 +1267,7 @@ begin
RoundRect(x, y, w, h, rx, ry);
end;
procedure TGtk3DeviceContext.drawText(x: Integer; y: Integer; const s: String);
procedure TGtk3DeviceContext.drawText(x, y: Integer; AText: PChar; ALen: Integer);
var
e: cairo_font_extents_t;
R: Double;
@ -1292,7 +1291,7 @@ begin
ColorToCairoRGB(TColor(CurrentTextColor), R, G , B);
cairo_set_source_rgb(Widget, R, G, B);
// writeln('DRAWINGTEXT ',S,' WITH R=',dbgs(R),' G=',dbgs(G),' B=',dbgs(B));
FCurrentFont.Layout^.set_text(PChar(S), length(S));
FCurrentFont.Layout^.set_text(AText, ALen);
// writeln('Family: ',FCurrentFont.Handle^.get_family,' size ',FCurrentFont.Handle^.get_size,' weight ',FCurrentFont.Handle^.get_weight);
pango_cairo_show_layout(Widget, FCurrentFont.Layout);
finally
@ -1300,35 +1299,6 @@ begin
end;
end;
procedure TGtk3DeviceContext.drawText(x, y, w, h, flags: Integer; const s: String
);
var
e: cairo_font_extents_t;
R: Double;
G: Double;
B: Double;
// dx, dy: Double;
begin
cairo_save(Widget);
try
// TranslateCairoToDevice;
// cairo_surface_get_device_offset(CairoSurface, @dx, @dy);
cairo_font_extents(Widget, @e);
if e.ascent <> 0 then
begin
// writeln('2.EXTENTS !!!! ',Format('%2.2n',[e.ascent]));
end;
cairo_move_to(Widget, x, y + e.ascent);
ColorToCairoRGB(CurrentTextColor, R, G , B);
cairo_set_source_rgb(Widget, R, G, B);
// cairo_show_text(Widget, PChar(s));
FCurrentFont.Layout^.set_text(PChar(S), length(S));
pango_cairo_show_layout(Widget, FCurrentFont.Layout);
finally
cairo_restore(Widget);
end;
end;
procedure TGtk3DeviceContext.drawEllipse(x, y, w, h: Integer; AFill, ABorder: Boolean);
var
save_matrix:cairo_matrix_t;

View File

@ -1560,7 +1560,7 @@ begin
if IsValidDC(DC) then
begin
Result := True;
TGtk3DeviceContext(DC).drawText(X, Y , Str);
TGtk3DeviceContext(DC).drawText(X, Y, Str, Count);
end;
end;
@ -4098,23 +4098,18 @@ begin
Result:=inherited SystemParametersInfo(uiAction, uiParam, pvParam, fWinIni);
end;
function TGtk3WidgetSet.TextOut(DC: HDC; X, Y: Integer; Str: Pchar;
Count: Integer): Boolean;
var
S: String;
function TGtk3WidgetSet.TextOut(DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): Boolean;
begin
// Result:=inherited TextOut(DC, X, Y, Str, Count);
{$IFDEF VerboseGtk3DeviceContext}
DebugLn('TGtk3WidgetSet.TextOut x=',dbgs(x),' y=',dbgs(y),' Text ',dbgs(Str),' count ',dbgs(Count));
DebugLn('TGtk3WidgetSet.TextOut X=',dbgs(x),' Y=',dbgs(y),' Text=',dbgs(Str),' Count=',dbgs(Count));
{$ENDIF}
Result := False;
if Count <= 0 then
Exit;
if IsValidDC(DC) then
begin
Result := True;
S := StrPas(Str);
if Count > 0 then
S := UTF8Copy(S, 1, Count);
TGtk3DeviceContext(DC).drawText(X, Y , S);
TGtk3DeviceContext(DC).drawText(X, Y, Str, Count);
end;
end;