diff --git a/lcl/interfaces/gtk/gtklclintf.inc b/lcl/interfaces/gtk/gtklclintf.inc index 9e21486cd3..cc98c2866b 100644 --- a/lcl/interfaces/gtk/gtklclintf.inc +++ b/lcl/interfaces/gtk/gtklclintf.inc @@ -65,6 +65,40 @@ begin end; end; +procedure TGTKWidgetSet.DrawGrid(DC: HDC; const R: TRect; DX, DY: Integer); +var + X, Y: Integer; + W, H: Integer; + SavedDC: Integer; + Context: TGtkDeviceContext absolute DC; + DCOrigin: TPoint; +begin + if (Context = nil) or (Context.Drawable = nil) then Exit; + + DCOrigin := Context.Offset; + SavedDC := SaveDC(DC); + try + Context.SelectPenProps; + if not (dcfPenSelected in Context.Flags) then Exit; + + if Context.IsNullPen then Exit; + + W := (R.Right - R.Left - 1) div DX; + H := (R.Bottom - R.Top - 1) div DY; + + for Y := 0 to H do + begin + for X := 0 to W do + begin + gdk_draw_point(Context.Drawable, Context.GC, + DCOrigin.X + R.Left + X * DX, DCOrigin.Y + R.Top + Y * DY); + end; + end; + finally + RestoreDC(DC, SavedDC); + end; +end; + {------------------------------------------------------------------------------ function TGtkWidgetSet.ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean; diff --git a/lcl/interfaces/gtk/gtklclintfh.inc b/lcl/interfaces/gtk/gtklclintfh.inc index f5f3607ee1..19c4ce21cd 100644 --- a/lcl/interfaces/gtk/gtklclintfh.inc +++ b/lcl/interfaces/gtk/gtklclintfh.inc @@ -38,6 +38,7 @@ function AddProcessEventHandler(AHandle: THandle; function CreateStandardCursor(ACursor: SmallInt): hCursor; override; procedure DrawDefaultDockImage(AOldRect, ANewRect: TRect; AOperation: TDockImageOperation); override; +procedure DrawGrid(DC: HDC; const R: TRect; DX, DY: Integer); override; function ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean; override; diff --git a/lcl/interfaces/gtk2/gtk2lclintf.inc b/lcl/interfaces/gtk2/gtk2lclintf.inc index 7931927ab5..7d8d0d158b 100644 --- a/lcl/interfaces/gtk2/gtk2lclintf.inc +++ b/lcl/interfaces/gtk2/gtk2lclintf.inc @@ -30,6 +30,34 @@ //##apiwiz##sps## // Do not remove +procedure TGtk2WidgetSet.DrawGrid(DC: HDC; const R: TRect; DX, DY: Integer); +var + X, Y: Integer; + W, H: Integer; + SavedDC: Integer; +begin + SavedDC := SaveDC(DC); + try + W := (R.Right - R.Left - 1) div DX; + H := (R.Bottom - R.Top - 1) div DY; + + // remove rows from clip rect + for Y := 0 to H do + begin + ExcludeClipRect(DC, R.Left, R.Top + Y * DY + 1, R.Right + 1, R.Top + (Y + 1) * DY); + end; + + // draw vertical lines cross excluded rows -> only grid cross points painted + for X := 0 to W do + begin + if MoveToEx(DC, R.Left + X * DX, R.Top, nil) then + LineTo(DC, R.Left + X * DX, R.Bottom + 1); + end; + finally + RestoreDC(DC, SavedDC); + end; +end; + function TGtk2WidgetSet.ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean; begin diff --git a/lcl/interfaces/gtk2/gtk2lclintfh.inc b/lcl/interfaces/gtk2/gtk2lclintfh.inc index 1a4e77265f..22f439caec 100644 --- a/lcl/interfaces/gtk2/gtk2lclintfh.inc +++ b/lcl/interfaces/gtk2/gtk2lclintfh.inc @@ -29,6 +29,7 @@ } //##apiwiz##sps## // Do not remove +procedure DrawGrid(DC: HDC; const R: TRect; DX, DY: Integer); override; function ExtUTF8Out(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; Str: PChar; Count: Longint; Dx: PInteger): Boolean; override; function TextUTF8Out(DC: HDC; X, Y: Integer; Str: PChar; Count: Longint): Boolean; override;