- 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:
paul 2007-09-27 09:23:06 +00:00
parent 544849a53e
commit df5e7aa81e
6 changed files with 51 additions and 12 deletions

View File

@ -79,6 +79,7 @@
// not supported
{$fatal X is required for GTK1}
{$endif}
{$define GTK_2_8}
{$endif}

View File

@ -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

View File

@ -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;

View File

@ -31,6 +31,8 @@ interface
{$ASSERTIONS ON}
{$endif}
//{$I gtkdefines.inc}
uses
Types, Classes, SysUtils,
{$IfNDef GTK2_2}

View File

@ -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;

View File

@ -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;