mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 02:39:15 +02:00
gtk:
- separate SM_CXSCREEN and SM_CXVIRTUALSCREEN for gtk2 (affects TForm.ScreenPosition screen/desktop center) - implement SetCursorPos for gtk2 (if version >= 2.8) git-svn-id: trunk@12196 -
This commit is contained in:
parent
544849a53e
commit
df5e7aa81e
@ -79,6 +79,7 @@
|
||||
// not supported
|
||||
{$fatal X is required for GTK1}
|
||||
{$endif}
|
||||
{$define GTK_2_8}
|
||||
{$endif}
|
||||
|
||||
|
||||
|
@ -3307,8 +3307,10 @@ begin
|
||||
end;
|
||||
FontList := TStringlist.Create;
|
||||
try
|
||||
if Family<>'' then Tmp := '-*-'+Family+'-*-*-*-*-*-*-*-*-*-*-*-*'
|
||||
else Tmp := '-*'; // get rid of aliases
|
||||
if Family<>'' then
|
||||
Tmp := '-*-'+Family+'-*-*-*-*-*-*-*-*-*-*-*-*'
|
||||
else
|
||||
Tmp := '-*'; // get rid of aliases
|
||||
{$ifdef VerboseEnumFonts}
|
||||
WriteLn('Looking for fonts matching: ', tmp);
|
||||
{$endif}
|
||||
@ -5697,11 +5699,15 @@ var
|
||||
P: Pointer;
|
||||
ax,ay,ah,aw: gint;
|
||||
auw, auh: guint;
|
||||
{$ifndef GTK2}{$ifdef HasX}
|
||||
{$ifdef GTK2}
|
||||
display: PGdkDisplay;
|
||||
{$else}
|
||||
{$ifdef HasX}
|
||||
XDisplay: PDisplay;
|
||||
XScreen: PScreen;
|
||||
XWindow: TWindow;
|
||||
{$endif}{$endif}
|
||||
{$endif}
|
||||
{$endif}
|
||||
begin
|
||||
Assert(False, Format('Trace:> [TGtkWidgetSet.GetSystemMetrics] %d', [nIndex]));
|
||||
case nIndex of
|
||||
@ -5820,15 +5826,19 @@ begin
|
||||
SM_CXMAXIMIZED:
|
||||
begin
|
||||
{$IFDEF HasX}
|
||||
if XGetWorkarea(ax,ay,aw,ah)>=0 then result:=aw
|
||||
else getSystemMetrics(SM_CXSCREEN);
|
||||
if XGetWorkarea(ax,ay,aw,ah)>=0 then
|
||||
Result := aw
|
||||
else
|
||||
Result := getSystemMetrics(SM_CXSCREEN);
|
||||
{$ENDIF}
|
||||
end;
|
||||
SM_CYMAXIMIZED:
|
||||
begin
|
||||
{$IFDEF HasX}
|
||||
if XGetWorkarea(ax,ay,aw,ah)>=0 then result:=ah
|
||||
else getSystemMetrics(SM_CYSCREEN);
|
||||
if XGetWorkarea(ax,ay,aw,ah)>=0 then
|
||||
Result := ah
|
||||
else
|
||||
Result := getSystemMetrics(SM_CYSCREEN);
|
||||
{$ENDIF}
|
||||
end;
|
||||
SM_CXMAXTRACK:
|
||||
@ -5887,8 +5897,7 @@ begin
|
||||
begin
|
||||
Assert(False, 'Trace:TODO: [TGtkWidgetSet.GetSystemMetrics] --> SM_CYMINTRACK ');
|
||||
end;
|
||||
SM_CXSCREEN,
|
||||
SM_CXVIRTUALSCREEN:
|
||||
SM_CXSCREEN:
|
||||
begin
|
||||
{$IFDEF GTK1} { Partial fix for multi monitor systems - force use of first one }
|
||||
{$IFDEF UseXinerama}
|
||||
@ -5899,6 +5908,18 @@ begin
|
||||
{$ENDIF}
|
||||
result := gdk_Screen_Width;
|
||||
end;
|
||||
SM_CXVIRTUALSCREEN:
|
||||
begin
|
||||
{$ifdef GTK2}
|
||||
aw := 0;
|
||||
display := gdk_display_get_default();
|
||||
for ax := 0 to gdk_display_get_n_screens(display) - 1 do
|
||||
inc(aw, gdk_screen_get_width(gdk_display_get_screen(display, ax)));
|
||||
Result := ax;
|
||||
{$else}
|
||||
Result := getSystemMetrics(SM_CXSCREEN);
|
||||
{$endif}
|
||||
end;
|
||||
SM_CYSCREEN,
|
||||
SM_CYVIRTUALSCREEN:
|
||||
begin
|
||||
@ -8433,13 +8454,13 @@ begin
|
||||
{$IFDEF DebugGDKTraps}EndGDKErrorTrap;{$ENDIF}
|
||||
end;
|
||||
end;
|
||||
{$ELSE UNIX}
|
||||
{$ELSE HasX}
|
||||
begin
|
||||
Result := False;
|
||||
DebugLn('TGtkWidgetSet.SetCursorPos not implemented for this platform');
|
||||
// Can this call TWin32WidgetSet.SetCursorPos?
|
||||
end;
|
||||
{$ENDIF UNIX}
|
||||
{$ENDIF HasX}
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
Function: SetFocus
|
||||
|
@ -66,6 +66,10 @@ function gdk_cursor_new_from_pixbuf(display: PGdkDisplay; pixbuf: PGdkPixbuf; x,
|
||||
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;
|
||||
|
||||
{$ifdef GTK_2_8}
|
||||
// gdk 2.8
|
||||
procedure gdk_display_warp_pointer(display: PGdkDisplay; screen: PGdkScreen; x, y: gint); cdecl; external gdklib;
|
||||
{$endif}
|
||||
{ for future use
|
||||
function gdk_display_supports_cursor_alpha(display: PGdkDisplay): gBoolean; cdecl; external gdklib;
|
||||
function gdk_display_supports_cursor_color(display: PGdkDisplay): gBoolean; cdecl; external gdklib;
|
||||
|
@ -31,6 +31,8 @@ interface
|
||||
{$ASSERTIONS ON}
|
||||
{$endif}
|
||||
|
||||
//{$I gtkdefines.inc}
|
||||
|
||||
uses
|
||||
Types, Classes, SysUtils,
|
||||
{$IfNDef GTK2_2}
|
||||
|
@ -481,6 +481,16 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
function TGtk2WidgetSet.SetCursorPos(X, Y: Integer): Boolean;
|
||||
begin
|
||||
{$ifdef GTK_2_8}
|
||||
gdk_display_warp_pointer(gdk_display_get_default(), gdk_screen_get_default(), X, Y);
|
||||
Result := True;
|
||||
{$else}
|
||||
Result:=inherited SetCursorPos(X, Y);
|
||||
{$endif}
|
||||
end;
|
||||
|
||||
{------------------------------------------------------------------------------
|
||||
function ShowWindow(hWnd: HWND; nCmdShow: Integer): Boolean;
|
||||
|
||||
|
@ -44,6 +44,7 @@ function ExtTextOut(DC: HDC; X, Y: Integer; Options: Longint; Rect: PRect; Str:
|
||||
function GetCursorPos(var lpPoint: TPoint ): Boolean; override;
|
||||
function GetTextExtentPoint(DC: HDC; Str: PChar; Count: Integer; var Size: TSize): Boolean; override;
|
||||
|
||||
function SetCursorPos(X, Y: Integer): Boolean; override;
|
||||
function ShowWindow(hWnd: HWND; nCmdShow: Integer): Boolean; override;
|
||||
|
||||
function TextOut(DC: HDC; X,Y : Integer; Str : Pchar; Count: Integer) : Boolean; override;
|
||||
|
Loading…
Reference in New Issue
Block a user