gtk2 changes for pixmap, getcursorpos, mouse events workaround

git-svn-id: trunk@4573 -
This commit is contained in:
ajgenius 2003-09-06 17:24:52 +00:00
parent e6d462d8dd
commit bf84728787
5 changed files with 114 additions and 19 deletions

View File

@ -1582,8 +1582,10 @@ begin
{$ENDIF} {$ENDIF}
p, Filename); p, Filename);
GdiObject^.GDIBitmapType:=gbPixmap; GdiObject^.GDIBitmapType:=gbPixmap;
gdk_window_get_geometry(GdiObject^.GDIPixmapObject, // gdk_window_get_geometry(GdiObject^.GDIPixmapObject,
nil, nil, @Width, @Height, @Depth); // nil, nil, @Width, @Height, @Depth);
gdk_drawable_get_size(GdiObject^.GDIPixmapObject,@Width, @Height);
Depth := gdk_drawable_get_depth(GdiObject^.GDIPixmapObject);
If GdiObject^.Visual <> nil then If GdiObject^.Visual <> nil then
GDK_Visual_UnRef(GdiObject^.Visual); GDK_Visual_UnRef(GdiObject^.Visual);
@ -1637,8 +1639,10 @@ var
{$ENDIF} {$ENDIF}
0); 0);
gdk_window_get_geometry(PGDIObject(TMP)^.GDIPixmapObject, // gdk_window_get_geometry(PGDIObject(TMP)^.GDIPixmapObject,
nil, nil, nil, nil, @Depth); // nil, nil, nil, nil, @Depth);
Depth := gdk_drawable_get_depth(PGDIObject(TMP)^.GDIPixmapObject);
If PGDIObject(TMP)^.Visual <> nil then If PGDIObject(TMP)^.Visual <> nil then
GDK_Visual_UnRef(PGDIObject(TMP)^.Visual); GDK_Visual_UnRef(PGDIObject(TMP)^.Visual);
@ -1747,9 +1751,10 @@ Type
{$ENDIF} {$ENDIF}
0); 0);
gdk_window_get_geometry(GDIPixmapObject, // gdk_window_get_geometry(GDIPixmapObject,
nil, nil, nil, nil, @Depth); // nil, nil, nil, nil, @Depth);
Depth := gdk_drawable_get_depth(GDIPixmapObject);
If Visual <> nil then If Visual <> nil then
GDK_Visual_UnRef(Visual); GDK_Visual_UnRef(Visual);
@ -2620,7 +2625,7 @@ begin
Begin Begin
if (TButton(Sender).Default) if (TButton(Sender).Default)
and (GTK_WIDGET_CAN_DEFAULT(pgtkwidget(handle))) then and (GTK_WIDGET_CAN_DEFAULT(pgtkwidget(handle))) then
gtk_widget_grab_default(pgtkwidget(handle)) //gtk_widget_grab_default(pgtkwidget(handle))
else begin else begin
{writeln('LM_BTNDEFAULT_CHANGED ',TButton(Sender).Name,':',Sender.ClassName,' widget can not grab default ', {writeln('LM_BTNDEFAULT_CHANGED ',TButton(Sender).Name,':',Sender.ClassName,' widget can not grab default ',
' visible=',GTK_WIDGET_VISIBLE(PGtkWidget(Handle)), ' visible=',GTK_WIDGET_VISIBLE(PGtkWidget(Handle)),
@ -3926,7 +3931,7 @@ begin
LM_PAINT : LM_PAINT :
begin begin
ConnectSenderSignalAfter(gFixed, 'expose-event', @GTKExposeEventAfter); ConnectSenderSignalAfter(gFixed, 'expose-event', @GTKExposeEventAfter);
{$IFNDEF Gtk2} {$IFDEF Gtk1}
ConnectSenderSignalAfter(gFixed, 'draw', @GTKDrawAfter); ConnectSenderSignalAfter(gFixed, 'draw', @GTKDrawAfter);
{$ENDIF} {$ENDIF}
ConnectSenderSignal(gFixed,'style-set', @GTKStyleChanged); ConnectSenderSignal(gFixed,'style-set', @GTKStyleChanged);
@ -3969,6 +3974,7 @@ begin
ConnectSenderSignal(PgtkObject(PgtkCombo(gObject)^.entry), ConnectSenderSignal(PgtkObject(PgtkCombo(gObject)^.entry),
'key-release-event', @GTKKeyUpDown, GDK_KEY_RELEASE_MASK); 'key-release-event', @GTKKeyUpDown, GDK_KEY_RELEASE_MASK);
end end
{$IfDef GTK1}
else if (Sender is TCustomForm) then begin else if (Sender is TCustomForm) then begin
ConnectSenderSignal(gObject, 'key-press-event', @GTKKeyUpDown, ConnectSenderSignal(gObject, 'key-press-event', @GTKKeyUpDown,
GDK_KEY_PRESS_MASK); GDK_KEY_PRESS_MASK);
@ -3979,6 +3985,7 @@ begin
GDK_KEY_PRESS_MASK); GDK_KEY_PRESS_MASK);
ConnectSenderSignal(gCore, 'key-release-event', @GTKKeyUpDown, ConnectSenderSignal(gCore, 'key-release-event', @GTKKeyUpDown,
GDK_KEY_RELEASE_MASK); GDK_KEY_RELEASE_MASK);
{$EndIf}
end; end;
LM_MONTHCHANGED : //calendar LM_MONTHCHANGED : //calendar
@ -4024,10 +4031,12 @@ begin
@GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK); @GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK);
end end
else begin else begin
{$IfDef GTK1}
ConnectSenderSignal(gFixed, 'motion-notify-event', @GTKMotionNotify, ConnectSenderSignal(gFixed, 'motion-notify-event', @GTKMotionNotify,
GDK_POINTER_MOTION_MASK); GDK_POINTER_MOTION_MASK);
ConnectSenderSignalAfter(gFixed, 'motion-notify-event', ConnectSenderSignalAfter(gFixed, 'motion-notify-event',
@GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK); @GTKMotionNotifyAfter, GDK_POINTER_MOTION_MASK);
{$EndIf}
end; end;
end; end;
@ -4053,10 +4062,12 @@ begin
// 'button-press-event', @gtkMouseBtnPress, GDK_BUTTON_PRESS_MASK); // 'button-press-event', @gtkMouseBtnPress, GDK_BUTTON_PRESS_MASK);
end end
else begin else begin
{$IfDef GTK1}
ConnectSenderSignal(gFixed, 'button-press-event', @gtkMouseBtnPress, ConnectSenderSignal(gFixed, 'button-press-event', @gtkMouseBtnPress,
GDK_BUTTON_PRESS_MASK); GDK_BUTTON_PRESS_MASK);
ConnectSenderSignalAfter(gFixed, 'button-press-event', ConnectSenderSignalAfter(gFixed, 'button-press-event',
@gtkMouseBtnPressAfter, GDK_BUTTON_PRESS_MASK); @gtkMouseBtnPressAfter, GDK_BUTTON_PRESS_MASK);
{$EndIf}
end; end;
end; end;
@ -4083,10 +4094,12 @@ begin
// GDK_BUTTON_RELEASE_MASK); // GDK_BUTTON_RELEASE_MASK);
end end
else begin else begin
{$IfDef GTK1}
ConnectSenderSignal(gFixed, 'button-release-event', @gtkMouseBtnRelease, ConnectSenderSignal(gFixed, 'button-release-event', @gtkMouseBtnRelease,
GDK_BUTTON_RELEASE_MASK); GDK_BUTTON_RELEASE_MASK);
ConnectSenderSignalAfter(gFixed, 'button-release-event', ConnectSenderSignalAfter(gFixed, 'button-release-event',
@gtkMouseBtnReleaseAfter,GDK_BUTTON_RELEASE_MASK); @gtkMouseBtnReleaseAfter,GDK_BUTTON_RELEASE_MASK);
{$EndIf}
end; end;
end; end;
@ -8151,6 +8164,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.408 2003/09/06 17:24:52 ajgenius
gtk2 changes for pixmap, getcursorpos, mouse events workaround
Revision 1.407 2003/09/05 19:29:38 mattias Revision 1.407 2003/09/05 19:29:38 mattias
Success: The first gtk2 application ran without error Success: The first gtk2 application ran without error

View File

@ -106,6 +106,17 @@ Function gdk_region_xor(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
begin begin
result := gdk_regions_xor(source1, source2); result := gdk_regions_xor(source1, source2);
end; end;
Function gdk_drawable_get_depth(Drawable : PGDKDrawable) : gint;
begin
gdk_window_get_geometry(Drawable, nil, nil, nil, nil, @result);
end;
Procedure gdk_drawable_get_size(Drawable : PGDKDrawable; Width, Height : PGInt);
begin
gdk_window_get_geometry(Drawable, nil, nil, Width, Height, nil);
end;
{$EndIf} {$EndIf}
{$Ifdef GTK2} {$Ifdef GTK2}
@ -4523,6 +4534,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.197 2003/09/06 17:24:52 ajgenius
gtk2 changes for pixmap, getcursorpos, mouse events workaround
Revision 1.196 2003/09/05 19:29:38 mattias Revision 1.196 2003/09/05 19:29:38 mattias
Success: The first gtk2 application ran without error Success: The first gtk2 application ran without error

View File

@ -497,6 +497,9 @@ function gtk_widget_get_ythickness(Style : PGTKWidget) : gint; overload;
Function gdk_region_union(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion; Function gdk_region_union(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
Function gdk_region_subtract(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion; Function gdk_region_subtract(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
Function gdk_region_xor(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion; Function gdk_region_xor(source1:PGdkRegion; source2:PGdkRegion) : PGdkRegion;
Function gdk_drawable_get_depth(Drawable : PGDKDrawable) : gint;
Procedure gdk_drawable_get_size(Drawable : PGDKDrawable; Width, Height : PGInt);
{$EndIF} {$EndIF}
{$Ifdef GTK2} {$Ifdef GTK2}

View File

@ -1695,8 +1695,8 @@ begin
gdk_pixmap_colormap_create_from_xpm_d(Window,Colormap, gdk_pixmap_colormap_create_from_xpm_d(Window,Colormap,
{$IfDef GTK1}@{$EndIf}(GdiObject^.GDIBitmapMaskObject), p, Data); {$IfDef GTK1}@{$EndIf}(GdiObject^.GDIBitmapMaskObject), p, Data);
gdk_window_get_geometry(GdiObject^.GDIPixmapObject, nil, nil, nil, nil, @Depth); // gdk_window_get_geometry(GdiObject^.GDIPixmapObject, nil, nil, nil, nil, @Depth);
Depth := gdk_drawable_get_depth(GdiObject^.GDIPixmapObject);
If GdiObject^.Visual <> nil then If GdiObject^.Visual <> nil then
GDK_Visual_UnRef(GdiObject^.Visual); GDK_Visual_UnRef(GdiObject^.Visual);
@ -3757,8 +3757,6 @@ var
xmask: Cardinal; xmask: Cardinal;
TopList, List: PGList; TopList, List: PGList;
begin begin
// TODO: GTK2 native implementation with gdk_display_get_pointer
Result := False; Result := False;
TopList := gdk_window_get_toplevels; TopList := gdk_window_get_toplevels;
@ -3782,7 +3780,6 @@ begin
then g_list_free(TopList); then g_list_free(TopList);
{$Else} {$Else}
begin begin
result := False;
{$EndIf} {$EndIf}
end; end;
@ -3848,7 +3845,8 @@ begin
If Drawable = nil then If Drawable = nil then
Result := GDK_Visual_Get_System^.Depth Result := GDK_Visual_Get_System^.Depth
else else
gdk_window_get_geometry(Drawable, nil, nil, nil, nil, @Result); //gdk_window_get_geometry(Drawable, nil, nil, nil, nil, @Result);
Result := gdk_drawable_get_depth(Drawable);
PLANES : { Number of planes } PLANES : { Number of planes }
// ToDo // ToDo
@ -4129,8 +4127,10 @@ begin
end; end;
gbPixmap: gbPixmap:
If GDIPixmapObject <> nil then begin If GDIPixmapObject <> nil then begin
gdk_window_get_geometry(GDIPixmapObject, nil, nil, //gdk_window_get_geometry(GDIPixmapObject, nil, nil,
@biWidth, @biHeight, @biBitCount); // @biWidth, @biHeight, @biBitCount);
biBitCount := gdk_drawable_get_depth(GDIPixmapObject);
gdk_drawable_get_size(GDIPixmapObject,@biWidth, @biHeight);
end; end;
gbImage : gbImage :
If GDI_RGBImageObject <> nil then If GDI_RGBImageObject <> nil then
@ -7409,7 +7409,7 @@ begin
NewFocusWidget:=Widget; NewFocusWidget:=Widget;
end; end;
if not gtk_widget_has_focus(NewFocusWidget) then begin if (NewFocusWidget <> nil) and not gtk_widget_has_focus(NewFocusWidget) then begin
// grab the focus to the parent window // grab the focus to the parent window
if (Screen<>nil) if (Screen<>nil)
and (Screen.FocusedForm<>nil) and (Screen.FocusedForm<>nil)
@ -8711,6 +8711,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.274 2003/09/06 17:24:52 ajgenius
gtk2 changes for pixmap, getcursorpos, mouse events workaround
Revision 1.273 2003/09/05 19:29:38 mattias Revision 1.273 2003/09/05 19:29:38 mattias
Success: The first gtk2 application ran without error Success: The first gtk2 application ran without error

View File

@ -31,20 +31,79 @@ interface
{$endif} {$endif}
uses uses
Classes, SysUtils, gdk2pixbuf, gtk2, gdk2, glib2, gtkInt; Classes, SysUtils,
{$IfNDef GTK2_2}
X, XLib, XUtil,
{$EndIf}
gdk2pixbuf, gtk2, gdk2, glib2, gtkInt;
type type
TGtk2Object = class(TGtkObject) TGtk2Object = class(TGtkObject)
public
function GetCursorPos(var lpPoint: TPoint ): Boolean; override;
end; end;
{$IfDef GTK2_2}//we need a GTK2_2 FLAG somehow
Procedure gdk_display_get_pointer(display : PGdkDisplay; screen :PGdkScreen; x :Pgint; y : Pgint; mask : PGdkModifierType); cdecl; external gdklib;
function gdk_display_get_default:PGdkDisplay; cdecl; external gdklib;
{$Else}
Function gdk_x11_drawable_get_xdisplay(drawable : PGdkDrawable) : PDisplay; cdecl; external gdklib;
Function gdk_x11_drawable_get_xid(drawable : PGdkDrawable) : Integer; cdecl; external gdklib;
{$EndIf}
implementation implementation
{------------------------------------------------------------------------------
Function: GetCursorPos
Params: lpPoint: The cursorposition
Returns: True if succesful
------------------------------------------------------------------------------}
function Tgtk2Object.GetCursorPos(var lpPoint: TPoint ): Boolean;
{$IfnDef GTK2_2} //we need a GTK2_2 FLAG somehow
var
root, child: pointer;
winx, winy: Integer;
xmask: Cardinal;
TopList, List: PGList;
{$EndIf}
begin
Result := False;
{$IfDef GTK2_2} //we need a GTK2_2 FLAG somehow
gdk_display_get_pointer(gdk_display_get_default(), nil, @lpPoint.X, @lpPoint.Y, nil);
Result := True;
{$Else}
TopList := gdk_window_get_toplevels;
List := TopList;
while List <> nil do
begin
if (List^.Data <> nil)
and gdk_window_is_visible(List^.Data)
then begin
XQueryPointer(gdk_x11_drawable_get_xdisplay (List^.Data),
gdk_x11_drawable_get_xid(List^.Data),
@root, @child, @lpPoint.X, @lpPoint.Y, @winx, @winy, @xmask);
Result := True;
Break;
end;
List := g_list_next(List);
end;
if TopList <> nil
then g_list_free(TopList);
{$EndIf}
end;
end. end.
{ {
$Log$ $Log$
Revision 1.3 2003/09/06 17:24:52 ajgenius
gtk2 changes for pixmap, getcursorpos, mouse events workaround
Revision 1.2 2003/08/27 20:55:51 mattias Revision 1.2 2003/08/27 20:55:51 mattias
fixed updating codetools on changing pkg output dir fixed updating codetools on changing pkg output dir