mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-08 21:59:36 +01:00
LCL-GTK3: Housekeeping with minor fixes. Rename TGtk3DeviceContext Widget to pcr (pointer to Cairo). Issue #37933, patch from Anton Kavalenka.
git-svn-id: trunk@64031 -
This commit is contained in:
parent
c83c7f8279
commit
610353511b
@ -617,10 +617,7 @@ begin
|
|||||||
// inherited DCSetAntialiasing(CanvasHandle, AEnabled);
|
// inherited DCSetAntialiasing(CanvasHandle, AEnabled);
|
||||||
if IsValidDC(CanvasHandle) then
|
if IsValidDC(CanvasHandle) then
|
||||||
begin
|
begin
|
||||||
if AEnabled then
|
TGtk3DeviceContext(CanvasHandle).set_antialiasing(AEnabled);
|
||||||
cairo_set_antialias(TGtk3DeviceContext(CanvasHandle).Widget, CAIRO_ANTIALIAS_DEFAULT)
|
|
||||||
else
|
|
||||||
cairo_set_antialias(TGtk3DeviceContext(CanvasHandle).Widget, CAIRO_ANTIALIAS_NONE);
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
@ -222,7 +222,7 @@ type
|
|||||||
procedure FillAndStroke;
|
procedure FillAndStroke;
|
||||||
public
|
public
|
||||||
CairoSurface: Pcairo_surface_t;
|
CairoSurface: Pcairo_surface_t;
|
||||||
Widget: Pcairo_t;
|
pcr: Pcairo_t;
|
||||||
Parent: PGtkWidget;
|
Parent: PGtkWidget;
|
||||||
Window: PGdkWindow;
|
Window: PGdkWindow;
|
||||||
ParentPixmap: PGdkPixbuf;
|
ParentPixmap: PGdkPixbuf;
|
||||||
@ -269,6 +269,7 @@ type
|
|||||||
function ResetClip: Integer;
|
function ResetClip: Integer;
|
||||||
procedure TranslateCairoToDevice;
|
procedure TranslateCairoToDevice;
|
||||||
procedure Translate(APoint: TPoint);
|
procedure Translate(APoint: TPoint);
|
||||||
|
procedure set_antialiasing(aamode:boolean);
|
||||||
property BkMode: Integer read FBkMode write FBkMode;
|
property BkMode: Integer read FBkMode write FBkMode;
|
||||||
property CanRelease: Boolean read FCanRelease write FCanRelease;
|
property CanRelease: Boolean read FCanRelease write FCanRelease;
|
||||||
property CurrentBrush: TGtk3Brush read FCurrentBrush write FCurrentBrush;
|
property CurrentBrush: TGtk3Brush read FCurrentBrush write FCurrentBrush;
|
||||||
@ -1047,8 +1048,8 @@ var
|
|||||||
begin
|
begin
|
||||||
FColor := AValue;
|
FColor := AValue;
|
||||||
ColorToCairoRGB(FColor, ARed, AGreen, ABlue);
|
ColorToCairoRGB(FColor, ARed, AGreen, ABlue);
|
||||||
if Assigned(FContext) and Assigned(FContext.Widget) then
|
if Assigned(FContext) and Assigned(FContext.pcr) then
|
||||||
cairo_set_source_rgb(FContext.Widget, ARed, AGreen, ABlue);
|
cairo_set_source_rgb(FContext.pcr, ARed, AGreen, ABlue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
constructor TGtk3Pen.Create;
|
constructor TGtk3Pen.Create;
|
||||||
@ -1084,12 +1085,12 @@ end;
|
|||||||
procedure TGtk3Pen.setCosmetic(b: Boolean);
|
procedure TGtk3Pen.setCosmetic(b: Boolean);
|
||||||
begin
|
begin
|
||||||
FCosmetic := B;
|
FCosmetic := B;
|
||||||
if Assigned(FContext) and Assigned(FContext.Widget) then
|
if Assigned(FContext) and Assigned(FContext.pcr) then
|
||||||
begin
|
begin
|
||||||
if b then
|
if b then
|
||||||
cairo_set_line_width(FContext.Widget, 0)
|
cairo_set_line_width(FContext.pcr, 0)
|
||||||
else
|
else
|
||||||
cairo_set_line_width(FContext.Widget, 1);
|
cairo_set_line_width(FContext.pcr, 1);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1097,7 +1098,7 @@ procedure TGtk3Pen.setWidth(p1: Integer);
|
|||||||
begin
|
begin
|
||||||
FWidth := p1;
|
FWidth := p1;
|
||||||
if Assigned(FContext) then
|
if Assigned(FContext) then
|
||||||
cairo_set_line_width(FContext.Widget, p1);
|
cairo_set_line_width(FContext.pcr, p1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TGtk3Brush }
|
{ TGtk3Brush }
|
||||||
@ -1109,7 +1110,7 @@ begin
|
|||||||
FColor := AValue;
|
FColor := AValue;
|
||||||
ColorToCairoRGB(FColor, ARed, AGreen, ABlue);
|
ColorToCairoRGB(FColor, ARed, AGreen, ABlue);
|
||||||
if Assigned(FContext) then
|
if Assigned(FContext) then
|
||||||
cairo_set_source_rgb(FContext.Widget, ARed, AGreen, ABlue);
|
cairo_set_source_rgb(FContext.pcr, ARed, AGreen, ABlue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TGtk3Brush.SetStyle(AStyle: longword);
|
procedure TGtk3Brush.SetStyle(AStyle: longword);
|
||||||
@ -1240,7 +1241,7 @@ function TGtk3DeviceContext.GetOffset: TPoint;
|
|||||||
var
|
var
|
||||||
dx,dy: Double;
|
dx,dy: Double;
|
||||||
begin
|
begin
|
||||||
cairo_surface_get_device_offset(cairo_get_target(Widget), @dx, @dy);
|
cairo_surface_get_device_offset(cairo_get_target(pcr), @dx, @dy);
|
||||||
Result := Point(Round(dx), Round(dy));
|
Result := Point(Round(dx), Round(dy));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1264,7 +1265,7 @@ var
|
|||||||
begin
|
begin
|
||||||
dx := AValue.X;
|
dx := AValue.X;
|
||||||
dy := AValue.Y;
|
dy := AValue.Y;
|
||||||
cairo_surface_set_device_offset(cairo_get_target(Widget), dx, dy);
|
cairo_surface_set_device_offset(cairo_get_target(pcr), dx, dy);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TGtk3DeviceContext.setPen(AValue: TGtk3Pen);
|
procedure TGtk3DeviceContext.setPen(AValue: TGtk3Pen);
|
||||||
@ -1313,7 +1314,7 @@ begin
|
|||||||
if Self.FCurrentBrush.Style<>0 then
|
if Self.FCurrentBrush.Style<>0 then
|
||||||
begin
|
begin
|
||||||
if Assigned(Self.FCurrentBrush.brush_pattern) then
|
if Assigned(Self.FCurrentBrush.brush_pattern) then
|
||||||
cairo_set_source(Widget,Self.FCurrentBrush.brush_pattern);
|
cairo_set_source(pcr,Self.FCurrentBrush.brush_pattern);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1330,7 +1331,7 @@ end;
|
|||||||
procedure TGtk3DeviceContext.ApplyPen;
|
procedure TGtk3DeviceContext.ApplyPen;
|
||||||
procedure SetDash(d: array of double);
|
procedure SetDash(d: array of double);
|
||||||
begin
|
begin
|
||||||
cairo_set_dash(Widget, @d, High(d)+1, 0);
|
cairo_set_dash(pcr, @d, High(d)+1, 0);
|
||||||
end;
|
end;
|
||||||
var
|
var
|
||||||
cap: cairo_line_cap_t;
|
cap: cairo_line_cap_t;
|
||||||
@ -1340,15 +1341,15 @@ begin
|
|||||||
case FCurrentPen.Mode of
|
case FCurrentPen.Mode of
|
||||||
pmBlack: begin
|
pmBlack: begin
|
||||||
SetSourceColor(clBlack);
|
SetSourceColor(clBlack);
|
||||||
cairo_set_operator(Widget, CAIRO_OPERATOR_OVER);
|
cairo_set_operator(pcr, CAIRO_OPERATOR_OVER);
|
||||||
end;
|
end;
|
||||||
pmWhite: begin
|
pmWhite: begin
|
||||||
SetSourceColor(clWhite);
|
SetSourceColor(clWhite);
|
||||||
cairo_set_operator(Widget, CAIRO_OPERATOR_OVER);
|
cairo_set_operator(pcr, CAIRO_OPERATOR_OVER);
|
||||||
end;
|
end;
|
||||||
pmCopy: cairo_set_operator(Widget, CAIRO_OPERATOR_OVER);
|
pmCopy: cairo_set_operator(pcr, CAIRO_OPERATOR_OVER);
|
||||||
pmXor: cairo_set_operator(Widget, CAIRO_OPERATOR_XOR);
|
pmXor: cairo_set_operator(pcr, CAIRO_OPERATOR_XOR);
|
||||||
pmNotXor: cairo_set_operator(Widget, CAIRO_OPERATOR_XOR);
|
pmNotXor: cairo_set_operator(pcr, CAIRO_OPERATOR_XOR);
|
||||||
{pmNop,
|
{pmNop,
|
||||||
pmNot,
|
pmNot,
|
||||||
pmCopy,
|
pmCopy,
|
||||||
@ -1362,27 +1363,27 @@ begin
|
|||||||
pmMask,
|
pmMask,
|
||||||
pmNotMask,}
|
pmNotMask,}
|
||||||
else
|
else
|
||||||
cairo_set_operator(Widget, CAIRO_OPERATOR_OVER);
|
cairo_set_operator(pcr, CAIRO_OPERATOR_OVER);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if FCurrentPen.Cosmetic then
|
if FCurrentPen.Cosmetic then
|
||||||
cairo_set_line_width(Widget, 1.0)
|
cairo_set_line_width(pcr, 1.0)
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
w := FCurrentPen.Width;
|
w := FCurrentPen.Width;
|
||||||
if w = 0 then
|
if w = 0 then
|
||||||
w := 0.5;
|
w := 0.5;
|
||||||
cairo_set_line_width(Widget, w {* ScaleX}); //line_width is diameter of the pen circle
|
cairo_set_line_width(pcr, w {* ScaleX}); //line_width is diameter of the pen circle
|
||||||
end;
|
end;
|
||||||
|
|
||||||
case FCurrentPen.Style of
|
case FCurrentPen.Style of
|
||||||
psSolid: cairo_set_dash(Widget, nil, 0, 0);
|
psSolid: cairo_set_dash(pcr, nil, 0, 0);
|
||||||
psDash: SetDash(Dash_Dash);
|
psDash: SetDash(Dash_Dash);
|
||||||
psDot: SetDash(Dash_Dot);
|
psDot: SetDash(Dash_Dot);
|
||||||
psDashDot: SetDash(Dash_DashDot);
|
psDashDot: SetDash(Dash_DashDot);
|
||||||
psDashDotDot: SetDash(Dash_DashDotDot);
|
psDashDotDot: SetDash(Dash_DashDotDot);
|
||||||
else
|
else
|
||||||
cairo_set_dash(Widget, nil, 0, 0);
|
cairo_set_dash(pcr, nil, 0, 0);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
case FCurrentPen.EndCap of
|
case FCurrentPen.EndCap of
|
||||||
@ -1397,12 +1398,12 @@ begin
|
|||||||
psDash, psDot, psDashDot, psDashDotDot:
|
psDash, psDot, psDashDot, psDashDotDot:
|
||||||
cap := CAIRO_LINE_CAP_BUTT
|
cap := CAIRO_LINE_CAP_BUTT
|
||||||
end;
|
end;
|
||||||
cairo_set_line_cap(Widget, cap);
|
cairo_set_line_cap(pcr, cap);
|
||||||
|
|
||||||
case FCurrentPen.JoinStyle of
|
case FCurrentPen.JoinStyle of
|
||||||
pjsRound: cairo_set_line_join(Widget, CAIRO_LINE_JOIN_ROUND);
|
pjsRound: cairo_set_line_join(pcr, CAIRO_LINE_JOIN_ROUND);
|
||||||
pjsBevel: cairo_set_line_join(Widget, CAIRO_LINE_JOIN_BEVEL);
|
pjsBevel: cairo_set_line_join(pcr, CAIRO_LINE_JOIN_BEVEL);
|
||||||
pjsMiter: cairo_set_line_join(Widget, CAIRO_LINE_JOIN_MITER);
|
pjsMiter: cairo_set_line_join(pcr, CAIRO_LINE_JOIN_MITER);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1452,7 +1453,7 @@ begin
|
|||||||
ACairo := gdk_cairo_create(gdk_get_default_root_window);
|
ACairo := gdk_cairo_create(gdk_get_default_root_window);
|
||||||
gdk_cairo_get_clip_rectangle(ACairo, @ARect);
|
gdk_cairo_get_clip_rectangle(ACairo, @ARect);
|
||||||
CairoSurface := cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ARect.width, ARect.height);
|
CairoSurface := cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ARect.width, ARect.height);
|
||||||
Widget := cairo_create(CairoSurface);
|
pcr := cairo_create(CairoSurface);
|
||||||
|
|
||||||
ParentPixmap := gdk_pixbuf_get_from_surface(CairoSurface, 0, 0, ARect.width, ARect.height);
|
ParentPixmap := gdk_pixbuf_get_from_surface(CairoSurface, 0, 0, ARect.width, ARect.height);
|
||||||
FOwnsSurface := True;
|
FOwnsSurface := True;
|
||||||
@ -1466,18 +1467,18 @@ begin
|
|||||||
H := gtk_widget_get_allocated_height(AWidget);
|
H := gtk_widget_get_allocated_height(AWidget);
|
||||||
if W <= 0 then W := 1;
|
if W <= 0 then W := 1;
|
||||||
if H <= 0 then H := 1;
|
if H <= 0 then H := 1;
|
||||||
Widget := gdk_cairo_create(gtk_widget_get_window(AWidget));
|
pcr := gdk_cairo_create(gtk_widget_get_window(AWidget));
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
W := gtk_widget_get_allocated_width(AWidget);
|
W := gtk_widget_get_allocated_width(AWidget);
|
||||||
H := gtk_widget_get_allocated_height(AWidget);
|
H := gtk_widget_get_allocated_height(AWidget);
|
||||||
if W <= 0 then W := 1;
|
if W <= 0 then W := 1;
|
||||||
if H <= 0 then H := 1;
|
if H <= 0 then H := 1;
|
||||||
Widget := gdk_cairo_create(gtk_widget_get_window(AWidget));
|
pcr := gdk_cairo_create(gtk_widget_get_window(AWidget));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
if not FOwnsSurface then
|
if not FOwnsSurface then
|
||||||
CairoSurface := cairo_get_target(Widget);
|
CairoSurface := cairo_get_target(pcr);
|
||||||
CreateObjects;
|
CreateObjects;
|
||||||
(*
|
(*
|
||||||
FRopMode := R2_COPYPEN;
|
FRopMode := R2_COPYPEN;
|
||||||
@ -1510,10 +1511,10 @@ begin
|
|||||||
FCurrentTextColor := clBlack;
|
FCurrentTextColor := clBlack;
|
||||||
//AWindow^.get_geometry(@x, @y, @w, @h);
|
//AWindow^.get_geometry(@x, @y, @w, @h);
|
||||||
// ParentPixmap := gdk_pixbuf_get_from_window(AWindow, x, y, w, h);
|
// ParentPixmap := gdk_pixbuf_get_from_window(AWindow, x, y, w, h);
|
||||||
Widget := gdk_cairo_create(AWindow);
|
pcr := gdk_cairo_create(AWindow);
|
||||||
// gdk_cairo_set_source_pixbuf(Widget, ParentPixmap, 0, 0);
|
// gdk_cairo_set_source_pixbuf(Widget, ParentPixmap, 0, 0);
|
||||||
gdk_cairo_set_source_window(Widget, AWindow, 0, 0);
|
gdk_cairo_set_source_window(pcr, AWindow, 0, 0);
|
||||||
CairoSurface := cairo_get_target(Widget);
|
CairoSurface := cairo_get_target(pcr);
|
||||||
CreateObjects;
|
CreateObjects;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1537,8 +1538,8 @@ begin
|
|||||||
FCurrentTextColor := clBlack;
|
FCurrentTextColor := clBlack;
|
||||||
gdk_cairo_get_clip_rectangle(ACairo, @AGdkRect);
|
gdk_cairo_get_clip_rectangle(ACairo, @AGdkRect);
|
||||||
FvClipRect := RectFromGdkRect(AGdkRect);
|
FvClipRect := RectFromGdkRect(AGdkRect);
|
||||||
Widget := ACairo;
|
pcr := ACairo;
|
||||||
CairoSurface := cairo_get_target(Widget);
|
CairoSurface := cairo_get_target(pcr);
|
||||||
CreateObjects;
|
CreateObjects;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1548,14 +1549,14 @@ begin
|
|||||||
WriteLn('TGtk3DeviceContext.Destroy ',dbgHex(PtrUInt(Self)));
|
WriteLn('TGtk3DeviceContext.Destroy ',dbgHex(PtrUInt(Self)));
|
||||||
{$endif}
|
{$endif}
|
||||||
DeleteObjects;
|
DeleteObjects;
|
||||||
if FOwnsCairo and (Widget <> nil) then
|
if FOwnsCairo and (pcr <> nil) then
|
||||||
cairo_destroy(Widget);
|
cairo_destroy(pcr);
|
||||||
if (ParentPixmap <> nil) then
|
if (ParentPixmap <> nil) then
|
||||||
g_object_unref(ParentPixmap);
|
g_object_unref(ParentPixmap);
|
||||||
if FOwnsSurface and (CairoSurface <> nil) then
|
if FOwnsSurface and (CairoSurface <> nil) then
|
||||||
cairo_surface_destroy(CairoSurface);
|
cairo_surface_destroy(CairoSurface);
|
||||||
Parent := nil;
|
Parent := nil;
|
||||||
Widget := nil;
|
pcr := nil;
|
||||||
ParentPixmap := nil;
|
ParentPixmap := nil;
|
||||||
CairoSurface := nil;
|
CairoSurface := nil;
|
||||||
Window := nil;
|
Window := nil;
|
||||||
@ -1578,12 +1579,12 @@ begin
|
|||||||
FPen.Color := clBlack;
|
FPen.Color := clBlack;
|
||||||
FCurrentPen := FPen;
|
FCurrentPen := FPen;
|
||||||
FCurrentBrush := FBrush;
|
FCurrentBrush := FBrush;
|
||||||
FFont := TGtk3Font.Create(Widget, Parent);
|
FFont := TGtk3Font.Create(pcr, Parent);
|
||||||
FCurrentFont := FFont;
|
FCurrentFont := FFont;
|
||||||
FvImage := TGtk3Image.Create(nil, 1, 1, 8, CAIRO_FORMAT_ARGB32);
|
FvImage := TGtk3Image.Create(nil, 1, 1, 8, CAIRO_FORMAT_ARGB32);
|
||||||
FCurrentImage := FvImage;
|
FCurrentImage := FvImage;
|
||||||
|
|
||||||
cairo_get_matrix(Widget, @Matrix);
|
cairo_get_matrix(pcr, @Matrix);
|
||||||
// widget with menu or other non-client exclusions have offset in trasform matrix
|
// widget with menu or other non-client exclusions have offset in trasform matrix
|
||||||
fncOrigin:=Point(round(Matrix.x0),round(Matrix.y0));
|
fncOrigin:=Point(round(Matrix.x0),round(Matrix.y0));
|
||||||
end;
|
end;
|
||||||
@ -1604,10 +1605,10 @@ procedure TGtk3DeviceContext.drawPixel(x, y: Integer; AColor: TColor);
|
|||||||
// Seems that painting line from (a-1, b-1) to (a,b) gives one pixel
|
// Seems that painting line from (a-1, b-1) to (a,b) gives one pixel
|
||||||
begin
|
begin
|
||||||
SetSourceColor(AColor);
|
SetSourceColor(AColor);
|
||||||
cairo_set_line_width(Widget, 1);
|
cairo_set_line_width(pcr, 1);
|
||||||
cairo_move_to(Widget, x - PixelOffset, y - PixelOffset);
|
cairo_move_to(pcr, x - PixelOffset, y - PixelOffset);
|
||||||
cairo_line_to(Widget, x + PixelOffset, y + PixelOffset);
|
cairo_line_to(pcr, x + PixelOffset, y + PixelOffset);
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TGtk3DeviceContext.getPixel(x, y: Integer): TColor;
|
function TGtk3DeviceContext.getPixel(x, y: Integer): TColor;
|
||||||
@ -1627,24 +1628,24 @@ end;
|
|||||||
|
|
||||||
procedure TGtk3DeviceContext.drawRect(x1, y1, w, h: Integer; const AFill, ABorder: Boolean);
|
procedure TGtk3DeviceContext.drawRect(x1, y1, w, h: Integer; const AFill, ABorder: Boolean);
|
||||||
begin
|
begin
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
cairo_rectangle(Widget, x1 + PixelOffset, y1 + PixelOffset, w - 1, h - 1);
|
cairo_rectangle(pcr, x1 + PixelOffset, y1 + PixelOffset, w - 1, h - 1);
|
||||||
|
|
||||||
if AFill then
|
if AFill then
|
||||||
begin
|
begin
|
||||||
ApplyBrush;
|
ApplyBrush;
|
||||||
cairo_fill_preserve(Widget);
|
cairo_fill_preserve(pcr);
|
||||||
end;
|
end;
|
||||||
if ABorder then
|
if ABorder then
|
||||||
begin
|
begin
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
cairo_new_path(Widget);
|
cairo_new_path(pcr);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1653,7 +1654,8 @@ begin
|
|||||||
RoundRect(x, y, w, h, rx, ry);
|
RoundRect(x, y, w, h, rx, ry);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TGtk3DeviceContext.drawText(X, Y: Integer; AText: PChar; ALen: Integer);
|
procedure TGtk3DeviceContext.drawText(x, y: Integer; AText: PChar; ALen: Integer
|
||||||
|
);
|
||||||
var
|
var
|
||||||
R, G, B: Double;
|
R, G, B: Double;
|
||||||
gColor: TGdkColor;
|
gColor: TGdkColor;
|
||||||
@ -1662,14 +1664,14 @@ var
|
|||||||
UseBack: boolean;
|
UseBack: boolean;
|
||||||
ornt:integer;
|
ornt:integer;
|
||||||
begin
|
begin
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
cairo_move_to(Widget, X, Y);
|
cairo_move_to(pcr, X, Y);
|
||||||
ornt := Self.FCurrentFont.FLogFont.lfOrientation;
|
ornt := Self.FCurrentFont.FLogFont.lfOrientation;
|
||||||
if ornt<>0 then
|
if ornt<>0 then
|
||||||
cairo_rotate(Widget, - pi * (ornt / 10)/180);
|
cairo_rotate(pcr, - pi * (ornt / 10)/180);
|
||||||
ColorToCairoRGB(TColor(CurrentTextColor), R, G, B);
|
ColorToCairoRGB(TColor(CurrentTextColor), R, G, B);
|
||||||
cairo_set_source_rgb(Widget, R, G, B);
|
cairo_set_source_rgb(pcr, R, G, B);
|
||||||
|
|
||||||
FCurrentFont.Layout^.set_text(AText, ALen);
|
FCurrentFont.Layout^.set_text(AText, ALen);
|
||||||
|
|
||||||
@ -1683,7 +1685,7 @@ begin
|
|||||||
FCurrentFont.Layout^.set_attributes(AttrList);
|
FCurrentFont.Layout^.set_attributes(AttrList);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
pango_cairo_show_layout(Widget, FCurrentFont.Layout);
|
pango_cairo_show_layout(pcr, FCurrentFont.Layout);
|
||||||
|
|
||||||
if UseBack then
|
if UseBack then
|
||||||
begin
|
begin
|
||||||
@ -1691,7 +1693,7 @@ begin
|
|||||||
pango_attribute_destroy(Attr);
|
pango_attribute_destroy(Attr);
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1699,37 +1701,37 @@ procedure TGtk3DeviceContext.drawEllipse(x, y, w, h: Integer; AFill, ABorder: Bo
|
|||||||
var
|
var
|
||||||
save_matrix:cairo_matrix_t;
|
save_matrix:cairo_matrix_t;
|
||||||
begin
|
begin
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
cairo_get_matrix(Widget, @save_matrix);
|
cairo_get_matrix(pcr, @save_matrix);
|
||||||
cairo_translate (Widget, x + w / 2.0 + PixelOffset, y + h / 2.0 + PixelOffset);
|
cairo_translate (pcr, x + w / 2.0 + PixelOffset, y + h / 2.0 + PixelOffset);
|
||||||
cairo_scale (Widget, w / 2.0, h / 2.0);
|
cairo_scale (pcr, w / 2.0, h / 2.0);
|
||||||
cairo_new_path(Widget);
|
cairo_new_path(pcr);
|
||||||
cairo_arc
|
cairo_arc
|
||||||
(
|
(
|
||||||
(*cr =*) Widget,
|
(*cr =*) pcr,
|
||||||
(*xc =*) 0,
|
(*xc =*) 0,
|
||||||
(*yc =*) 0,
|
(*yc =*) 0,
|
||||||
(*radius =*) 1,
|
(*radius =*) 1,
|
||||||
(*angle1 =*) 0,
|
(*angle1 =*) 0,
|
||||||
(*angle2 =*) 2 * Pi
|
(*angle2 =*) 2 * Pi
|
||||||
);
|
);
|
||||||
cairo_close_path(Widget);
|
cairo_close_path(pcr);
|
||||||
if AFill then
|
if AFill then
|
||||||
begin
|
begin
|
||||||
ApplyBrush;
|
ApplyBrush;
|
||||||
cairo_fill_preserve(Widget);
|
cairo_fill_preserve(pcr);
|
||||||
end;
|
end;
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
if ABorder then
|
if ABorder then
|
||||||
begin
|
begin
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
end;
|
end;
|
||||||
//if ABorder=false, need to clear current path
|
//if ABorder=false, need to clear current path
|
||||||
cairo_new_path(Widget);
|
cairo_new_path(pcr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TGtk3DeviceContext.drawSurface(targetRect: PRect;
|
procedure TGtk3DeviceContext.drawSurface(targetRect: PRect;
|
||||||
@ -1741,21 +1743,21 @@ begin
|
|||||||
{$IFDEF VerboseGtk3DeviceContext}
|
{$IFDEF VerboseGtk3DeviceContext}
|
||||||
DebugLn('TGtk3DeviceContext.DrawSurface ');
|
DebugLn('TGtk3DeviceContext.DrawSurface ');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
with targetRect^ do
|
with targetRect^ do
|
||||||
cairo_rectangle(Widget, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
cairo_rectangle(pcr, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
||||||
cairo_set_source_surface(Widget, Surface, 0, 0);
|
cairo_set_source_surface(pcr, Surface, 0, 0);
|
||||||
cairo_matrix_init_identity(@M);
|
cairo_matrix_init_identity(@M);
|
||||||
cairo_matrix_translate(@M, SourceRect^.Left, SourceRect^.Top);
|
cairo_matrix_translate(@M, SourceRect^.Left, SourceRect^.Top);
|
||||||
cairo_matrix_scale(@M, (sourceRect^.Right-sourceRect^.Left) / (targetRect^.Right-targetRect^.Left),
|
cairo_matrix_scale(@M, (sourceRect^.Right-sourceRect^.Left) / (targetRect^.Right-targetRect^.Left),
|
||||||
(sourceRect^.Bottom-sourceRect^.Top) / (targetRect^.Bottom-targetRect^.Top));
|
(sourceRect^.Bottom-sourceRect^.Top) / (targetRect^.Bottom-targetRect^.Top));
|
||||||
cairo_matrix_translate(@M, -targetRect^.Left, -targetRect^.Top);
|
cairo_matrix_translate(@M, -targetRect^.Left, -targetRect^.Top);
|
||||||
cairo_pattern_set_matrix(cairo_get_source(Widget), @M);
|
cairo_pattern_set_matrix(cairo_get_source(pcr), @M);
|
||||||
cairo_clip(Widget);
|
cairo_clip(pcr);
|
||||||
cairo_paint(Widget);
|
cairo_paint(pcr);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1769,19 +1771,19 @@ begin
|
|||||||
{$IFDEF VerboseGtk3DeviceContext}
|
{$IFDEF VerboseGtk3DeviceContext}
|
||||||
DebugLn('TGtk3DeviceContext.DrawImage ');
|
DebugLn('TGtk3DeviceContext.DrawImage ');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
// pm := Image;
|
// pm := Image;
|
||||||
// AData := PByte(gdk_pixbuf_get_pixels(pm));
|
// AData := PByte(gdk_pixbuf_get_pixels(pm));
|
||||||
// ASurface := cairo_image_surface_create_for_data(AData, CAIRO_FORMAT_ARGB32, gdk_pixbuf_get_width(pm), gdk_pixbuf_get_height(pm), gdk_pixbuf_get_rowstride(pm));
|
// ASurface := cairo_image_surface_create_for_data(AData, CAIRO_FORMAT_ARGB32, gdk_pixbuf_get_width(pm), gdk_pixbuf_get_height(pm), gdk_pixbuf_get_rowstride(pm));
|
||||||
// cairo_set_source_surface(Widget, ASurface, targetRect^.Left, targetRect^.Top);
|
// cairo_set_source_surface(Widget, ASurface, targetRect^.Left, targetRect^.Top);
|
||||||
gdk_cairo_set_source_pixbuf(Widget, Image, 0, 0);
|
gdk_cairo_set_source_pixbuf(pcr, Image, 0, 0);
|
||||||
with targetRect^ do
|
with targetRect^ do
|
||||||
cairo_rectangle(Widget, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
cairo_rectangle(pcr, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
||||||
cairo_paint(Widget);
|
cairo_paint(pcr);
|
||||||
finally
|
finally
|
||||||
// cairo_surface_destroy(ASurface);
|
// cairo_surface_destroy(ASurface);
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1793,13 +1795,13 @@ begin
|
|||||||
{$IFDEF VerboseGtk3DeviceContext}
|
{$IFDEF VerboseGtk3DeviceContext}
|
||||||
DebugLn('TGtk3DeviceContext.DrawImage ');
|
DebugLn('TGtk3DeviceContext.DrawImage ');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
gdk_cairo_set_source_pixbuf(Widget, Image, 0, 0);
|
gdk_cairo_set_source_pixbuf(pcr, Image, 0, 0);
|
||||||
with targetRect^ do
|
with targetRect^ do
|
||||||
cairo_rectangle(Widget, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
cairo_rectangle(pcr, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
||||||
|
|
||||||
cairo_set_operator (Widget, CAIRO_OPERATOR_OVER);
|
cairo_set_operator (pcr, CAIRO_OPERATOR_OVER);
|
||||||
|
|
||||||
|
|
||||||
cairo_matrix_init_identity(@M);
|
cairo_matrix_init_identity(@M);
|
||||||
@ -1807,12 +1809,12 @@ begin
|
|||||||
cairo_matrix_scale(@M, (sourceRect^.Right-sourceRect^.Left) / (targetRect^.Right-targetRect^.Left),
|
cairo_matrix_scale(@M, (sourceRect^.Right-sourceRect^.Left) / (targetRect^.Right-targetRect^.Left),
|
||||||
(sourceRect^.Bottom-sourceRect^.Top) / (targetRect^.Bottom-targetRect^.Top));
|
(sourceRect^.Bottom-sourceRect^.Top) / (targetRect^.Bottom-targetRect^.Top));
|
||||||
cairo_matrix_translate(@M, -targetRect^.Left, -targetRect^.Top);
|
cairo_matrix_translate(@M, -targetRect^.Left, -targetRect^.Top);
|
||||||
cairo_pattern_set_matrix(cairo_get_source(Widget), @M);
|
cairo_pattern_set_matrix(cairo_get_source(pcr), @M);
|
||||||
//cairo_fill (Widget);
|
//cairo_fill (Widget);
|
||||||
cairo_clip(Widget);
|
cairo_clip(pcr);
|
||||||
cairo_paint(Widget);
|
cairo_paint(pcr);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1826,15 +1828,15 @@ begin
|
|||||||
{$IFDEF VerboseGtk3DeviceContext}
|
{$IFDEF VerboseGtk3DeviceContext}
|
||||||
DebugLn('TGtk3DeviceContext.DrawPixmap ');
|
DebugLn('TGtk3DeviceContext.DrawPixmap ');
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
AData := PByte(gdk_pixbuf_get_pixels(pm));
|
AData := PByte(gdk_pixbuf_get_pixels(pm));
|
||||||
ASurface := cairo_image_surface_create_for_data(AData, CAIRO_FORMAT_ARGB32, gdk_pixbuf_get_width(pm), gdk_pixbuf_get_height(pm), gdk_pixbuf_get_rowstride(pm));
|
ASurface := cairo_image_surface_create_for_data(AData, CAIRO_FORMAT_ARGB32, gdk_pixbuf_get_width(pm), gdk_pixbuf_get_height(pm), gdk_pixbuf_get_rowstride(pm));
|
||||||
cairo_set_source_surface(Widget, ASurface, sr^.Left, sr^.Top);
|
cairo_set_source_surface(pcr, ASurface, sr^.Left, sr^.Top);
|
||||||
cairo_paint(Widget);
|
cairo_paint(pcr);
|
||||||
finally
|
finally
|
||||||
cairo_surface_destroy(ASurface);
|
cairo_surface_destroy(ASurface);
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1842,15 +1844,15 @@ procedure TGtk3DeviceContext.drawPolyLine(P: PPoint; NumPts: Integer);
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_move_to(Widget, P[0].X+PixelOffset, P[0].Y+PixelOffset);
|
cairo_move_to(pcr, P[0].X+PixelOffset, P[0].Y+PixelOffset);
|
||||||
for i := 1 to NumPts-1 do
|
for i := 1 to NumPts-1 do
|
||||||
cairo_line_to(Widget, P[i].X+PixelOffset, P[i].Y+PixelOffset);
|
cairo_line_to(pcr, P[i].X+PixelOffset, P[i].Y+PixelOffset);
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
@ -1860,30 +1862,30 @@ procedure TGtk3DeviceContext.drawPolygon(P: PPoint; NumPts: Integer;
|
|||||||
var
|
var
|
||||||
i: Integer;
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
// add offset so the center of the pixel is used
|
// add offset so the center of the pixel is used
|
||||||
cairo_move_to(Widget, P[0].X+PixelOffset, P[0].Y+PixelOffset);
|
cairo_move_to(pcr, P[0].X+PixelOffset, P[0].Y+PixelOffset);
|
||||||
for i := 1 to NumPts-1 do
|
for i := 1 to NumPts-1 do
|
||||||
cairo_line_to(Widget, P[i].X+PixelOffset, P[i].Y+PixelOffset);
|
cairo_line_to(pcr, P[i].X+PixelOffset, P[i].Y+PixelOffset);
|
||||||
cairo_close_path(Widget);
|
cairo_close_path(pcr);
|
||||||
|
|
||||||
if AFill then
|
if AFill then
|
||||||
begin
|
begin
|
||||||
ApplyBrush;
|
ApplyBrush;
|
||||||
cairo_set_fill_rule(Widget, cairo_fill_rule_t(FillRule));
|
cairo_set_fill_rule(pcr, cairo_fill_rule_t(FillRule));
|
||||||
cairo_fill_preserve(Widget);
|
cairo_fill_preserve(pcr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if ABorder then
|
if ABorder then
|
||||||
begin
|
begin
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
cairo_new_path(Widget);
|
cairo_new_path(pcr);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1902,24 +1904,24 @@ begin
|
|||||||
// we need 3 points left for continuous and 4 for not continous
|
// we need 3 points left for continuous and 4 for not continous
|
||||||
MaxIndex := NumPoints - 3 - Ord(not Continuous);
|
MaxIndex := NumPoints - 3 - Ord(not Continuous);
|
||||||
|
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
i := 0;
|
i := 0;
|
||||||
while i <= MaxIndex do
|
while i <= MaxIndex do
|
||||||
begin
|
begin
|
||||||
if i = 0 then
|
if i = 0 then
|
||||||
begin
|
begin
|
||||||
cairo_move_to(Widget, P[i].X+PixelOffset, P[i].Y+PixelOffset); // start point
|
cairo_move_to(pcr, P[i].X+PixelOffset, P[i].Y+PixelOffset); // start point
|
||||||
Inc(i);
|
Inc(i);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if not Continuous then
|
if not Continuous then
|
||||||
begin
|
begin
|
||||||
cairo_line_to(Widget, P[i].X+PixelOffset, P[i].Y+PixelOffset); // start point
|
cairo_line_to(pcr, P[i].X+PixelOffset, P[i].Y+PixelOffset); // start point
|
||||||
Inc(i);
|
Inc(i);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
cairo_curve_to(Widget,
|
cairo_curve_to(pcr,
|
||||||
P[i].X+PixelOffset, P[i].Y+PixelOffset, // control point 1
|
P[i].X+PixelOffset, P[i].Y+PixelOffset, // control point 1
|
||||||
P[i+1].X+PixelOffset, P[i+1].Y+PixelOffset, // control point 2
|
P[i+1].X+PixelOffset, P[i+1].Y+PixelOffset, // control point 2
|
||||||
P[i+2].X+PixelOffset, P[i+2].Y+PixelOffset); // end point and start point of next
|
P[i+2].X+PixelOffset, P[i+2].Y+PixelOffset); // end point and start point of next
|
||||||
@ -1928,23 +1930,23 @@ begin
|
|||||||
|
|
||||||
if Filled then
|
if Filled then
|
||||||
begin
|
begin
|
||||||
cairo_close_path(Widget);
|
cairo_close_path(pcr);
|
||||||
if bFill then
|
if bFill then
|
||||||
begin
|
begin
|
||||||
ApplyBrush;
|
ApplyBrush;
|
||||||
cairo_fill_preserve(Widget);
|
cairo_fill_preserve(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if bBorder then
|
if bBorder then
|
||||||
begin
|
begin
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
cairo_new_path(Widget);
|
cairo_new_path(pcr);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1967,7 +1969,7 @@ begin
|
|||||||
// WriteLn('TGtk3DeviceContext.fillRect ',Format('x %d y %d w %d h %d',[x, y, w, h]));
|
// WriteLn('TGtk3DeviceContext.fillRect ',Format('x %d y %d w %d h %d',[x, y, w, h]));
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
ATempBrush := nil;
|
ATempBrush := nil;
|
||||||
if ABrush <> 0 then
|
if ABrush <> 0 then
|
||||||
@ -1978,18 +1980,18 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
applyBrush;
|
applyBrush;
|
||||||
cairo_rectangle(Widget, x + PixelOffset, y + PixelOffset, w - 1, h - 1);
|
cairo_rectangle(pcr, x + PixelOffset, y + PixelOffset, w - 1, h - 1);
|
||||||
cairo_fill_preserve(Widget);
|
cairo_fill_preserve(pcr);
|
||||||
|
|
||||||
// must paint border, filling is not enough
|
// must paint border, filling is not enough
|
||||||
SetSourceColor(FCurrentBrush.Color);
|
SetSourceColor(FCurrentBrush.Color);
|
||||||
cairo_set_line_width(Widget, 1);
|
cairo_set_line_width(pcr, 1);
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
|
|
||||||
if ABrush <> 0 then
|
if ABrush <> 0 then
|
||||||
CurrentBrush:= ATempBrush;
|
CurrentBrush:= ATempBrush;
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2004,14 +2006,14 @@ begin
|
|||||||
begin
|
begin
|
||||||
ApplyBrush;
|
ApplyBrush;
|
||||||
if Assigned(FCurrentPen) and (FCurrentPen.Style = psClear) then
|
if Assigned(FCurrentPen) and (FCurrentPen.Style = psClear) then
|
||||||
cairo_fill(Widget)
|
cairo_fill(pcr)
|
||||||
else
|
else
|
||||||
cairo_fill_preserve(Widget);
|
cairo_fill_preserve(pcr);
|
||||||
end;
|
end;
|
||||||
if Assigned(FCurrentPen) and (FCurrentPen.Style <> psClear) then
|
if Assigned(FCurrentPen) and (FCurrentPen.Style <> psClear) then
|
||||||
begin
|
begin
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2019,18 +2021,18 @@ procedure TGtk3DeviceContext.EllipseArcPath(CX, CY, RX, RY: Double; Angle1, Angl
|
|||||||
begin
|
begin
|
||||||
if (RX=0) or (RY=0) then //cairo_scale do not likes zero params
|
if (RX=0) or (RY=0) then //cairo_scale do not likes zero params
|
||||||
Exit;
|
Exit;
|
||||||
cairo_save(Widget);
|
cairo_save(pcr);
|
||||||
try
|
try
|
||||||
cairo_translate(Widget, SX(CX), SY(CY));
|
cairo_translate(pcr, SX(CX), SY(CY));
|
||||||
cairo_scale(Widget, SX2(RX), SY2(RY));
|
cairo_scale(pcr, SX2(RX), SY2(RY));
|
||||||
if not Continuous then
|
if not Continuous then
|
||||||
cairo_move_to(Widget, cos(Angle1), sin(Angle1)); //Move to arcs starting point
|
cairo_move_to(pcr, cos(Angle1), sin(Angle1)); //Move to arcs starting point
|
||||||
if Clockwise then
|
if Clockwise then
|
||||||
cairo_arc(Widget, 0, 0, 1, Angle1, Angle2)
|
cairo_arc(pcr, 0, 0, 1, Angle1, Angle2)
|
||||||
else
|
else
|
||||||
cairo_arc_negative(Widget, 0, 0, 1, Angle1, Angle2);
|
cairo_arc_negative(pcr, 0, 0, 1, Angle1, Angle2);
|
||||||
finally
|
finally
|
||||||
cairo_restore(Widget);
|
cairo_restore(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2039,24 +2041,24 @@ var
|
|||||||
DX, DY: Double;
|
DX, DY: Double;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
cairo_surface_get_device_offset(cairo_get_target(Widget), @DX, @DY);
|
cairo_surface_get_device_offset(cairo_get_target(pcr), @DX, @DY);
|
||||||
DX := DX+PixelOffset;
|
DX := DX+PixelOffset;
|
||||||
DY := DY+PixelOffset;
|
DY := DY+PixelOffset;
|
||||||
cairo_translate(Widget, DX, DY);
|
cairo_translate(pcr, DX, DY);
|
||||||
try
|
try
|
||||||
cairo_move_to(Widget, SX(X1+RX), SY(Y1));
|
cairo_move_to(pcr, SX(X1+RX), SY(Y1));
|
||||||
cairo_line_to(Widget, SX(X2-RX), SY(Y1));
|
cairo_line_to(pcr, SX(X2-RX), SY(Y1));
|
||||||
EllipseArcPath(X2-RX, Y1+RY, RX, RY, -PI/2, 0, True, True);
|
EllipseArcPath(X2-RX, Y1+RY, RX, RY, -PI/2, 0, True, True);
|
||||||
cairo_line_to(Widget, SX(X2), SY(Y2-RY));
|
cairo_line_to(pcr, SX(X2), SY(Y2-RY));
|
||||||
EllipseArcPath(X2-RX, Y2-RY, RX, RY, 0, PI/2, True, True);
|
EllipseArcPath(X2-RX, Y2-RY, RX, RY, 0, PI/2, True, True);
|
||||||
cairo_line_to(Widget, SX(X1+RX), SY(Y2));
|
cairo_line_to(pcr, SX(X1+RX), SY(Y2));
|
||||||
EllipseArcPath(X1+RX, Y2-RY, RX, RY, PI/2, PI, True, True);
|
EllipseArcPath(X1+RX, Y2-RY, RX, RY, PI/2, PI, True, True);
|
||||||
cairo_line_to(Widget, SX(X1), SY(Y1+RX));
|
cairo_line_to(pcr, SX(X1), SY(Y1+RX));
|
||||||
EllipseArcPath(X1+RX, Y1+RY, RX, RY, PI, PI*1.5, True, True);
|
EllipseArcPath(X1+RX, Y1+RY, RX, RY, PI, PI*1.5, True, True);
|
||||||
FillAndStroke;
|
FillAndStroke;
|
||||||
Result := True;
|
Result := True;
|
||||||
finally
|
finally
|
||||||
cairo_translate(Widget, -DX, -DY);
|
cairo_translate(pcr, -DX, -DY);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2127,13 +2129,13 @@ var
|
|||||||
FX, FY: Double;
|
FX, FY: Double;
|
||||||
X0, Y0: Integer;
|
X0, Y0: Integer;
|
||||||
begin
|
begin
|
||||||
if not Assigned(Widget) then
|
if not Assigned(pcr) then
|
||||||
exit(False);
|
exit(False);
|
||||||
ApplyPen;
|
ApplyPen;
|
||||||
|
|
||||||
// we must paint line until, but NOT including, (X,Y)
|
// we must paint line until, but NOT including, (X,Y)
|
||||||
// let's offset X, Y by 1 px, but only for horizontal and vertical lines (yet?)
|
// let's offset X, Y by 1 px, but only for horizontal and vertical lines (yet?)
|
||||||
cairo_get_current_point(Widget, @FX, @FY);
|
cairo_get_current_point(pcr, @FX, @FY);
|
||||||
X0 := Round(FX-PixelOffset);
|
X0 := Round(FX-PixelOffset);
|
||||||
Y0 := Round(FY-PixelOffset);
|
Y0 := Round(FY-PixelOffset);
|
||||||
if X0 = X then
|
if X0 = X then
|
||||||
@ -2155,8 +2157,8 @@ begin
|
|||||||
Inc(X);
|
Inc(X);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
cairo_line_to(Widget, X+PixelOffset, Y+PixelOffset);
|
cairo_line_to(pcr, X+PixelOffset, Y+PixelOffset);
|
||||||
cairo_stroke(Widget);
|
cairo_stroke(pcr);
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2165,26 +2167,26 @@ var
|
|||||||
dx: Double;
|
dx: Double;
|
||||||
dy: Double;
|
dy: Double;
|
||||||
begin
|
begin
|
||||||
if not Assigned(Widget) then
|
if not Assigned(pcr) then
|
||||||
exit(False);
|
exit(False);
|
||||||
if OldPoint <> nil then
|
if OldPoint <> nil then
|
||||||
begin
|
begin
|
||||||
cairo_get_current_point(Widget, @dx, @dy);
|
cairo_get_current_point(pcr, @dx, @dy);
|
||||||
OldPoint^.X := Round(dx);
|
OldPoint^.X := Round(dx);
|
||||||
OldPoint^.Y := Round(dy);
|
OldPoint^.Y := Round(dy);
|
||||||
end;
|
end;
|
||||||
cairo_move_to(Widget, X+PixelOffset, Y+PixelOffset);
|
cairo_move_to(pcr, X+PixelOffset, Y+PixelOffset);
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TGtk3DeviceContext.SetClipRegion(ARgn: TGtk3Region): Integer;
|
function TGtk3DeviceContext.SetClipRegion(ARgn: TGtk3Region): Integer;
|
||||||
begin
|
begin
|
||||||
Result := SimpleRegion;
|
Result := SimpleRegion;
|
||||||
if Assigned(Widget) then
|
if Assigned(pcr) then
|
||||||
begin
|
begin
|
||||||
cairo_reset_clip(Widget);
|
cairo_reset_clip(pcr);
|
||||||
gdk_cairo_region(Self.Widget, ARgn.FHandle);
|
gdk_cairo_region(pcr, ARgn.FHandle);
|
||||||
cairo_clip(Widget);
|
cairo_clip(pcr);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2193,7 +2195,7 @@ var
|
|||||||
R, G, B: double;
|
R, G, B: double;
|
||||||
begin
|
begin
|
||||||
TColorToRGB(AColor, R, G, B);
|
TColorToRGB(AColor, R, G, B);
|
||||||
cairo_set_source_rgb(Widget, R, G, B);
|
cairo_set_source_rgb(pcr, R, G, B);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TGtk3DeviceContext.SetImage(AImage: TGtk3Image);
|
procedure TGtk3DeviceContext.SetImage(AImage: TGtk3Image);
|
||||||
@ -2201,7 +2203,7 @@ var
|
|||||||
APixBuf: PGdkPixbuf;
|
APixBuf: PGdkPixbuf;
|
||||||
begin
|
begin
|
||||||
FCurrentImage := AImage;
|
FCurrentImage := AImage;
|
||||||
cairo_destroy(Widget);
|
cairo_destroy(pcr);
|
||||||
APixBuf := AImage.Handle;
|
APixBuf := AImage.Handle;
|
||||||
if not Gtk3IsGdkPixbuf(APixBuf) then
|
if not Gtk3IsGdkPixbuf(APixBuf) then
|
||||||
begin
|
begin
|
||||||
@ -2221,15 +2223,15 @@ begin
|
|||||||
APixBuf^.get_width,
|
APixBuf^.get_width,
|
||||||
APixBuf^.get_height,
|
APixBuf^.get_height,
|
||||||
APixBuf^.rowstride);
|
APixBuf^.rowstride);
|
||||||
Widget := cairo_create(CairoSurface);
|
pcr := cairo_create(CairoSurface);
|
||||||
FOwnsSurface := true;
|
FOwnsSurface := true;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TGtk3DeviceContext.ResetClip: Integer;
|
function TGtk3DeviceContext.ResetClip: Integer;
|
||||||
begin
|
begin
|
||||||
Result := NullRegion;
|
Result := NullRegion;
|
||||||
if Assigned(Widget) then
|
if Assigned(pcr) then
|
||||||
cairo_reset_clip(Widget);
|
cairo_reset_clip(pcr);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TGtk3DeviceContext.TranslateCairoToDevice;
|
procedure TGtk3DeviceContext.TranslateCairoToDevice;
|
||||||
@ -2242,7 +2244,14 @@ end;
|
|||||||
|
|
||||||
procedure TGtk3DeviceContext.Translate(APoint: TPoint);
|
procedure TGtk3DeviceContext.Translate(APoint: TPoint);
|
||||||
begin
|
begin
|
||||||
cairo_translate(Widget, APoint.X, APoint.Y);
|
cairo_translate(pcr, APoint.X, APoint.Y);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TGtk3DeviceContext.set_antialiasing(aamode: boolean);
|
||||||
|
const
|
||||||
|
caa:array[boolean] of cairo_antialias_t = (CAIRO_ANTIALIAS_NONE,CAIRO_ANTIALIAS_DEFAULT);
|
||||||
|
begin
|
||||||
|
cairo_set_antialias(pcr, caa[aamode]);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1362,8 +1362,8 @@ begin
|
|||||||
begin
|
begin
|
||||||
// do resize to lcl size when mapping widget
|
// do resize to lcl size when mapping widget
|
||||||
gdk_window_set_events(AWindow, GDK_DEFAULT_EVENTS_MASK);
|
gdk_window_set_events(AWindow, GDK_DEFAULT_EVENTS_MASK);
|
||||||
if not (wtWindow in TGtk3Widget(Data).WidgetType) then
|
{ if not (wtWindow in TGtk3Widget(Data).WidgetType) then
|
||||||
begin
|
begin }
|
||||||
with TGtk3Widget(Data).LCLObject do
|
with TGtk3Widget(Data).LCLObject do
|
||||||
begin
|
begin
|
||||||
xx := Left;
|
xx := Left;
|
||||||
@ -1375,12 +1375,12 @@ begin
|
|||||||
AWindow^.move(xx, yy);
|
AWindow^.move(xx, yy);
|
||||||
AWindow^.resize(w, h);
|
AWindow^.resize(w, h);
|
||||||
TGtk3Widget(Data).EndUpdate;
|
TGtk3Widget(Data).EndUpdate;
|
||||||
end else
|
{ end else
|
||||||
begin
|
begin
|
||||||
// DebugLn('TGtk3Window is mapped , setting lclwidget property to PGdkWindow ...');
|
// DebugLn('TGtk3Window is mapped , setting lclwidget property to PGdkWindow ...');
|
||||||
// now we set 'lclwidget' to our window.
|
// now we set 'lclwidget' to our window.
|
||||||
// g_object_set_data(AWindow,'lclwidget', TGtk3Widget(Data));
|
// g_object_set_data(AWindow,'lclwidget', TGtk3Widget(Data));
|
||||||
end;
|
end;}
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
if wtMemo in TGtk3Widget(Data).WidgetType then
|
if wtMemo in TGtk3Widget(Data).WidgetType then
|
||||||
@ -1389,6 +1389,7 @@ begin
|
|||||||
// gdk_window_get_position(AWindow, @xx,@yy);
|
// gdk_window_get_position(AWindow, @xx,@yy);
|
||||||
// DebugLn(' ***** Window ',Format('x %d y %d w %d h %d',[xx,yy,w,h]),' lclobject ',dbgsName(TGtk3Widget(Data).LCLObject));
|
// DebugLn(' ***** Window ',Format('x %d y %d w %d h %d',[xx,yy,w,h]),' lclobject ',dbgsName(TGtk3Widget(Data).LCLObject));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -4151,8 +4152,11 @@ begin
|
|||||||
else
|
else
|
||||||
gtb:=TGtkToolButton.new(wicon,PgChar(bs));
|
gtb:=TGtkToolButton.new(wicon,PgChar(bs));
|
||||||
end;
|
end;
|
||||||
gtb^.set_tooltip_text(PgChar(btn.Hint));
|
if not (btn.Style in [tbsSeparator,tbsDivider]) then
|
||||||
PgtkToolButton(gtb)^.set_use_underline(true);
|
begin
|
||||||
|
gtb^.set_tooltip_text(PgChar(btn.Hint));
|
||||||
|
PgtkToolButton(gtb)^.set_use_underline(true);
|
||||||
|
end;
|
||||||
PGtkToolBar(Result)^.add(gtb);
|
PGtkToolBar(Result)^.add(gtb);
|
||||||
|
|
||||||
if not (btn.Style in [tbsSeparator,tbsDivider]) then
|
if not (btn.Style in [tbsSeparator,tbsDivider]) then
|
||||||
|
|||||||
@ -632,7 +632,7 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
with aRect do
|
with aRect do
|
||||||
gtk_render_focus(Context ,TGtk3DeviceContext(DC).Widget, Left, Top, Right - Left, Bottom - Top);
|
gtk_render_focus(Context ,TGtk3DeviceContext(DC).pcr, Left, Top, Right - Left, Bottom - Top);
|
||||||
|
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
@ -1522,7 +1522,7 @@ begin
|
|||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
// get existing clip
|
// get existing clip
|
||||||
gdk_cairo_get_clip_rectangle(GtkDC.Widget, @ARect);
|
gdk_cairo_get_clip_rectangle(GtkDC.pcr, @ARect);
|
||||||
R := RectFromGdkRect(ARect);
|
R := RectFromGdkRect(ARect);
|
||||||
if IsRectEmpty(R) then
|
if IsRectEmpty(R) then
|
||||||
begin
|
begin
|
||||||
@ -1557,7 +1557,7 @@ begin
|
|||||||
//exit;
|
//exit;
|
||||||
// when substracting we must have active clipregion
|
// when substracting we must have active clipregion
|
||||||
// with all of its rects.
|
// with all of its rects.
|
||||||
gdk_cairo_get_clip_rectangle(GtkDC.Widget, @ARect);
|
gdk_cairo_get_clip_rectangle(GtkDC.pcr, @ARect);
|
||||||
R := RectFromGdkRect(ARect);
|
R := RectFromGdkRect(ARect);
|
||||||
if IsRectEmpty(R) then
|
if IsRectEmpty(R) then
|
||||||
begin
|
begin
|
||||||
@ -1663,7 +1663,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
cr := TGtk3DeviceContext(DC).Widget;
|
cr := TGtk3DeviceContext(DC).pcr;
|
||||||
cairo_save(cr);
|
cairo_save(cr);
|
||||||
try
|
try
|
||||||
cairo_set_line_width(cr, 1);
|
cairo_set_line_width(cr, 1);
|
||||||
@ -1705,7 +1705,7 @@ begin
|
|||||||
Result := 0;
|
Result := 0;
|
||||||
if not IsValidDC(DC) then
|
if not IsValidDC(DC) then
|
||||||
exit;
|
exit;
|
||||||
cr := TGtk3DeviceContext(DC).Widget;
|
cr := TGtk3DeviceContext(DC).pcr;
|
||||||
cairo_rectangle(cr, ARect.Left+PixelOffset, ARect.Top+PixelOffset, ARect.Right-ARect.Left-1, ARect.Bottom-ARect.Top-1);
|
cairo_rectangle(cr, ARect.Left+PixelOffset, ARect.Top+PixelOffset, ARect.Right-ARect.Left-1, ARect.Bottom-ARect.Top-1);
|
||||||
if IsValidGDIObject(hBr) then
|
if IsValidGDIObject(hBr) then
|
||||||
TGtk3DeviceContext(DC).SetSourceColor(TGtk3Brush(HBR).Color);
|
TGtk3DeviceContext(DC).SetSourceColor(TGtk3Brush(HBR).Color);
|
||||||
@ -1842,7 +1842,7 @@ begin
|
|||||||
|
|
||||||
if Result <> ERROR then
|
if Result <> ERROR then
|
||||||
begin
|
begin
|
||||||
cr := GtkDC.Widget;
|
cr := GtkDC.pcr;
|
||||||
if gdk_cairo_get_clip_rectangle(cr, @ARect) then
|
if gdk_cairo_get_clip_rectangle(cr, @ARect) then
|
||||||
begin
|
begin
|
||||||
lpRect^ := RectFromGdkRect(ARect);
|
lpRect^ := RectFromGdkRect(ARect);
|
||||||
@ -1861,7 +1861,7 @@ begin
|
|||||||
Result := -1;
|
Result := -1;
|
||||||
if not IsValidDC(DC) or (RGN = 0) then
|
if not IsValidDC(DC) or (RGN = 0) then
|
||||||
exit;
|
exit;
|
||||||
gdk_cairo_get_clip_rectangle(TGtk3DeviceContext(DC).Widget, @ARect);
|
gdk_cairo_get_clip_rectangle(TGtk3DeviceContext(DC).pcr, @ARect);
|
||||||
// DebugLn('GetClipRgn ',dbgs(TGtk3Region(RGN).GetExtents),' clipRect ',dbgs(RectFromGdkRect(ARect)));
|
// DebugLn('GetClipRgn ',dbgs(TGtk3Region(RGN).GetExtents),' clipRect ',dbgs(RectFromGdkRect(ARect)));
|
||||||
if IsRectEmpty(RectFromGdkRect(ARect)) then
|
if IsRectEmpty(RectFromGdkRect(ARect)) then
|
||||||
exit(0)
|
exit(0)
|
||||||
@ -2026,9 +2026,9 @@ begin
|
|||||||
p.Y := TGtk3DeviceContext(DC).ParentPixmap^.get_height;
|
p.Y := TGtk3DeviceContext(DC).ParentPixmap^.get_height;
|
||||||
Result := True;
|
Result := True;
|
||||||
end else
|
end else
|
||||||
if TGtk3DeviceContext(DC).Widget <> nil then
|
if TGtk3DeviceContext(DC).pcr <> nil then
|
||||||
begin
|
begin
|
||||||
gdk_cairo_get_clip_rectangle(TGtk3DeviceContext(DC).Widget, @ARect);
|
gdk_cairo_get_clip_rectangle(TGtk3DeviceContext(DC).pcr, @ARect);
|
||||||
p.X := ARect.Width;
|
p.X := ARect.Width;
|
||||||
p.Y := ARect.Height;
|
p.Y := ARect.Height;
|
||||||
Result := True;
|
Result := True;
|
||||||
@ -2777,7 +2777,7 @@ begin
|
|||||||
{$endif}
|
{$endif}
|
||||||
exit;
|
exit;
|
||||||
end;
|
end;
|
||||||
cairo_get_matrix(TGtk3DeviceContext(DC).Widget, @Matrix);
|
cairo_get_matrix(TGtk3DeviceContext(DC).pcr, @Matrix);
|
||||||
dx := 0;
|
dx := 0;
|
||||||
dy := 0;
|
dy := 0;
|
||||||
cairo_matrix_transform_point(@Matrix, @dx, @dy);
|
cairo_matrix_transform_point(@Matrix, @dx, @dy);
|
||||||
@ -2946,7 +2946,7 @@ begin
|
|||||||
// inherited LPtoDP(DC, Points, Count);
|
// inherited LPtoDP(DC, Points, Count);
|
||||||
if not IsValidDC(DC) then
|
if not IsValidDC(DC) then
|
||||||
exit;
|
exit;
|
||||||
cr := TGtk3DeviceContext(DC).Widget;
|
cr := TGtk3DeviceContext(DC).pcr;
|
||||||
|
|
||||||
P := @Points;
|
P := @Points;
|
||||||
while Count > 0 do
|
while Count > 0 do
|
||||||
@ -3265,7 +3265,7 @@ begin
|
|||||||
Result := False;
|
Result := False;
|
||||||
if not IsValidDC(DC) then
|
if not IsValidDC(DC) then
|
||||||
exit;
|
exit;
|
||||||
cairo_restore(TGtk3DeviceContext(DC).Widget);
|
cairo_restore(TGtk3DeviceContext(DC).pcr);
|
||||||
Result := True;
|
Result := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3286,7 +3286,7 @@ begin
|
|||||||
Result := 0;
|
Result := 0;
|
||||||
if not IsValidDC(DC) then
|
if not IsValidDC(DC) then
|
||||||
exit;
|
exit;
|
||||||
cairo_save(TGtk3DeviceContext(DC).Widget);
|
cairo_save(TGtk3DeviceContext(DC).pcr);
|
||||||
Result := 1;
|
Result := 1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -3813,14 +3813,14 @@ begin
|
|||||||
if IsValidDC(DC) then
|
if IsValidDC(DC) then
|
||||||
begin
|
begin
|
||||||
GetWindowOrgEx(dc, OldPoint);
|
GetWindowOrgEx(dc, OldPoint);
|
||||||
cairo_get_matrix(TGtk3DeviceContext(DC).Widget, @Matrix);
|
cairo_get_matrix(TGtk3DeviceContext(DC).pcr, @Matrix);
|
||||||
//dx := 0;
|
//dx := 0;
|
||||||
//dy := 0;
|
//dy := 0;
|
||||||
// cairo_matrix_init_translate(Matrix, -NewX, -NewY);
|
// cairo_matrix_init_translate(Matrix, -NewX, -NewY);
|
||||||
cairo_matrix_translate(@Matrix,
|
cairo_matrix_translate(@Matrix,
|
||||||
-NewX - TGtk3DeviceContext(DC).fncOrigin.x,
|
-NewX - TGtk3DeviceContext(DC).fncOrigin.x,
|
||||||
-NewY - TGtk3DeviceContext(DC).fncOrigin.Y);
|
-NewY - TGtk3DeviceContext(DC).fncOrigin.Y);
|
||||||
cairo_transform(TGtk3DeviceContext(DC).Widget, @Matrix);
|
cairo_transform(TGtk3DeviceContext(DC).pcr, @Matrix);
|
||||||
// cairo_set_matrix(TGtk3DeviceContext(DC).Widget, Matrix);
|
// cairo_set_matrix(TGtk3DeviceContext(DC).Widget, Matrix);
|
||||||
// DebugLn('TGtk3WidgetSet.SetWindowOrgEx NewX=',dbgs(NewX),' NewY=',dbgs(NewY));
|
// DebugLn('TGtk3WidgetSet.SetWindowOrgEx NewX=',dbgs(NewX),' NewY=',dbgs(NewY));
|
||||||
Result := True;
|
Result := True;
|
||||||
|
|||||||
@ -328,7 +328,7 @@ begin
|
|||||||
if not WSCheckHandleAllocated(AWincontrol, 'PaintTo') or (ADC = 0) then
|
if not WSCheckHandleAllocated(AWincontrol, 'PaintTo') or (ADC = 0) then
|
||||||
Exit;
|
Exit;
|
||||||
AWidget := TGtk3Widget(AWinControl.Handle);
|
AWidget := TGtk3Widget(AWinControl.Handle);
|
||||||
cr := TGtk3DeviceContext(ADC).Widget;
|
cr := TGtk3DeviceContext(ADC).pcr;
|
||||||
cairo_save(cr);
|
cairo_save(cr);
|
||||||
cairo_translate(cr, X, Y);
|
cairo_translate(cr, X, Y);
|
||||||
gtk_widget_draw(AWidget.Widget, cr);
|
gtk_widget_draw(AWidget.Widget, cr);
|
||||||
@ -537,20 +537,25 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
class procedure TGtk3WSWinControl.ShowHide(const AWinControl: TWinControl);
|
class procedure TGtk3WSWinControl.ShowHide(const AWinControl: TWinControl);
|
||||||
|
var
|
||||||
|
wgt:TGtk3Widget;
|
||||||
begin
|
begin
|
||||||
if not WSCheckHandleAllocated(AWinControl, 'ShowHide') then
|
if not WSCheckHandleAllocated(AWinControl, 'ShowHide') then
|
||||||
Exit;
|
Exit;
|
||||||
{$IFDEF GTK3DEBUGCORE}
|
{$IFDEF GTK3DEBUGCORE}
|
||||||
DebugLn('TGtk3WSWinControl.ShowHide ',dbgsName(AWinControl));
|
DebugLn('TGtk3WSWinControl.ShowHide ',dbgsName(AWinControl));
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
TGtk3Widget(AWinControl.Handle).Visible := AWinControl.HandleObjectShouldBeVisible;
|
wgt:=TGtk3Widget(AWinControl.Handle);
|
||||||
if TGtk3Widget(AWinControl.Handle).Visible then
|
wgt.Visible := AWinControl.HandleObjectShouldBeVisible;
|
||||||
|
if wgt.Visible then
|
||||||
begin
|
begin
|
||||||
TGtk3Widget(AWinControl.Handle).ShowAll;
|
wgt.ShowAll;
|
||||||
// imediatelly realize (create widget handles), so we'll get updated bounds
|
// imediatelly realize (create widget handles), so we'll get updated bounds
|
||||||
// and everything just on time.
|
// and everything just on time.
|
||||||
if not (wtScrollingWin in TGtk3Widget(AWinControl.Handle).WidgetType) then
|
if not (wtScrollingWin in wgt.WidgetType) then
|
||||||
PGtkWidget(TGtk3Widget(AWinControl.Handle).GetContainerWidget)^.realize;
|
begin
|
||||||
|
wgt.GetContainerWidget^.realize;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
@ -1212,12 +1212,19 @@ class procedure TGtk3WSOpenDialog.CreatePreviewDialogControl(
|
|||||||
var
|
var
|
||||||
PreviewWidget: PGtkWidget;
|
PreviewWidget: PGtkWidget;
|
||||||
AControl: TPreviewFileControl;
|
AControl: TPreviewFileControl;
|
||||||
|
alloc:TGtkAllocation;
|
||||||
begin
|
begin
|
||||||
AControl := PreviewDialog.PreviewFileControl;
|
AControl := PreviewDialog.PreviewFileControl;
|
||||||
if AControl = nil then Exit;
|
if AControl = nil then Exit;
|
||||||
PreviewWidget := TGtk3CustomControl(AControl.Handle).Widget;
|
PreviewWidget := TGtk3CustomControl(AControl.Handle).Widget;
|
||||||
g_object_set_data(PGObject(PreviewWidget),'LCLPreviewFixed',PreviewWidget);
|
g_object_set_data(PGObject(PreviewWidget),'LCLPreviewFixed',PreviewWidget);
|
||||||
gtk_widget_set_size_request(PreviewWidget,AControl.Width,AControl.Height);
|
gtk_widget_set_size_request(PreviewWidget,AControl.Width,AControl.Height);
|
||||||
|
{alloc.height:=AControl.Height;
|
||||||
|
alloc.width:=AControl.Width;
|
||||||
|
alloc.x:=0;
|
||||||
|
alloc.y:=0;
|
||||||
|
PreviewWidget^.size_allocate(@alloc);
|
||||||
|
PreviewWidget^.queue_resize;}
|
||||||
gtk_file_chooser_set_preview_widget(Chooser, PreviewWidget);
|
gtk_file_chooser_set_preview_widget(Chooser, PreviewWidget);
|
||||||
gtk_widget_show(PreviewWidget);
|
gtk_widget_show(PreviewWidget);
|
||||||
end;
|
end;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user