summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/corelib/fpg_base.pas1
-rw-r--r--src/corelib/gdi/fpg_gdi.pas6
-rw-r--r--src/corelib/x11/fpg_x11.pas23
3 files changed, 30 insertions, 0 deletions
diff --git a/src/corelib/fpg_base.pas b/src/corelib/fpg_base.pas
index 0da0557a..eb7136b8 100644
--- a/src/corelib/fpg_base.pas
+++ b/src/corelib/fpg_base.pas
@@ -577,6 +577,7 @@ type
procedure CreateForm(InstanceClass: TComponentClass; out Reference);
function GetScreenWidth: TfpgCoord; virtual; abstract;
function GetScreenHeight: TfpgCoord; virtual; abstract;
+ function GetScreenPixelColor(APos: TPoint): TfpgColor; virtual; abstract;
function Screen_dpi_x: integer; virtual; abstract;
function Screen_dpi_y: integer; virtual; abstract;
function Screen_dpi: integer; virtual; abstract;
diff --git a/src/corelib/gdi/fpg_gdi.pas b/src/corelib/gdi/fpg_gdi.pas
index 1d5b7dff..8b7b9939 100644
--- a/src/corelib/gdi/fpg_gdi.pas
+++ b/src/corelib/gdi/fpg_gdi.pas
@@ -246,6 +246,7 @@ type
procedure DoFlush;
function GetScreenWidth: TfpgCoord; override;
function GetScreenHeight: TfpgCoord; override;
+ function GetScreenPixelColor(APos: TPoint): TfpgColor; override;
function Screen_dpi_x: integer; override;
function Screen_dpi_y: integer; override;
function Screen_dpi: integer; override;
@@ -1416,6 +1417,11 @@ begin
// Result := Windows.GetSystemMetrics(SM_CYSCREEN);
end;
+function TfpgGDIApplication.GetScreenPixelColor(APos: TPoint): TfpgColor;
+begin
+ raise EfpGUIException.Create('Not implemented yet');
+end;
+
function TfpgGDIApplication.Screen_dpi_x: integer;
begin
Result := GetDeviceCaps(wapplication.display, LOGPIXELSX)
diff --git a/src/corelib/x11/fpg_x11.pas b/src/corelib/x11/fpg_x11.pas
index c94cf1fb..f98e8198 100644
--- a/src/corelib/x11/fpg_x11.pas
+++ b/src/corelib/x11/fpg_x11.pas
@@ -331,6 +331,7 @@ type
procedure DoFlush;
function GetScreenWidth: TfpgCoord; override;
function GetScreenHeight: TfpgCoord; override;
+ function GetScreenPixelColor(APos: TPoint): TfpgColor; override;
function Screen_dpi_x: integer; override;
function Screen_dpi_y: integer; override;
function Screen_dpi: integer; override;
@@ -2240,6 +2241,28 @@ begin
Result := wa.Height;
end;
+function TfpgX11Application.GetScreenPixelColor(APos: TPoint): TfpgColor;
+var
+ Image: PXImage;
+ Pixel: Cardinal;
+ x_Color: TXColor;
+begin
+ Result := 0;
+ Image := XGetImage(Display, FRootWindow, APos.X, APos.Y, 1, 1, $FFFFFFFF, ZPixmap);
+ if Image = nil then
+ raise Exception.Create('fpGFX/X11: Invalid XImage');
+ try
+ Pixel := XGetPixel(Image, 0, 0);
+ x_Color.pixel := Pixel;
+ XQueryColor(Display, DefaultColorMap, @x_Color);
+ Result := TfpgColor(((x_Color.red and $00FF) shl 16) or
+ ((x_Color.green and $00FF) shl 8) or
+ (x_Color.blue and $00FF));
+ finally
+ XDestroyImage(Image);
+ end;
+end;
+
function TfpgX11Application.Screen_dpi_x: integer;
var
mm: integer;