parent
6dd3e015b9
commit
afdfe2e2f7
|
|
@ -22,7 +22,7 @@ type tsgtkapi = class(tgtkapis)
|
|||
function AnsiToWidChar(c);
|
||||
begin
|
||||
if not ifstring(c) then return "";
|
||||
return c;
|
||||
return widestring(c);
|
||||
end
|
||||
function GetModuleFileNameExA();
|
||||
begin
|
||||
|
|
@ -113,12 +113,16 @@ type tsgtkapi = class(tgtkapis)
|
|||
global g_w_c_width;
|
||||
pcd := gtk_object_get_data(hwd,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
||||
gtk_window_move(hwd,x,max(0,y-pcd));
|
||||
if w>=0 and h>=0 then
|
||||
gtk_widget_set_size_request(hwd,w,max(0,h-pcd));
|
||||
if w>=0 and h>=0 then
|
||||
begin
|
||||
//gtk_window_set_default_size(hwd,w,max(0,h-pcd));
|
||||
//gtk_widget_set_size_request(hwd,w,max(0,h-pcd));
|
||||
gtk_window_resize(hwd,w,max(0,h-pcd));
|
||||
end
|
||||
end
|
||||
if f=0x4 then
|
||||
begin
|
||||
if not gtk_window_get_decorated(hwd) then
|
||||
//if not gtk_window_get_decorated(hwd) then
|
||||
gtk_window_set_type_hint(hwd,3);
|
||||
if cf and cf<>g_current_get_focus_widget then //设置一下focus
|
||||
begin
|
||||
|
|
@ -303,28 +307,41 @@ type tsgtkapi = class(tgtkapis)
|
|||
h0 := g_object_get_data(h,"gtk_layout_height");
|
||||
if (cx>=0 and cy>=0) and ( cx<>w0 or cy<>h0) then
|
||||
begin
|
||||
if gtk_window_get_resizable(h) then
|
||||
{if gtk_window_get_resizable(h) then
|
||||
begin
|
||||
gtk_widget_get_size_request(h,cx0,cy0); //改小一点
|
||||
if cx0>cx or cy0>cy then
|
||||
begin
|
||||
gtk_widget_set_size_request(h,cx,max(0,cy-pcd));
|
||||
end
|
||||
gtk_window_resize(h,cx,max(0,cy-pcd));
|
||||
//gtk_widget_set_size_request(h,cx,max(0,cy-pcd));
|
||||
//gtk_window_set_default_size(h,cx,max(0,cy-pcd));
|
||||
//echo "\r\nresize:",cx,"===",cy;
|
||||
//gtk_window_resize(h,cx,max(0,cy-pcd));
|
||||
end
|
||||
else
|
||||
begin
|
||||
//gtk_widget_get_size_request(h,cx0,cy0);
|
||||
//echo "\r\noldsize:",cx0,"====",cy0;
|
||||
//gtk_window_resize(wh,cx,cy);
|
||||
//
|
||||
gtk_widget_set_size_request(h,cx,max(0,cy-pcd));
|
||||
//gtk_window_resize(wh,cx,max(0,cy-pcd));
|
||||
//gtk_window_set_default_size(h,cx,max(0,cy-pcd));
|
||||
//gtk_window_set_decorated(h,true);
|
||||
//gtk_window_set_resizable(h,true);
|
||||
|
||||
//gtk_window_resize(h,cx,cy);
|
||||
//gtk_window_set_decorated(h,false);
|
||||
//gtk_window_resize_to_geometry(h,cx,cy);
|
||||
end
|
||||
end }
|
||||
if gtk_window_get_resizable(h) then
|
||||
begin
|
||||
gtk_widget_set_size_request(h,1,1);
|
||||
end else
|
||||
begin
|
||||
gtk_widget_set_size_request(h,cx,max(0,cy-pcd));
|
||||
end
|
||||
gtk_window_resize(h,cx,max(0,cy-pcd));
|
||||
g_object_set_data(h,"gtk_layout_width",cx);
|
||||
g_object_set_data(h,"gtk_layout_height",cy);
|
||||
flg .|=1;
|
||||
|
|
@ -3995,6 +4012,18 @@ type tgtkapis = class() //gtk
|
|||
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_();
|
||||
end
|
||||
|
||||
function gdk_keymap_get_for_display(disp:pointer):pointer;
|
||||
begin
|
||||
_f_ := static function(disp:pointer):pointer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(disp);
|
||||
end
|
||||
function gdk_keymap_get_modifier_state(kmp:pointer):integer;
|
||||
begin
|
||||
_f_ := static function(kmp:pointer):integer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(kmp);
|
||||
end
|
||||
|
||||
function gdk_screen_get_default():pointer;
|
||||
begin
|
||||
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
|
|
@ -4231,10 +4260,10 @@ type tgtkapis = class() //gtk
|
|||
_f_ := static procedure(w:pointer;tip:string);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(w,tip);
|
||||
end
|
||||
procedure gtk_widget_set_size_request(wd:pointer;h:integer;w:integer);
|
||||
procedure gtk_widget_set_size_request(wd:pointer;w:integer;h:integer);
|
||||
begin
|
||||
_f_ := static procedure(wd:pointer;h:integer;w:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(wd,h,w);
|
||||
_f_ := static procedure(wd:pointer;w:integer;h:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(wd,w,h);
|
||||
end
|
||||
procedure gtk_widget_get_size_request(wd:pointer;var h:integer;var w:integer);
|
||||
begin
|
||||
|
|
@ -4831,6 +4860,11 @@ type tgtkapis = class() //gtk
|
|||
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_();
|
||||
end
|
||||
function gdk_window_get_window_type(w:pointer);
|
||||
begin
|
||||
_f_ := static function(w:pointer):integer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(w);
|
||||
end
|
||||
procedure gdk_window_move_resize(w:pointer;x:integer;y:integer;wd:integer;h:integer);
|
||||
begin
|
||||
_f_ := static procedure(w:pointer;x:integer;y:integer;wd:integer;h:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
|
|
@ -4897,10 +4931,10 @@ type tgtkapis = class() //gtk
|
|||
_f_ := static function(w:pointer;p:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(w,p);
|
||||
end
|
||||
procedure gtk_window_get_size(wd:pointer;var h:integer;var w:integer);
|
||||
procedure gtk_window_get_size(wg:pointer;var w:integer;var h:integer);
|
||||
begin
|
||||
_f_ := static procedure(wd:pointer;var h:integer;var w:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(wd,h,w);
|
||||
_f_ := static procedure(wg:pointer;var w:integer;var h:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(wg,w,h);
|
||||
end
|
||||
procedure gtk_window_set_icon(w:pointer;ico:pointer);
|
||||
begin
|
||||
|
|
@ -4912,6 +4946,11 @@ type tgtkapis = class() //gtk
|
|||
_f_ := static procedure(w:pointer;p:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(wd,ps);
|
||||
end
|
||||
procedure gtk_window_set_default_size(p:pointer;w:integer;h:integer);
|
||||
begin
|
||||
_f_ := static procedure(p:pointer;w:integer;h:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(p,w,h);
|
||||
end
|
||||
procedure gtk_window_set_resizable(p:pointer;f:integer);
|
||||
begin
|
||||
_f_ := static procedure(p:pointer;f:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
|
|
@ -4937,6 +4976,16 @@ type tgtkapis = class() //gtk
|
|||
_f_ := static procedure(w:pointer;t:string);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(w,t);
|
||||
end
|
||||
procedure gtk_window_set_titlebar(w:pointer;t:pointer);
|
||||
begin
|
||||
_f_ := static procedure(w:pointer;t:pointer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(w,t);
|
||||
end
|
||||
function gtk_window_get_titlebar(w:pointer);
|
||||
begin
|
||||
_f_ := static function(w:pointer):pointer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(w);
|
||||
end
|
||||
procedure gtk_window_set_geometry_hints (window:pointer;eometry_widget:pointer;geometry:pointer;geom_mask:integer);
|
||||
begin
|
||||
_f_ := static procedure(window:pointer;eometry_widget:pointer;geometry:pointer;geom_mask:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||
|
|
@ -6560,8 +6609,9 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
Fdwstyle;
|
||||
FExdwstyle;
|
||||
///////////////////////////////////
|
||||
function CanignoreBtnpress();virtual;
|
||||
function CanignoreBtnpress();virtual; //忽略
|
||||
begin
|
||||
// return false;
|
||||
return true;
|
||||
end
|
||||
public
|
||||
|
|
@ -6583,6 +6633,22 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
FHitwidgetposition := 0;
|
||||
end
|
||||
static FLastPosition;
|
||||
class function mywidgetmousehit(id,p);
|
||||
begin
|
||||
return executeMessageA(id,_const.WM_NCHITTEST,0,makelong(p[0],p[1]));
|
||||
end
|
||||
class function mywidgetmousemovecall(id,p);
|
||||
begin
|
||||
if hasMessageFromGtkMessageQueue(id,_const.WM_MOUSEMOVE) then return ;
|
||||
mp := makelong(p[0],p[1]);
|
||||
global g_gtk_keytable,g_gtk_buttontable;
|
||||
wp := 0;
|
||||
if g_gtk_keytable[0x10] then wp .|= 0x0004;
|
||||
if g_gtk_keytable[0x11] then wp .|= 0x0008;
|
||||
wp .|= g_gtk_buttontable[0];
|
||||
wp .|= g_gtk_buttontable[1];
|
||||
AddMessageToGtkMessageQueue(id,_const.WM_MOUSEMOVE,wp,mp,0);
|
||||
end
|
||||
class function widgetmousehit(nfer,id);
|
||||
begin
|
||||
_wapi.GetCursorPos(p);
|
||||
|
|
@ -6767,86 +6833,97 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
_f_ := static function(w:pointer):integegr;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(w);
|
||||
end
|
||||
function imitate_event_size();virtual; //模拟移动
|
||||
begin
|
||||
return true;
|
||||
end
|
||||
function get_ignore_event_type(tp);virtual;
|
||||
begin
|
||||
return false;
|
||||
end
|
||||
function GtkEventDispatchA(a,b,c,d);//gtk消息分发
|
||||
begin
|
||||
global g_gtk_scroll_lock;
|
||||
if g_gtk_scroll_lock then
|
||||
begin
|
||||
return true;
|
||||
end
|
||||
if FHitwidgetposition in array(110,111,112,115) then
|
||||
begin
|
||||
mn := GetGtkEventNameOrId(b);
|
||||
if mn="event" then
|
||||
if imitate_event_size() then
|
||||
begin
|
||||
global g_gtk_scroll_lock;
|
||||
if g_gtk_scroll_lock then
|
||||
begin
|
||||
e := new _GdkEventAny(c);
|
||||
if 3=e.ttype then
|
||||
begin
|
||||
ogps := Fsyscommand0x12info[0];
|
||||
xy := Fsyscommand0x12info[1];
|
||||
cxy := array(0,0);
|
||||
_wapi.GetCursorPos(cxy);
|
||||
dx := cxy[0]-ogps[0];
|
||||
dy := cxy[1]-ogps[1];
|
||||
case FHitwidgetposition of //0 ÐÞ¸ÄΪ -1
|
||||
110:
|
||||
begin
|
||||
if dx<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0]+dx,xy[1],xy[2]-dx,xy[3],0);
|
||||
end
|
||||
111:
|
||||
begin
|
||||
if dx<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0],xy[1],xy[2]+dx,xy[3],0);
|
||||
end
|
||||
112:
|
||||
begin
|
||||
if dy<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0],xy[1]+dy,xy[2],xy[3]-dy,0);
|
||||
end
|
||||
115:
|
||||
begin
|
||||
if dy<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0],xy[1],xy[2],xy[3]+dy,0);
|
||||
end
|
||||
|
||||
|
||||
end;
|
||||
return 1;
|
||||
end else
|
||||
if 7 = e.ttype then
|
||||
begin
|
||||
FHitwidgetposition := 0;
|
||||
Fsyscommand0x12info := nil;
|
||||
FMousemoveernotify.unlock();
|
||||
//return ;
|
||||
end
|
||||
end
|
||||
end else
|
||||
if Fsyscommand0x12 and ifarray(Fsyscommand0x12info) then
|
||||
begin
|
||||
mn := GetGtkEventNameOrId(b);
|
||||
if mn="event" then
|
||||
return true;
|
||||
end
|
||||
if FHitwidgetposition in array(110,111,112,115) then
|
||||
begin
|
||||
e := new _GdkEventAny(c);
|
||||
if 3=e.ttype then
|
||||
mn := GetGtkEventNameOrId(b);
|
||||
if mn="event" then
|
||||
begin
|
||||
ogps := Fsyscommand0x12info[0];
|
||||
xy := Fsyscommand0x12info[1];
|
||||
cxy := array(0,0);
|
||||
_wapi.GetCursorPos(cxy);
|
||||
dx := cxy[0]-ogps[0];
|
||||
dy := cxy[1]-ogps[1];
|
||||
if dx>3 or dx<-3 or dy<-3 or dy>3 then
|
||||
e := new _GdkEventAny(c);
|
||||
if 3=e.ttype then
|
||||
begin
|
||||
_wapi.SetWindowPos(a.handle,0,xy[0]+dx,xy[1]+dy,-1,-1,0);
|
||||
ogps := Fsyscommand0x12info[0];
|
||||
xy := Fsyscommand0x12info[1];
|
||||
cxy := array(0,0);
|
||||
_wapi.GetCursorPos(cxy);
|
||||
dx := cxy[0]-ogps[0];
|
||||
dy := cxy[1]-ogps[1];
|
||||
case FHitwidgetposition of //0 修改为 -1
|
||||
110:
|
||||
begin
|
||||
if dx<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0]+dx,xy[1],xy[2]-dx,xy[3],0);
|
||||
end
|
||||
111:
|
||||
begin
|
||||
if dx<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0],xy[1],xy[2]+dx,xy[3],0);
|
||||
end
|
||||
112:
|
||||
begin
|
||||
if dy<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0],xy[1]+dy,xy[2],xy[3]-dy,0);
|
||||
end
|
||||
115:
|
||||
begin
|
||||
if dy<>0 then _wapi.SetWindowPos(a.handle,-1,xy[0],xy[1],xy[2],xy[3]+dy,0);
|
||||
end
|
||||
|
||||
|
||||
end;
|
||||
return 1;
|
||||
end else
|
||||
if 7 = e.ttype then
|
||||
begin
|
||||
FHitwidgetposition := 0;
|
||||
Fsyscommand0x12info := nil;
|
||||
FMousemoveernotify.unlock();
|
||||
//return ;
|
||||
end
|
||||
return 1;
|
||||
end else
|
||||
if 7 = e.ttype then
|
||||
end
|
||||
end else
|
||||
if Fsyscommand0x12 and ifarray(Fsyscommand0x12info) then
|
||||
begin
|
||||
mn := GetGtkEventNameOrId(b);
|
||||
if mn="event" then
|
||||
begin
|
||||
Fsyscommand0x12 := false;
|
||||
Fsyscommand0x12info := nil;
|
||||
FMousemoveernotify.unlock();
|
||||
//return ;
|
||||
end
|
||||
end
|
||||
e := new _GdkEventAny(c);
|
||||
if 3=e.ttype then
|
||||
begin
|
||||
ogps := Fsyscommand0x12info[0];
|
||||
xy := Fsyscommand0x12info[1];
|
||||
cxy := array(0,0);
|
||||
_wapi.GetCursorPos(cxy);
|
||||
dx := cxy[0]-ogps[0];
|
||||
dy := cxy[1]-ogps[1];
|
||||
if dx>3 or dx<-3 or dy<-3 or dy>3 then
|
||||
begin
|
||||
_wapi.SetWindowPos(a.handle,0,xy[0]+dx,xy[1]+dy,-1,-1,0);
|
||||
end
|
||||
return 1;
|
||||
end else
|
||||
if 7 = e.ttype then
|
||||
begin
|
||||
Fsyscommand0x12 := false;
|
||||
Fsyscommand0x12info := nil;
|
||||
FMousemoveernotify.unlock();
|
||||
//return ;
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return GtkEventDispatchb(a,b,c,d);
|
||||
end
|
||||
|
|
@ -6856,7 +6933,9 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
global g_current_get_focus_widget,g_current_loss_focus_widget,g_gtk_buttontable,G_GTK_WINDOW_ACTIVATE, g_gtk_keytable;
|
||||
if mn = "event" then
|
||||
begin
|
||||
e := new _GdkEventAny(c);
|
||||
e := new _GdkEventAny(c);
|
||||
//echo "\r\nwindow:",_wapi.gtk_widget_get_window(a.handle)," ",e.window;
|
||||
if get_ignore_event_type(e) then return false;
|
||||
case e.ttype of
|
||||
GDK_WINDOW_STATE:
|
||||
begin
|
||||
|
|
@ -6908,6 +6987,8 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
end
|
||||
GDK_BUTTON_PRESS:
|
||||
begin
|
||||
//echo "\r\n bt press",datetimetostr(now())," ",handle," ",e.window," >>",_Wapi.gtk_widget_get_window(handle),"+++",_wapi.gdk_window_get_window_type(e.window),"***",
|
||||
// _wapi.gtk_widget_get_toplevel(handle);
|
||||
e := new _GdkEventButton(c);
|
||||
psi := makelong(integer(e.x),integer(e.y));
|
||||
//r := array();
|
||||
|
|
@ -7014,7 +7095,8 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
CallTslVclProc(_const.WM_RBUTTONDBLCLK ,wp,psi);
|
||||
end
|
||||
end ;
|
||||
return CanignoreBtnpress();
|
||||
//return true; //此处处理
|
||||
return CanignoreBtnpress();
|
||||
end
|
||||
8,9: //key
|
||||
begin
|
||||
|
|
@ -7024,7 +7106,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
|
||||
e := new _GdkEventKey(c);
|
||||
kv := e.keyval;
|
||||
acskey := array(
|
||||
{acskey := array(
|
||||
65505: 0x10, //shift
|
||||
65506: 0x10,
|
||||
65507: 0x11, //control
|
||||
|
|
@ -7041,7 +7123,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
begin
|
||||
g_gtk_keytable[acskey[kv]] := 0;
|
||||
end
|
||||
end
|
||||
end }
|
||||
///////////////菜单按键
|
||||
if kv = 65513 or kv = 65514 then
|
||||
begin
|
||||
|
|
@ -7371,7 +7453,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
//e := new _GdkEventCrossing(c);
|
||||
//echo tostn(e._getdata_());
|
||||
//echo "===enter\r\n";
|
||||
FMousemoveernotify.push(a.handle);
|
||||
//FMousemoveernotify.push(a.handle);
|
||||
//_wapi.GetCursorPos(ps);
|
||||
//e := new _GdkEventMotion(c);
|
||||
//echo "\r\n enter:",a.handle,tostn(ps),tostn(e._getdata_());
|
||||
|
|
@ -7379,18 +7461,16 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
|
||||
11: //mouse out
|
||||
begin
|
||||
FMousemoveernotify.pop(a.handle);
|
||||
//FMousemoveernotify.pop(a.handle);
|
||||
//echo "\r\nleave:",a.handle;
|
||||
end
|
||||
3:
|
||||
begin
|
||||
// echo "\r\n move",datetimetostr(now()),"====",a.handle,"****",FMousemoveernotify.feach();
|
||||
// if not(FMousemoveernotify.inner(a.handle)) then
|
||||
// begin
|
||||
// echo "====move=====";
|
||||
// e := new _GdkEventMotion(c);
|
||||
// CallTslVclProc(_const.WM_MOUSEMOVE ,0,makelong(integer(e.x),integer(e.y)));
|
||||
// end
|
||||
e := new _GdkEventMotion(c);
|
||||
//CallTslVclProc(_const.WM_MOUSEMOVE ,0,makelong(integer(e.x),integer(e.y)),true);
|
||||
id := a.handle;
|
||||
mywidgetmousehit(id,array(integer(e.x_root),integer(e.y_root)));
|
||||
mywidgetmousemovecall(id,array(integer(e.x),integer(e.y)));
|
||||
|
||||
end
|
||||
12: //focus
|
||||
|
|
@ -7436,10 +7516,10 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
end ;
|
||||
end
|
||||
|
||||
if mn="activate" then
|
||||
begin
|
||||
//if mn="activate" then
|
||||
//begin
|
||||
//echo "\r\nacive","==",b,"==",c,"d";
|
||||
end
|
||||
//end
|
||||
//
|
||||
r := GtkEventDispatch(a,mn,c,d);
|
||||
return r;
|
||||
|
|
@ -7567,6 +7647,14 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
"activate-default":"tsl_gtk_activate_default_event_cb"
|
||||
);
|
||||
end
|
||||
function connect_test(n,f); //测试使用
|
||||
begin
|
||||
if FHandle=0 then return 0;
|
||||
if not ifstring(n) then return 0;
|
||||
ln := FormularSignalName(lowercase(n));
|
||||
eid := GetGtkEventNameOrId(ln);
|
||||
lnid := g_signal_connect_data(FHandle, ln, makeinstance(fn), eid,nil,0);
|
||||
end
|
||||
function Connect(n,f); //连接消息
|
||||
begin
|
||||
//删除connect
|
||||
|
|
@ -7574,7 +7662,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
//connect id
|
||||
if FHandle=0 then return 0;
|
||||
if not ifstring(n) then return 0;
|
||||
ln := FormularSingalName(lowercase(n));
|
||||
ln := FormularSignalName(lowercase(n));
|
||||
lnid := FConnectNameIds[ln];
|
||||
if lnid then
|
||||
begin
|
||||
|
|
@ -7747,7 +7835,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
function SetHandle(h);
|
||||
begin
|
||||
if FHandle then return 0;
|
||||
initNewSingal();
|
||||
initNewSignal();
|
||||
FConnectNameIds := array();
|
||||
FConnectHandlers := array();
|
||||
FValues := array();
|
||||
|
|
@ -7764,7 +7852,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
return true;
|
||||
end
|
||||
end
|
||||
function initNewSingal();
|
||||
function initNewSignal();
|
||||
begin
|
||||
return ;
|
||||
//wm-user
|
||||
|
|
@ -7785,7 +7873,7 @@ type tgtk_ctl_object = class(_gtkeventtype)
|
|||
end
|
||||
|
||||
end
|
||||
function FormularSingalName(n);
|
||||
function FormularSignalName(n);
|
||||
begin
|
||||
r := "";
|
||||
for i := 1 to length(n) do
|
||||
|
|
@ -7837,10 +7925,10 @@ type tgtk_im_object = class(tgtk_ctl_object)
|
|||
function getsignalmap();override;
|
||||
begin
|
||||
return array(
|
||||
"preedit-start":"dodeleteevents" ,
|
||||
"preedit-changed":"dodeleteevents" ,
|
||||
"preedit-surrounding":"dodeleteevents" ,
|
||||
"preedit-end":"dodeleteevents" ,
|
||||
"preedit-start":"do_two_param_event" ,
|
||||
"preedit-changed":"do_two_param_event" ,
|
||||
"preedit-surrounding":"do_two_param_event" ,
|
||||
"preedit-end":"do_two_param_event" ,
|
||||
"commit":"tsl_gtk_normal_event_cb"
|
||||
);
|
||||
end
|
||||
|
|
@ -8502,7 +8590,7 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
|||
end
|
||||
end
|
||||
protected
|
||||
function initadjustSingal();
|
||||
function initadjustSignal();
|
||||
begin
|
||||
FHadjustment := _wapi.gtk_adjustment_new(0.0,0.0,0.0,1.0,1.0,1.0);
|
||||
FHscrollbar := _wapi.gtk_hscrollbar_new(FHadjustment);
|
||||
|
|
@ -8562,6 +8650,21 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|||
end
|
||||
inherited;
|
||||
end
|
||||
function imitate_event_size();override;
|
||||
begin
|
||||
if _wapi.gtk_object_get_data(Handle,"gtk_wnd_hs_caption") then return false;
|
||||
return true;
|
||||
end
|
||||
function get_ignore_event_type(e);override;
|
||||
begin
|
||||
tp := e.ttype;
|
||||
h := handle;
|
||||
if (tp in array(GDK_MOTION_NOTIFY,GDK_BUTTON_PRESS,GDK_BUTTON_RELEASE)) and _wapi.gtk_object_get_data(h,"gtk_wnd_hs_caption") and (e.window = _Wapi.gtk_widget_get_window(h)) then
|
||||
begin
|
||||
return true;
|
||||
end
|
||||
return false;
|
||||
end
|
||||
function GtkEventDispatch(a,mn,c,d);override;
|
||||
begin
|
||||
//消息分发
|
||||
|
|
@ -8578,9 +8681,11 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|||
cf := new _GdkEventConfigure(c);
|
||||
ALeft := integer(cf.x);
|
||||
ATop := integer(cf.y);
|
||||
//echo "\r\n>>>",ALeft,"===",ATop;
|
||||
AWidth := integer(cf.width);
|
||||
AHeight := integer(cf.height);
|
||||
//AWidth := integer(cf.width);
|
||||
//AHeight := integer(cf.height);
|
||||
//_wapi.gtk_window_get_position(h,aleft,atop);
|
||||
_wapi.gtk_window_get_size(h,AWidth,AHeight);
|
||||
//echo "\r\nconfigure:",AWidth," ",AHeight;
|
||||
SizeChanged :=(cx <> AWidth)or(cy <> AHeight);
|
||||
PosChanged :=(x <> ALeft)or(y <> ATop);
|
||||
if(not SizeChanged)and(not PosChanged)then
|
||||
|
|
@ -8626,19 +8731,32 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|||
function CreateWnd(dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nwidth,nheight,hwndparent,hmenu,hinstance,lpParam);override;
|
||||
begin
|
||||
//echo "\r\nctl===popup:",tostn(params),tostn(__stack_frame),datetimetostr(now()),">>>>";
|
||||
h := _wapi.gtk_window_new(0); //¿Ø¼þ²ã
|
||||
srszie := (_const.WS_SIZEBOX .& dwStyle)=_const.WS_SIZEBOX;
|
||||
|
||||
hascap := (_const.WS_CAPTION .& dwStyle)= _const.WS_CAPTION or (_const.WS_SYSMENU .& dwStyle)=_const.WS_SYSMENU;
|
||||
srszie :=((_const.WS_MAXIMIZEBOX .& dwStyle)=_const.WS_MAXIMIZEBOX) or ((_const.WS_SIZEBOX .& dwStyle)=_const.WS_SIZEBOX);
|
||||
//h := _wapi.gtk_window_new(0); //控件层
|
||||
if hascap or srszie then
|
||||
begin
|
||||
h := _wapi.gtk_window_new(0); //控件层
|
||||
end
|
||||
else
|
||||
begin
|
||||
h := _wapi.gtk_window_new(0); //popup
|
||||
end
|
||||
|
||||
//_wapi.gtk_widget_set_events(h,0x3FFFFFE);
|
||||
_wapi.gtk_window_set_default_size(h,10,10);
|
||||
//_wapi.gtk_widget_set_size_request(h,300,300);
|
||||
_wapi.gtk_object_set_data(h,"gtk_wnd_hs_caption",1);
|
||||
if not((_const.WS_CAPTION .& dwStyle)= _const.WS_CAPTION or (_const.WS_SYSMENU .& dwStyle)=_const.WS_SYSMENU) then
|
||||
begin
|
||||
|
||||
if not(hascap or srszie) then
|
||||
begin
|
||||
_wapi.gtk_window_set_decorated(h,false);
|
||||
_wapi.gtk_object_set_data(h,"gtk_wnd_hs_caption",0);
|
||||
//无菜单顶层窗口
|
||||
end else
|
||||
begin
|
||||
//nheight := max(10,nheight_-30);
|
||||
_wapi.gtk_window_set_title(h,_wapi.TslStringToGtk(lpWindowName));
|
||||
_wapi.gtk_window_set_decorated(h,true);
|
||||
_wapi.gtk_window_set_title(h,_wapi.TslStringToGtk(lpWindowName));
|
||||
//有标题 有菜单的顶层窗口
|
||||
end
|
||||
if (_const.WS_BORDER .& dwStyle)=_const.WS_BORDER then //Border
|
||||
|
|
@ -8663,41 +8781,40 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
|||
|
||||
FLayouter := ctllayout;
|
||||
/////////////////////////水平滚动条////////////////////////////////////
|
||||
initadjustSingal();
|
||||
initadjustSignal();
|
||||
evtdrawbox := _wapi.gtk_event_box_new(); //lot 放一个event box 便于绘制
|
||||
|
||||
_wapi.gtk_widget_set_events(evtdrawbox, 0x3FFFFFE);
|
||||
_wapi.gtk_layout_put(ctllayout,evtdrawbox,0,0);
|
||||
clientLayout := _Wapi.gtk_layout_new(0,0);
|
||||
_wapi.gtk_container_add(evtdrawbox,clientLayout);
|
||||
global g_w_c_width;
|
||||
pcd := _wapi.gtk_object_get_data(h,"gtk_wnd_hs_caption")?g_w_c_width:0;
|
||||
_wapi.gtk_widget_set_size_request(evtdrawbox,nwidth,max(0,nheight-pcd));
|
||||
//_wapi.gtk_widget_set_size_request(evtdrawbox,2000,2000);
|
||||
//_wapi.gtk_widget_set_events(eb,16777214);
|
||||
//_wapi.gtk_widget_set_size_request(evtdrawbox,nwidth,max(0,nheight-pcd));
|
||||
_wapi.g_object_set_data(evtdrawbox,"gtk_client_parent",h);
|
||||
FClientWideget := evtdrawbox;
|
||||
//_wapi.gtk_widget_set_can_focus(eb,true);
|
||||
_wapi.g_object_set_data(h,"gtk_layout",clientLayout);
|
||||
_wapi.g_object_set_data(clientLayout,"gtk_layout_owner",h);
|
||||
|
||||
InitWidgetSize(h,x,y,nwidth,nheight);
|
||||
|
||||
_wapi.gtk_window_move(h,x,max(0,y-pcd));
|
||||
InitWidgetSize(h,x,y,nwidth,nheight);
|
||||
if nwidth>0 and nheight>0 then
|
||||
begin
|
||||
_wapi.gtk_window_resize(h,nwidth,max(0,nheight-pcd));
|
||||
_wapi.gtk_window_resize(h,nwidth,max(1,nheight-pcd));
|
||||
end
|
||||
_wapi.gtk_window_move(h,x,max(0,y-pcd));
|
||||
_wapi.gtk_widget_show_all(vbox);
|
||||
InitContainerList(h); //ÈÝÆ÷list
|
||||
InitContainerList(h); //容器list
|
||||
handle := h;
|
||||
_wapi.SetParent(h,hwndparent);
|
||||
if (_const.WS_VISIBLE .& dwStyle)=_const.WS_VISIBLE then
|
||||
begin
|
||||
_wapi.ShowWindow(h);
|
||||
//_wapi.ShowWindow(h);
|
||||
_wapi.gtk_widget_show(h);
|
||||
end else
|
||||
begin
|
||||
_wapi.gtk_widget_hide(h);
|
||||
end
|
||||
_wapi.SetParent(h,hwndparent);
|
||||
handle := h;
|
||||
|
||||
return inherited;
|
||||
end
|
||||
|
||||
|
|
@ -8736,6 +8853,7 @@ type tgtk_ctl_window = class(tgtk_ctl_scroll_window)
|
|||
ctllayout := _Wapi.gtk_layout_new(0,0);//控件布局层
|
||||
_wapi.gtk_container_add(h,ctllayout);
|
||||
evtdrawbox := _wapi.gtk_event_box_new(); //布局绘制层
|
||||
_wapi.gtk_widget_set_events(evtdrawbox, 0x3FFFFFE);
|
||||
clientlayout := _wapi.gtk_layout_new(0,0); //客户区布局层
|
||||
_wapi.gtk_container_add(evtdrawbox,clientlayout);
|
||||
_wapi.gtk_layout_put(ctllayout,evtdrawbox,0,0);
|
||||
|
|
@ -8755,7 +8873,7 @@ type tgtk_ctl_window = class(tgtk_ctl_scroll_window)
|
|||
_wapi.gtk_widget_show(h);
|
||||
end
|
||||
/////////////////////////滚动条////////////////////////////////////
|
||||
initadjustSingal();
|
||||
initadjustSignal();
|
||||
///////////////////////////颜色处理/////////////////////////////////////////
|
||||
{c := new _GdkColor(nil);
|
||||
c.SetRgb(0,0xffff,0);
|
||||
|
|
@ -9293,9 +9411,24 @@ begin
|
|||
_f_ := static function(argc:string;argcv:string):integer;cdecl;external getfuncptrbyname(0,functionname());
|
||||
return ##_f_(argc,argcv);
|
||||
end
|
||||
function signal_connect_data(instance:pointer; detailed_signal:string; c_handler:pointer;data:pointer;dd:pointer;f:integer):pointer;
|
||||
begin
|
||||
_f_ := static function(instance:pointer; detailed_signal:string; c_handler:pointer;data:pointer;dd:pointer;f:integer):pointer;cdecl;external getfuncptrbyname(0,"g_signal_connect_data");
|
||||
return ##_f_(instance,detailed_signal,c_handler,data,dd,f);
|
||||
end
|
||||
function keymap_get_modifier_state(kmp:pointer):integer;
|
||||
begin
|
||||
_f_ := static function(kmp:pointer):integer;cdecl;external getfuncptrbyname(0,"gdk_keymap_get_modifier_state");
|
||||
return ##_f_(kmp);
|
||||
end
|
||||
function keymap_get_default():pointer;
|
||||
begin
|
||||
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,"gdk_keymap_get_default");
|
||||
return ##_f_();
|
||||
end
|
||||
function igtk();
|
||||
begin
|
||||
global g_w_i_datas,g_w_c_width, g_gtk_buttontable,g_gtk_keytable,g_gtk_call_handler_manager,g_gtk_font_get_size;
|
||||
global g_w_i_datas,g_w_c_width, g_gtk_buttontable,g_gtk_keytable,g_gtk_call_handler_manager,g_gtk_font_get_size;
|
||||
g_gtk_font_get_size := array();
|
||||
gtk_init_check(nil,nil);
|
||||
g_w_i_datas := array();
|
||||
|
|
@ -9303,6 +9436,8 @@ begin
|
|||
g_gtk_buttontable := array(0,0);
|
||||
g_gtk_keytable := array(0x10:0,0x11:0,0x12:0);
|
||||
g_gtk_call_handler_manager := new tinstancemanager();
|
||||
kmp := keymap_get_default();
|
||||
signal_connect_data(kmp,"state-changed",g_gtk_call_handler_manager.get(thisfunction(tsl_gtk_keymp_state)),0,0);
|
||||
end
|
||||
function ugtk();
|
||||
begin
|
||||
|
|
@ -9325,7 +9460,7 @@ begin
|
|||
"tsl_gtk_day_select_event": return mgnr.get(thisfunction(tsl_gtk_day_select_event));
|
||||
"tsl_gtk_changed_event": return mgnr.get(thisfunction(tsl_gtk_changed_event));
|
||||
"tsl_gtk_preedit_changed_event": return mgnr.get(thisfunction(tsl_gtk_preedit_changed_event));
|
||||
"dodeleteevents": return mgnr.get(thisfunction(dodeleteevents));
|
||||
"do_two_param_event": return mgnr.get(thisfunction(do_two_param_event));
|
||||
"tsl_gtk_normal_event_cb": return mgnr.get(thisfunction(tsl_gtk_normal_event_cb));
|
||||
"tsl_gtk_normal_event_bc": return mgnr.get(thisfunction(tsl_gtk_normal_event_bc));
|
||||
"tsl_gtk_idle": return mgnr.get(thisfunction(tsl_gtk_idle));
|
||||
|
|
@ -9345,6 +9480,27 @@ begin
|
|||
mgnr := g_gtk_call_handler_manager;
|
||||
return mgnr.del(fn);
|
||||
end
|
||||
procedure tsl_gtk_keymp_state(kmp:pointer;d:pointer);
|
||||
begin
|
||||
global g_gtk_keytable;
|
||||
g_gtk_keytable := array(0x10:0,0x11:0,0x12:0);
|
||||
state := keymap_get_modifier_state(kmp);
|
||||
if state>0 then
|
||||
begin
|
||||
if (state .& 1) = 1 then
|
||||
begin
|
||||
g_gtk_keytable[0x10] := _shl( 1,15);
|
||||
end else
|
||||
if (state .& 4) = 4 then
|
||||
begin
|
||||
g_gtk_keytable[0x11] := _shl( 1,15);
|
||||
end else
|
||||
if (state .& 8) = 8 then
|
||||
begin
|
||||
g_gtk_keytable[0x12] := _shl( 1,15);
|
||||
end
|
||||
end
|
||||
end
|
||||
function tsl_gtk_idle(dlg:pointer):integer;
|
||||
begin
|
||||
return _gtkidledo_(dlg);
|
||||
|
|
@ -9361,7 +9517,7 @@ end
|
|||
function tsl_gtk_activate_default_event_cb(a:pointer;b:pointer):integer;
|
||||
begin
|
||||
//return _gtkeventcall_(a,c,b);
|
||||
return dodeleteevents(a, "activate-default");
|
||||
return do_two_param_event(a, "activate-default");
|
||||
//activate-default;
|
||||
end
|
||||
function tsl_gtk_preedit_changed_event(a:pointer;b:pointer;c:pointer):integer;
|
||||
|
|
@ -9370,27 +9526,27 @@ begin
|
|||
end
|
||||
function tsl_gtk_changed_event(a:pointer;b:pointer):integer;
|
||||
begin
|
||||
return dodeleteevents(a, "changed");
|
||||
return do_two_param_event(a, "changed");
|
||||
end
|
||||
function tsl_gtk_day_select_event(a:pointer;b:pointer):integer;
|
||||
begin
|
||||
return dodeleteevents(a, "day-selected");
|
||||
return do_two_param_event(a, "day-selected");
|
||||
end
|
||||
function tsl_gtk_delete_event(a:pointer;b:pointer):integer;
|
||||
begin
|
||||
return dodeleteevents(a, "delete-event");
|
||||
return do_two_param_event(a, "delete-event");
|
||||
end
|
||||
function tsl_gtk_adj_value_changed_event(a:pointer;b:pointer):integer;
|
||||
begin
|
||||
return dodeleteevents(a, "value-changed");
|
||||
return do_two_param_event(a, "value-changed");
|
||||
end
|
||||
function tsl_gtk_clicked_event(a:pointer;b:pointer):integer;
|
||||
begin
|
||||
return dodeleteevents(a, "clicked");
|
||||
return do_two_param_event(a, "clicked");
|
||||
end
|
||||
function tsl_gtk_activate_event(a:pointer;b:pointer):integer;
|
||||
begin
|
||||
return dodeleteevents(a, "activate");
|
||||
return do_two_param_event(a, "activate");
|
||||
end
|
||||
|
||||
function tsl_gtk_destroy_event(a:pointer; b:pointer;c:pointer):integer;
|
||||
|
|
@ -9401,7 +9557,7 @@ function tsl_gtk_wmuser_event(a:pointer; p1:pointer;p2:pointer):integer;
|
|||
begin
|
||||
return dotparamseevents(a, "wm-user", p1, p2);
|
||||
end
|
||||
function dodeleteevents( a:pointer;b:string):integer;
|
||||
function do_two_param_event( a:pointer;b:string):integer;
|
||||
begin
|
||||
return _gtkeventcall_(a,GetGtkEventNameOrId(b),0);
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue