diff --git a/lcl/interfaces/gtk3/gtk3lclintf.inc b/lcl/interfaces/gtk3/gtk3lclintf.inc index 5d5884deb0..e6cf0fadf0 100644 --- a/lcl/interfaces/gtk3/gtk3lclintf.inc +++ b/lcl/interfaces/gtk3/gtk3lclintf.inc @@ -114,7 +114,6 @@ var gc: TGdkRGBA; GtkDC: TGtk3DeviceContext absolute DC; DotSize: integer; - //matrix: Tcairo_matrix_t; begin if not IsValidDC(DC) then exit; @@ -123,7 +122,8 @@ begin DotSize := Max(1, GtkDC.CurrentPen.Width); GtkDC.Save; - //TODO: cairo_get_matrix(pcr, @matrix); + + GtkDC.Translate(GtkDC.ScrollbarsOffset); cairo_set_source_rgb(GtkDC.pcr, gc.red, gc.green, gc.blue); cairo_set_antialias(GtkDC.pcr, CAIRO_ANTIALIAS_NONE); diff --git a/lcl/interfaces/gtk3/gtk3objects.pas b/lcl/interfaces/gtk3/gtk3objects.pas index 77992d114f..0e2cadeb95 100644 --- a/lcl/interfaces/gtk3/gtk3objects.pas +++ b/lcl/interfaces/gtk3/gtk3objects.pas @@ -252,6 +252,7 @@ type ParentPixmap: PGdkPixbuf; Window: PGdkWindow; fncOrigin:TPoint; // non-client area offsets surface origin + ScrollbarsOffset: TPoint; // for scrollingwincontrol and forms. constructor Create(AWidget: PGtkWidget; const APaintEvent: Boolean = False); virtual; constructor Create(AWindow: PGdkWindow; const APaintEvent: Boolean); virtual; constructor CreateFromCairo(AWidget: PGtkWidget; ACairo: PCairo_t); virtual; @@ -1971,6 +1972,8 @@ procedure TGtk3DeviceContext.CreateObjects; var Matrix: Tcairo_matrix_t; begin + ScrollbarsOffset.X := 0; + ScrollbarsOffset.Y := 0; FLastPenX := 0; FLastPenY := 0; FBgBrush := nil; // created on demand diff --git a/lcl/interfaces/gtk3/gtk3widgets.pas b/lcl/interfaces/gtk3/gtk3widgets.pas index fc05a2545c..2e512b1535 100644 --- a/lcl/interfaces/gtk3/gtk3widgets.pas +++ b/lcl/interfaces/gtk3/gtk3widgets.pas @@ -1795,6 +1795,7 @@ begin P.X := P.X + Round(AScrolledWin^.get_hadjustment^.get_value); if VScrollPolicy < GTK_POLICY_NEVER then P.Y := P.Y + Round(AScrolledWin^.get_vadjustment^.get_value); + TGtk3DeviceContext(Msg.DC).ScrollbarsOffset := Point(P.X, P.Y); cairo_translate(AContext, -P.X, -P.Y); with TGtk3DeviceContext(Msg.DC).fncOrigin do begin @@ -10491,6 +10492,7 @@ begin P.X := P.X + Round(AScrolledWin^.get_hadjustment^.get_value); if VScrollPolicy < GTK_POLICY_NEVER then P.Y := P.Y + Round(AScrolledWin^.get_vadjustment^.get_value); + TGtk3DeviceContext(Msg.DC).ScrollbarsOffset := Point(P.X, P.Y); cairo_translate(AContext, -P.X, -P.Y); with TGtk3DeviceContext(Msg.DC).fncOrigin do begin