mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 12:29:29 +02:00
gtk2: draw text with rotation
- rearrange extras - introduced TGtk2DeviceContext.DrawTextWithColor (mostly from 0009665 with modifications) - use DrawTextWithColor in TextOut and ExtTextOut git-svn-id: trunk@13987 -
This commit is contained in:
parent
cda31b86f8
commit
77989dc1e0
@ -1367,7 +1367,7 @@ end;
|
|||||||
------------------------------------------------------------------------------}
|
------------------------------------------------------------------------------}
|
||||||
function TGtkWidgetSet.CreateFontIndirect(const LogFont: TLogFont): HFONT;
|
function TGtkWidgetSet.CreateFontIndirect(const LogFont: TLogFont): HFONT;
|
||||||
begin
|
begin
|
||||||
Result:=CreateFontIndirectEx(LogFont,'');
|
Result := CreateFontIndirectEx(LogFont,'');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{------------------------------------------------------------------------------
|
{------------------------------------------------------------------------------
|
||||||
@ -3148,7 +3148,6 @@ begin
|
|||||||
|
|
||||||
if not IsValidDC(DC) then Exit(0);
|
if not IsValidDC(DC) then Exit(0);
|
||||||
if Count < -1 then Exit(0);
|
if Count < -1 then Exit(0);
|
||||||
|
|
||||||
|
|
||||||
// Don't try to use StrLen(Str) in cases count >= 0
|
// Don't try to use StrLen(Str) in cases count >= 0
|
||||||
// In those cases str is NOT required to have a null terminator !
|
// In those cases str is NOT required to have a null terminator !
|
||||||
|
@ -32,9 +32,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
glib2, gdk2pixbuf, pango, gdk2, gtk2,
|
glib2, gdk2pixbuf, pango, gdk2, gtk2,
|
||||||
// Classes, SysUtils, LCLIntf, LCLProc, LCLType, DynHashArray,
|
GtkExtra, GtkDef;
|
||||||
// GraphType, GtkExtra,
|
|
||||||
GtkDef;
|
|
||||||
|
|
||||||
|
|
||||||
type
|
type
|
||||||
@ -46,6 +44,7 @@ type
|
|||||||
protected
|
protected
|
||||||
function GetFunction: TGdkFunction; override;
|
function GetFunction: TGdkFunction; override;
|
||||||
public
|
public
|
||||||
|
procedure DrawTextWithColors(AText: PChar; ALength: LongInt; X, Y: Integer; FGColor, BGColor: PGdkColor);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
@ -31,4 +31,58 @@ begin
|
|||||||
Result := GCValues._function;
|
Result := GCValues._function;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TGtk2DeviceContext.DrawTextWithColors(AText: PChar; ALength: LongInt; X, Y: Integer; FGColor, BGColor: PGdkColor);
|
||||||
|
var
|
||||||
|
WidgetCont: PPangoContext;
|
||||||
|
newmatrix: TPangoMatrix;
|
||||||
|
oldmatrix: PPangoMatrix;
|
||||||
|
renderer: PPangoRenderer;
|
||||||
|
AFont: PGdiObject;
|
||||||
|
|
||||||
|
procedure SetColors(AFGColor, ABGColor: PGdkColor); inline;
|
||||||
|
begin
|
||||||
|
gdk_pango_renderer_set_override_color(renderer, PANGO_RENDER_PART_FOREGROUND, AFGColor);
|
||||||
|
gdk_pango_renderer_set_override_color(renderer, PANGO_RENDER_PART_UNDERLINE, AFGColor);
|
||||||
|
gdk_pango_renderer_set_override_color(renderer, PANGO_RENDER_PART_STRIKETHROUGH, AFGColor);
|
||||||
|
gdk_pango_renderer_set_override_color(renderer, PANGO_RENDER_PART_BACKGROUND, ABGColor);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
AFont := GetFont;
|
||||||
|
pango_layout_set_text(AFont^.GDIFontObject, AText, ALength);
|
||||||
|
|
||||||
|
if AFont^.LogFont.lfEscapement <> 0 then
|
||||||
|
begin
|
||||||
|
renderer := gdk_pango_renderer_get_default(gdk_screen_get_default());
|
||||||
|
gdk_pango_renderer_set_drawable(renderer, drawable);
|
||||||
|
gdk_pango_renderer_set_gc(renderer, GC);
|
||||||
|
SetColors(FGColor, BGColor);
|
||||||
|
|
||||||
|
WidgetCont := pango_layout_get_context(AFont^.GDIFontObject);
|
||||||
|
oldmatrix := pango_context_get_matrix(WidgetCont);
|
||||||
|
newmatrix.xx := 1.0;
|
||||||
|
newmatrix.xy := 0.0;
|
||||||
|
newmatrix.yx := 0.0;
|
||||||
|
newmatrix.yy := 1.0;
|
||||||
|
newmatrix.x0 := 0.0;
|
||||||
|
newmatrix.y0 := 0.0;
|
||||||
|
pango_matrix_translate(@newmatrix, X, Y);
|
||||||
|
pango_matrix_rotate(@newmatrix, AFont^.LogFont.lfEscapement div 10);
|
||||||
|
|
||||||
|
pango_context_set_matrix(WidgetCont, @newmatrix);
|
||||||
|
pango_layout_context_changed(AFont^.GDIFontObject);
|
||||||
|
pango_renderer_draw_layout(renderer, AFont^.GDIFontObject, X, Y);
|
||||||
|
|
||||||
|
//now reset
|
||||||
|
pango_context_set_matrix(WidgetCont, oldmatrix);
|
||||||
|
pango_layout_context_changed(AFont^.GDIFontObject);
|
||||||
|
|
||||||
|
SetColors(nil, nil);
|
||||||
|
gdk_pango_renderer_set_drawable(renderer, nil);
|
||||||
|
gdk_pango_renderer_set_gc(renderer, nil);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
gdk_draw_layout_with_colors(drawable, GC, X, Y, AFont^.GDIFontObject, FGColor, BGColor);
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,8 +52,63 @@ function gdk_x11_image_get_ximage(image:PGdkImage):PXImage;cdecl;external gdklib
|
|||||||
procedure laz_gdk_gc_set_dashes(gc:PGdkGC; dash_offset:gint;
|
procedure laz_gdk_gc_set_dashes(gc:PGdkGC; dash_offset:gint;
|
||||||
dashlist:Pgint8; n:gint); cdecl; external gdkdll name 'gdk_gc_set_dashes';
|
dashlist:Pgint8; n:gint); cdecl; external gdkdll name 'gdk_gc_set_dashes';
|
||||||
|
|
||||||
|
// - - - - - - - - - pango extras - - - - - - - - -
|
||||||
type
|
type
|
||||||
PPPangoAttrList = ^PPangoAttrList;
|
PPPangoAttrList = ^PPangoAttrList;
|
||||||
|
// pango 1.6
|
||||||
|
PPangoMatrix = ^TPangoMatrix;
|
||||||
|
TPangoMatrix = record
|
||||||
|
xx: double;
|
||||||
|
xy: double;
|
||||||
|
yx: double;
|
||||||
|
yy: double;
|
||||||
|
x0: double;
|
||||||
|
y0: double;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// pango 1.8
|
||||||
|
TPangoRenderer = pointer;
|
||||||
|
PPangoRenderer = ^TPangoRenderer;
|
||||||
|
TPangoRenderPart = (
|
||||||
|
PANGO_RENDER_PART_FOREGROUND,
|
||||||
|
PANGO_RENDER_PART_BACKGROUND,
|
||||||
|
PANGO_RENDER_PART_UNDERLINE,
|
||||||
|
PANGO_RENDER_PART_STRIKETHROUGH
|
||||||
|
);
|
||||||
|
|
||||||
|
// pango 1.16
|
||||||
|
PPangoGravity = ^TPangoGravity;
|
||||||
|
TPangoGravity = (
|
||||||
|
PANGO_GRAVITY_SOUTH,
|
||||||
|
PANGO_GRAVITY_EAST,
|
||||||
|
PANGO_GRAVITY_NORTH,
|
||||||
|
PANGO_GRAVITY_WEST,
|
||||||
|
PANGO_GRAVITY_AUTO
|
||||||
|
);
|
||||||
|
|
||||||
|
function pango_context_get_gravity(Context: PPangoContext): TPangoGravity; cdecl; external pangolib;
|
||||||
|
procedure pango_context_set_base_gravity(Context: PPangoContext; gravity: TPangoGravity); cdecl; external pangolib;
|
||||||
|
|
||||||
|
function pango_context_get_matrix(Context: PPangoContext): PPangoMatrix; cdecl; external pangolib;
|
||||||
|
procedure pango_context_set_matrix(context: PPangoContext; const matrix: PPangoMatrix); cdecl; external pangolib;
|
||||||
|
procedure pango_matrix_translate(matrix: PPangoMatrix; tx, ty: double); cdecl; external pangolib;
|
||||||
|
procedure pango_matrix_rotate(matrix: PPangoMatrix; degrees: double); cdecl; external pangolib;
|
||||||
|
|
||||||
|
function pango_font_description_get_gravity(desc: PPangoFontDescription): TPangoGravity; cdecl; external pangolib;
|
||||||
|
procedure pango_font_description_set_gravity(desc: PPangoFontDescription; gravity: TPangoGravity); cdecl; external pangolib;
|
||||||
|
|
||||||
|
function pango_attr_gravity_new(gravity: TPangoGravity): PPangoAttribute; cdecl; external pangolib;
|
||||||
|
|
||||||
|
procedure pango_renderer_draw_layout(renderer: PPangoRenderer; layout: PPangoLayout; x, y: Integer); cdecl; external pangolib;
|
||||||
|
|
||||||
|
function pango_version_check(required_major, required_minor, required_micro: integer): PChar; cdecl; external pangolib;
|
||||||
|
|
||||||
|
{$if defined(VER2_0) or defined(VER2_2_0)}
|
||||||
|
function pango_layout_get_font_description(layout:PPangoLayout):PPangoFontDescription; cdecl; external pangolib;
|
||||||
|
{$ifend}
|
||||||
|
|
||||||
|
// - - - - - - - - - gtk extras - - - - - - - - -
|
||||||
|
|
||||||
procedure gtk_im_context_get_preedit_string_laz(context:PGtkIMContext; str:PPgchar; attrs:PPPangoAttrList; cursor_pos:Pgint); cdecl; external gtklib name 'gtk_im_context_get_preedit_string';
|
procedure gtk_im_context_get_preedit_string_laz(context:PGtkIMContext; str:PPgchar; attrs:PPPangoAttrList; cursor_pos:Pgint); cdecl; external gtklib name 'gtk_im_context_get_preedit_string';
|
||||||
function gdk_event_new(_type: TGdkEventType): PGdkEvent; cdecl; external gdklib;
|
function gdk_event_new(_type: TGdkEventType): PGdkEvent; cdecl; external gdklib;
|
||||||
|
|
||||||
@ -68,7 +123,11 @@ procedure gtk_event_box_set_above_child(event_box: PGtkEventBox; visible_window:
|
|||||||
// gtk 2.6
|
// gtk 2.6
|
||||||
function gtk_cell_view_get_displayed_row(cell_view: Pointer): PGtkTreePath; cdecl; external gtklib name 'gtk_cell_view_get_displayed_row';
|
function gtk_cell_view_get_displayed_row(cell_view: Pointer): PGtkTreePath; cdecl; external gtklib name 'gtk_cell_view_get_displayed_row';
|
||||||
|
|
||||||
|
// - - - - - - - - - gdk extras - - - - - - - - -
|
||||||
|
|
||||||
|
type
|
||||||
|
PGdkPangoRenderer = pointer;
|
||||||
|
|
||||||
// gdk 2.2
|
// gdk 2.2
|
||||||
procedure gdk_display_get_pointer(display : PGdkDisplay; screen :PGdkScreen; x :Pgint; y : Pgint; mask : PGdkModifierType); cdecl; external gdklib;
|
procedure gdk_display_get_pointer(display : PGdkDisplay; screen :PGdkScreen; x :Pgint; y : Pgint; mask : PGdkModifierType); cdecl; external gdklib;
|
||||||
function gdk_display_get_default:PGdkDisplay; cdecl; external gdklib;
|
function gdk_display_get_default:PGdkDisplay; cdecl; external gdklib;
|
||||||
@ -83,6 +142,12 @@ function gdk_cursor_new_from_pixbuf(display: PGdkDisplay; pixbuf: PGdkPixbuf; x,
|
|||||||
function gdk_display_get_default_cursor_size(display: PGdkDisplay): guint; cdecl; external gdklib;
|
function gdk_display_get_default_cursor_size(display: PGdkDisplay): guint; cdecl; external gdklib;
|
||||||
procedure gdk_display_get_maximal_cursor_size(display: PGdkDisplay; w, h: pguint); cdecl; external gdklib;
|
procedure gdk_display_get_maximal_cursor_size(display: PGdkDisplay; w, h: pguint); cdecl; external gdklib;
|
||||||
|
|
||||||
|
// gdk 2.6
|
||||||
|
function gdk_pango_renderer_get_default(screen: PGdkScreen): PPangoRenderer; cdecl; external gdklib;
|
||||||
|
procedure gdk_pango_renderer_set_drawable(gdk_renderer: PGdkPangoRenderer; drawable: PGdkDrawable); cdecl; external gdklib;
|
||||||
|
procedure gdk_pango_renderer_set_gc(gdk_renderer: PGdkPangoRenderer; gc: PGdkGC); cdecl; external gdklib;
|
||||||
|
procedure gdk_pango_renderer_set_override_color(gdk_renderer: PGdkPangoRenderer; part: TPangoRenderPart; color: PGdkColor); cdecl; external gdklib;
|
||||||
|
|
||||||
{$ifdef GTK_2_8}
|
{$ifdef GTK_2_8}
|
||||||
// gdk 2.8
|
// gdk 2.8
|
||||||
procedure gdk_display_warp_pointer(display: PGdkDisplay; screen: PGdkScreen; x, y: gint); cdecl; external gdklib;
|
procedure gdk_display_warp_pointer(display: PGdkDisplay; screen: PGdkScreen; x, y: gint); cdecl; external gdklib;
|
||||||
@ -95,42 +160,3 @@ function gdk_screen_is_composited(screen: PGdkScreen): gboolean; cdecl; external
|
|||||||
function gdk_display_supports_cursor_alpha(display: PGdkDisplay): gBoolean; cdecl; external gdklib;
|
function gdk_display_supports_cursor_alpha(display: PGdkDisplay): gBoolean; cdecl; external gdklib;
|
||||||
function gdk_display_supports_cursor_color(display: PGdkDisplay): gBoolean; cdecl; external gdklib;
|
function gdk_display_supports_cursor_color(display: PGdkDisplay): gBoolean; cdecl; external gdklib;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pango 1.6
|
|
||||||
type
|
|
||||||
PPangoMatrix = ^TPangoMatrix;
|
|
||||||
TPangoMatrix = record
|
|
||||||
xx: double;
|
|
||||||
xy: double;
|
|
||||||
yx: double;
|
|
||||||
yy: double;
|
|
||||||
x0: double;
|
|
||||||
y0: double;
|
|
||||||
end;
|
|
||||||
|
|
||||||
// pango 1.16
|
|
||||||
PPangoGravity = ^TPangoGravity;
|
|
||||||
TPangoGravity = (
|
|
||||||
PANGO_GRAVITY_SOUTH,
|
|
||||||
PANGO_GRAVITY_EAST,
|
|
||||||
PANGO_GRAVITY_NORTH,
|
|
||||||
PANGO_GRAVITY_WEST,
|
|
||||||
PANGO_GRAVITY_AUTO
|
|
||||||
);
|
|
||||||
|
|
||||||
function pango_context_get_gravity(Context: PPangoContext): TPangoGravity; cdecl; external pangolib;
|
|
||||||
procedure pango_context_set_base_gravity(Context: PPangoContext; gravity: TPangoGravity); cdecl; external pangolib;
|
|
||||||
|
|
||||||
function pango_context_get_matrix(Context: PPangoContext): PPangoMatrix; cdecl; external pangolib;
|
|
||||||
procedure pango_context_set_matrix(context: PPangoContext; const matrix: PPangoMatrix); cdecl; external pangolib;
|
|
||||||
|
|
||||||
function pango_font_description_get_gravity(desc: PPangoFontDescription): TPangoGravity; cdecl; external pangolib;
|
|
||||||
procedure pango_font_description_set_gravity(desc: PPangoFontDescription; gravity: TPangoGravity); cdecl; external pangolib;
|
|
||||||
|
|
||||||
function pango_attr_gravity_new(gravity: TPangoGravity): PPangoAttribute; cdecl; external pangolib;
|
|
||||||
|
|
||||||
function pango_version_check(required_major, required_minor, required_micro: integer): PChar; cdecl; external pangolib;
|
|
||||||
|
|
||||||
{$if defined(VER2_0) or defined(VER2_2_0)}
|
|
||||||
function pango_layout_get_font_description(layout:PPangoLayout):PPangoFontDescription; cdecl; external pangolib;
|
|
||||||
{$ifend}
|
|
||||||
|
@ -41,7 +41,7 @@ function TGtk2WidgetSet.TextUTF8Out(DC: HDC; X, Y: Integer; Str: PChar;
|
|||||||
Count: Longint): Boolean;
|
Count: Longint): Boolean;
|
||||||
begin
|
begin
|
||||||
// all fonts are UTF-8 under gtk2 => no mapping needed
|
// all fonts are UTF-8 under gtk2 => no mapping needed
|
||||||
Result:=TextOut(DC,X,Y,Str,Count);
|
Result := TextOut(DC, X, Y, Str, Count);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TGtk2WidgetSet.ComboBoxDropDown(Handle: HWND; DropDown: boolean): boolean;
|
function TGtk2WidgetSet.ComboBoxDropDown(Handle: HWND; DropDown: boolean): boolean;
|
||||||
|
@ -339,7 +339,7 @@ end;
|
|||||||
function TGtk2WidgetSet.ExtTextOut(DC: HDC; X, Y: Integer; Options: Longint;
|
function TGtk2WidgetSet.ExtTextOut(DC: HDC; X, Y: Integer; Options: Longint;
|
||||||
Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean;
|
Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean;
|
||||||
var
|
var
|
||||||
DevCtx: TGtkDeviceContext absolute DC;
|
DevCtx: TGtk2DeviceContext absolute DC;
|
||||||
|
|
||||||
LineStart, LineEnd, StrEnd: PChar;
|
LineStart, LineEnd, StrEnd: PChar;
|
||||||
Width, Height: Integer;
|
Width, Height: Integer;
|
||||||
@ -347,7 +347,6 @@ var
|
|||||||
TxtPt: TPoint;
|
TxtPt: TPoint;
|
||||||
DCOrigin: TPoint;
|
DCOrigin: TPoint;
|
||||||
Foreground: PGDKColor;
|
Foreground: PGDKColor;
|
||||||
UseFont: PPangoLayout;
|
|
||||||
CurDx: PInteger;
|
CurDx: PInteger;
|
||||||
CurStr: PChar;
|
CurStr: PChar;
|
||||||
|
|
||||||
@ -356,27 +355,21 @@ var
|
|||||||
CurScreenX: LongInt;
|
CurScreenX: LongInt;
|
||||||
CharLen: LongInt;
|
CharLen: LongInt;
|
||||||
begin
|
begin
|
||||||
if (Dx<>nil)
|
if (Dx <> nil) then
|
||||||
then begin
|
begin
|
||||||
CurScreenX:=X;
|
CurScreenX := X;
|
||||||
while CurCount>0 do begin
|
while CurCount > 0 do
|
||||||
CharLen:=UTF8CharacterLength(CurStr);
|
begin
|
||||||
//gdk_draw_glyphs(DevCtx.drawable,DevCtx.gc );
|
CharLen := UTF8CharacterLength(CurStr);
|
||||||
pango_layout_set_text(UseFont, CurStr, CharLen);
|
DevCtx.DrawTextWithColors(CurStr, CharLen, CurScreenX, Y, Foreground, nil);
|
||||||
gdk_draw_layout_with_colors(DevCtx.drawable, DevCtx.GC, CurScreenX, Y,
|
inc(CurScreenX, CurDx^);
|
||||||
UseFont, Foreground, nil);
|
|
||||||
//gdk_draw_rectangle(DevCtx.Drawable,DevCtx.GC,1,CurScreenX,Y,3,3);
|
|
||||||
inc(CurScreenX,CurDx^);
|
|
||||||
inc(CurDx);
|
inc(CurDx);
|
||||||
inc(CurStr,CharLen);
|
inc(CurStr, CharLen);
|
||||||
dec(CurCount,CharLen);
|
dec(CurCount, CharLen);
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else begin
|
else
|
||||||
pango_layout_set_text(UseFont, Str, Count);
|
DevCtx.DrawTextWithColors(Str, Count, X, Y, Foreground, nil);
|
||||||
gdk_draw_layout_with_colors(DevCtx.drawable, DevCtx.GC, X, Y, UseFont,
|
|
||||||
Foreground, nil);
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
@ -395,11 +388,9 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
UseFont:=GetGtkFont(DevCtx);
|
|
||||||
|
|
||||||
// to reduce flickering calculate first and then paint
|
// to reduce flickering calculate first and then paint
|
||||||
|
|
||||||
DCOrigin:=DevCtx.Offset;
|
DCOrigin := DevCtx.Offset;
|
||||||
|
|
||||||
if (Options and ETO_CLIPPED) <> 0
|
if (Options and ETO_CLIPPED) <> 0
|
||||||
then begin
|
then begin
|
||||||
@ -434,26 +425,28 @@ begin
|
|||||||
CurDx:=Dx;
|
CurDx:=Dx;
|
||||||
CurStr:=Str;
|
CurStr:=Str;
|
||||||
LineStart:=Str;
|
LineStart:=Str;
|
||||||
if LineLen < 0 then begin
|
if LineLen < 0 then
|
||||||
|
begin
|
||||||
LineLen:=Count;
|
LineLen:=Count;
|
||||||
if Count> 0 then
|
if Count> 0 then
|
||||||
DoTextOut(TxtPt.X, TxtPt.Y, LineStart, LineLen);
|
DoTextOut(TxtPt.X, TxtPt.Y, LineStart, LineLen);
|
||||||
end else
|
end else
|
||||||
Begin //write multiple lines
|
begin //write multiple lines
|
||||||
StrEnd:=Str+Count;
|
StrEnd := Str + Count;
|
||||||
while LineStart < StrEnd do begin
|
while LineStart < StrEnd do
|
||||||
LineEnd:=LineStart+LineLen;
|
begin
|
||||||
|
LineEnd := LineStart + LineLen;
|
||||||
if LineLen>0 then
|
if LineLen>0 then
|
||||||
DoTextOut(TxtPt.X, TxtPt.Y, LineStart, LineLen);
|
DoTextOut(TxtPt.X, TxtPt.Y, LineStart, LineLen);
|
||||||
inc(TxtPt.Y,LineHeight);
|
inc(TxtPt.Y, LineHeight);
|
||||||
LineStart:=LineEnd+1; // skip #13
|
LineStart := LineEnd + 1; // skip #13
|
||||||
if (LineStart<StrEnd) and (LineStart^ in [#10,#13])
|
if (LineStart<StrEnd) and (LineStart^ in [#10,#13])
|
||||||
and (LineStart^ <> LineEnd^) then
|
and (LineStart^ <> LineEnd^) then
|
||||||
inc(LineStart); // skip #10
|
inc(LineStart); // skip #10
|
||||||
Count:=StrEnd-LineStart;
|
Count := StrEnd - LineStart;
|
||||||
LineLen:=FindLineLen(LineStart,Count);
|
LineLen := FindLineLen(LineStart, Count);
|
||||||
if LineLen<0 then
|
if LineLen < 0 then
|
||||||
LineLen:=Count;
|
LineLen := Count;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -562,32 +555,28 @@ end;
|
|||||||
function TGtk2WidgetSet.TextOut(DC: HDC; X,Y : Integer; Str : Pchar;
|
function TGtk2WidgetSet.TextOut(DC: HDC; X,Y : Integer; Str : Pchar;
|
||||||
Count: Integer) : Boolean;
|
Count: Integer) : Boolean;
|
||||||
var
|
var
|
||||||
DevCtx: TGtkDeviceContext absolute DC;
|
DevCtx: TGtk2DeviceContext absolute DC;
|
||||||
DCOrigin: TPoint;
|
DCOrigin: TPoint;
|
||||||
yOffset: integer;
|
yOffset: integer;
|
||||||
UseFont: PPangoLayout;
|
|
||||||
begin
|
begin
|
||||||
Result := IsValidDC(DC);
|
Result := IsValidDC(DC);
|
||||||
if not Result then Exit;
|
if not Result then Exit;
|
||||||
if Count <= 0 then Exit;
|
if Count <= 0 then Exit;
|
||||||
|
|
||||||
UseFont := GetGtkFont(DevCtx);
|
|
||||||
UpdateDCTextMetric(DevCtx);
|
UpdateDCTextMetric(DevCtx);
|
||||||
DCOrigin := DevCtx.Offset;
|
DCOrigin := DevCtx.Offset;
|
||||||
|
|
||||||
with DevCtx.DCTextMetric.TextMetric do
|
with DevCtx.DCTextMetric.TextMetric do
|
||||||
yOffset:= tmHeight-tmDescent-tmAscent;
|
yOffset := tmHeight-tmDescent-tmAscent;
|
||||||
if yOffset<0 then yOffset:=0;
|
if yOffset < 0 then
|
||||||
|
yOffset := 0;
|
||||||
|
|
||||||
DevCtx.SelectedColors := dcscCustom;
|
DevCtx.SelectedColors := dcscCustom;
|
||||||
EnsureGCColor(DC, dccCurrentTextColor, True, False);
|
EnsureGCColor(DC, dccCurrentTextColor, True, False);
|
||||||
|
|
||||||
pango_layout_set_text(UseFont, Str, Count);
|
DevCtx.DrawTextWithColors(Str, Count,
|
||||||
EnsureGCColor(DC, dccCurrentTextColor, True, False);
|
X + DCOrigin.X, Y + DCOrigin.Y + yOffset,
|
||||||
|
nil, nil);
|
||||||
//DebugLn(['TGtk2WidgetSet.TextOut Str="',copy(Str,1,Count),'" X=',X+DCOrigin.X,',',Y+DCOrigin.Y+yOffset]);
|
|
||||||
gdk_draw_layout_with_colors(DevCtx.drawable, DevCtx.GC,
|
|
||||||
X+DCOrigin.X, Y+DCOrigin.Y+yOffset, UseFont, nil, nil);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TGtk2WidgetSet.UpdateWindow(Handle: HWND): Boolean;
|
function TGtk2WidgetSet.UpdateWindow(Handle: HWND): Boolean;
|
||||||
|
Loading…
Reference in New Issue
Block a user