parent
7146bd0fe6
commit
5d69525909
|
|
@ -1263,6 +1263,12 @@ type TWinControl = class(tcontrol)
|
||||||
//rc := ps._getvalue_("rcpaint");
|
//rc := ps._getvalue_("rcpaint");
|
||||||
img := _wapi.cairo_image_surface_create(1,cr[2]-cr[0]+100,cr[3]-cr[1]+100);
|
img := _wapi.cairo_image_surface_create(1,cr[2]-cr[0]+100,cr[3]-cr[1]+100);
|
||||||
memdc := _wapi.cairo_create(img);
|
memdc := _wapi.cairo_create(img);
|
||||||
|
|
||||||
|
rcpaint := ps.rcpaint;
|
||||||
|
_wapi.gtk_object_set_data(memdc,nil);
|
||||||
|
_wapi.cairo_reset_clip(memdc);
|
||||||
|
rng := _wapi.CreateRectRgn(rcpaint[0],rcpaint[1],rcpaint[2],rcpaint[3]);
|
||||||
|
_wapi.SelectClipRgn(memdc,rng);
|
||||||
{$endif}
|
{$endif}
|
||||||
e.wparam := memdc;
|
e.wparam := memdc;
|
||||||
if Color then
|
if Color then
|
||||||
|
|
@ -1272,9 +1278,11 @@ type TWinControl = class(tcontrol)
|
||||||
Dispatch(o,e);
|
Dispatch(o,e);
|
||||||
e.wparam := 0;
|
e.wparam := 0;
|
||||||
rc := ps.rcpaint;
|
rc := ps.rcpaint;
|
||||||
|
|
||||||
{$ifdef gdipaint}
|
{$ifdef gdipaint}
|
||||||
_wapi.BitBlt(dc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1],memdc,rc[0],rc[1],SRCCOPY); //_wapi.BitBlt(dc,c[0],c[1],c[2],c[3],memdc,0,0,SRCCOPY);
|
_wapi.BitBlt(dc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1],memdc,rc[0],rc[1],SRCCOPY); //_wapi.BitBlt(dc,c[0],c[1],c[2],c[3],memdc,0,0,SRCCOPY);
|
||||||
{$else}
|
{$else}
|
||||||
|
_wapi.SelectClipRgn(memdc,0);
|
||||||
_wapi.cairo_set_source_surface(dc, img, 0, 0);
|
_wapi.cairo_set_source_surface(dc, img, 0, 0);
|
||||||
_wapi.cairo_rectangle(dc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1]);
|
_wapi.cairo_rectangle(dc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1]);
|
||||||
_wapi.cairo_clip(dc);
|
_wapi.cairo_clip(dc);
|
||||||
|
|
@ -1417,8 +1425,8 @@ type TWinControl = class(tcontrol)
|
||||||
c := array(0,0); //设置基准点,为00 20201112 修改
|
c := array(0,0); //设置基准点,为00 20201112 修改
|
||||||
rcpaint := PaintStruct().rcpaint;
|
rcpaint := PaintStruct().rcpaint;
|
||||||
if sum(rcpaint)<4 then exit;
|
if sum(rcpaint)<4 then exit;
|
||||||
rgC := _wapi.CreateRectRgn(0,0,10,10);
|
//rgC := _wapi.CreateRectRgn(0,0,10,10);
|
||||||
rga := _wapi.CreateRectRgn(rcpaint[0],rcpaint[1],rcpaint[2],rcpaint[3]);
|
//rga := _wapi.CreateRectRgn(rcpaint[0],rcpaint[1],rcpaint[2],rcpaint[3]);
|
||||||
try
|
try
|
||||||
for i := 0 to ControlCount-1 do
|
for i := 0 to ControlCount-1 do
|
||||||
begin
|
begin
|
||||||
|
|
@ -1433,8 +1441,9 @@ type TWinControl = class(tcontrol)
|
||||||
end
|
end
|
||||||
//rgb := _wapi.CreateRectRgn(itbounds[0],itbounds[1],itbounds[2],itbounds[3]); //控件区域
|
//rgb := _wapi.CreateRectRgn(itbounds[0],itbounds[1],itbounds[2],itbounds[3]); //控件区域
|
||||||
rgb := _wapi.CreateRectRgn(outrect[0],outrect[1],outrect[2],outrect[3]); //控件区域
|
rgb := _wapi.CreateRectRgn(outrect[0],outrect[1],outrect[2],outrect[3]); //控件区域
|
||||||
_wapi.CombineRgn(rgC,rga,rgb,RGN_AND); //控件绘画区域
|
//_wapi.CombineRgn(rgC,rga,rgb,RGN_AND); //控件绘画区域
|
||||||
bkrg := _wapi.SelectClipRgn(TheMessage.wparam,rgc); //裁剪区域
|
//bkrg := _wapi.SelectClipRgn(TheMessage.wparam,rgc); //裁剪区域
|
||||||
|
bkrg := _wapi.SelectClipRgn(TheMessage.wparam,rgb); //裁剪区域
|
||||||
try
|
try
|
||||||
pts := it.PaintStruct();
|
pts := it.PaintStruct();
|
||||||
pts._setvalue_("rcpaint",array(outrect[0]-itbounds[0],outrect[1]-itbounds[1],outrect[2]-itbounds[0],outrect[3]-itbounds[1]));
|
pts._setvalue_("rcpaint",array(outrect[0]-itbounds[0],outrect[1]-itbounds[1],outrect[2]-itbounds[0],outrect[3]-itbounds[1]));
|
||||||
|
|
@ -1449,8 +1458,8 @@ type TWinControl = class(tcontrol)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
finally
|
finally
|
||||||
_wapi.DeleteObject(rga);
|
//_wapi.DeleteObject(rga);
|
||||||
_wapi.DeleteObject(rgc);
|
//_wapi.DeleteObject(rgc);
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
procedure PaintWindow(DC:HDC);virtual;
|
procedure PaintWindow(DC:HDC);virtual;
|
||||||
|
|
|
||||||
|
|
@ -741,17 +741,24 @@ type tsgtkapi = class(tgtkapis)
|
||||||
InvalidateRect(hwnd,0,f);
|
InvalidateRect(hwnd,0,f);
|
||||||
end
|
end
|
||||||
//////////////////////////////gdi///////////////////////////////////////////
|
//////////////////////////////gdi///////////////////////////////////////////
|
||||||
|
function cairo_clear_clip(hdc,rc);
|
||||||
|
begin
|
||||||
|
cairo_reset_clip(hdc);
|
||||||
|
cairo_rectangle(hdc,rc[0],rc[1],rc[2]-rc[0],rc[3]-rc[1]);
|
||||||
|
cairo_clip(hdc);
|
||||||
|
end
|
||||||
function SelectObject(hdc :pointer;gdiobj:pointer);
|
function SelectObject(hdc :pointer;gdiobj:pointer);
|
||||||
begin
|
begin
|
||||||
//
|
//
|
||||||
if not hdc then return 0;
|
if not hdc then return 0;
|
||||||
if not(gdiobj>0 or gdiobj<0) then return 0;
|
if not(gdiobj>0 or gdiobj<0) then return 0;
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
if not ifarray(gtk_gdi_object_globals) then return 0;
|
gdiindex := inttostr(gdiobj);
|
||||||
obj := gtk_gdi_object_globals[inttostr(gdiobj)];
|
obj := gtk_gdi_object_globals[gdiindex];
|
||||||
if not obj then return 0;
|
if not obj then return 0;
|
||||||
t := obj[1];
|
t := obj[1];
|
||||||
o := obj[0];
|
o := obj[0];
|
||||||
|
//gtk_gdi_object_globals[gdiindex,"hdc"] := hdc;
|
||||||
case obj[1] of
|
case obj[1] of
|
||||||
"pen":
|
"pen":
|
||||||
begin
|
begin
|
||||||
|
|
@ -774,10 +781,24 @@ type tsgtkapi = class(tgtkapis)
|
||||||
end
|
end
|
||||||
"rgn":
|
"rgn":
|
||||||
begin
|
begin
|
||||||
|
x := gtk_object_get_data(dc,"viewport.x");
|
||||||
|
y := gtk_object_get_data(dc,"viewport.y");
|
||||||
r := gtk_object_get_data(hdc,"rgn");
|
r := gtk_object_get_data(hdc,"rgn");
|
||||||
gtk_object_set_data(hdc,"rgn",gdiobj);
|
gtk_object_set_data(hdc,"rgn",gdiobj);
|
||||||
|
rc := (new TCRect(gdiobj))._getdata_();
|
||||||
|
rc[0]+=x;
|
||||||
|
rc[2]+=x;
|
||||||
|
rc[1]+=y;
|
||||||
|
rc[3]+=y;
|
||||||
|
gtk_object_set_data(hdc,"rgn-rec",rc);
|
||||||
|
cairo_clear_clip(hdc,rc);
|
||||||
|
|
||||||
end
|
end
|
||||||
end ;
|
end ;
|
||||||
|
if r then
|
||||||
|
begin
|
||||||
|
//if ifarray(gtk_gdi_object_globals[inttostr(r)]) then gtk_gdi_object_globals[inttostr(r),"hdc"] := nil;
|
||||||
|
end
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
function textoutexa(hdc :pointer;X:integer;y:integer;txt:string;len:integer):integer;
|
function textoutexa(hdc :pointer;X:integer;y:integer;txt:string;len:integer):integer;
|
||||||
|
|
@ -787,7 +808,6 @@ type tsgtkapi = class(tgtkapis)
|
||||||
// cairo_set_source_rgb(hdc, r, g, b);
|
// cairo_set_source_rgb(hdc, r, g, b);
|
||||||
xb := gtk_object_get_data(hdc,"viewport.x");
|
xb := gtk_object_get_data(hdc,"viewport.x");
|
||||||
yb := gtk_object_get_data(hdc,"viewport.y");
|
yb := gtk_object_get_data(hdc,"viewport.y");
|
||||||
make_sure_rgn(hdc,xb,yb);
|
|
||||||
ft := gtk_object_get_data(hdc,"font");
|
ft := gtk_object_get_data(hdc,"font");
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
if ft and ifarray(gtk_gdi_object_globals) then
|
if ft and ifarray(gtk_gdi_object_globals) then
|
||||||
|
|
@ -1038,17 +1058,17 @@ type tsgtkapi = class(tgtkapis)
|
||||||
begin
|
begin
|
||||||
sy := rec[3]-3-ht;
|
sy := rec[3]-3-ht;
|
||||||
end
|
end
|
||||||
bk := gtk_object_get_data(hdc,"rgn-rec");
|
rgnrec := gtk_object_get_data(hdc,"rgn-rec");
|
||||||
gtk_object_set_data(hdc,"rgn-rec",rec);
|
if rgnrec then
|
||||||
r := TextOutexA(hdc,sx,sy,txt,slen);
|
|
||||||
if ifarray(bk) then
|
|
||||||
begin
|
begin
|
||||||
|
x := gtk_object_get_data(hdc,"viewport.x");
|
||||||
end else
|
y := gtk_object_get_data(hdc,"viewport.y");
|
||||||
begin
|
reci := array(rec[0]+x,rec[1]+y,rec[2]+x,rec[3]+y);
|
||||||
cairo_reset_clip(hdc);
|
if not intersectrect(rgnrec,reci,reco) then return 0;
|
||||||
|
cairo_clear_clip(hdc,reco);
|
||||||
end
|
end
|
||||||
gtk_object_set_data(hdc,"rgn-rec",bk);
|
r := TextOutexA(hdc,sx,sy,txt,slen);
|
||||||
|
if rgnrec then cairo_clear_clip(hdc,rgnrec);
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
Function SetTextColor(hdc :pointer;col:integer):integer;
|
Function SetTextColor(hdc :pointer;col:integer):integer;
|
||||||
|
|
@ -1086,7 +1106,6 @@ type tsgtkapi = class(tgtkapis)
|
||||||
cl := brs[0].Color;
|
cl := brs[0].Color;
|
||||||
x := gtk_object_get_data(dc,"viewport.x");
|
x := gtk_object_get_data(dc,"viewport.x");
|
||||||
y := gtk_object_get_data(dc,"viewport.y");
|
y := gtk_object_get_data(dc,"viewport.y");
|
||||||
make_sure_rgn(hdc,x,y);
|
|
||||||
cairo_rectangle(dc, x+rec[0], y+rec[1], rec[2]-rec[0], rec[3]-rec[1]);
|
cairo_rectangle(dc, x+rec[0], y+rec[1], rec[2]-rec[0], rec[3]-rec[1]);
|
||||||
gtk_rgb_color_rgb(cl,r,g,b);
|
gtk_rgb_color_rgb(cl,r,g,b);
|
||||||
cairo_set_source_rgb(dc,r,g,b);
|
cairo_set_source_rgb(dc,r,g,b);
|
||||||
|
|
@ -1105,22 +1124,12 @@ type tsgtkapi = class(tgtkapis)
|
||||||
cl := brs[0].Color;
|
cl := brs[0].Color;
|
||||||
x := gtk_object_get_data(dc,"viewport.x");
|
x := gtk_object_get_data(dc,"viewport.x");
|
||||||
y := gtk_object_get_data(dc,"viewport.y");
|
y := gtk_object_get_data(dc,"viewport.y");
|
||||||
make_sure_rgn(hdc,x,y);
|
|
||||||
cairo_rectangle(dc, x+rec[0], y+rec[1], rec[2]-rec[0], rec[3]-rec[1]);
|
cairo_rectangle(dc, x+rec[0], y+rec[1], rec[2]-rec[0], rec[3]-rec[1]);
|
||||||
gtk_rgb_color_rgb(cl,r,g,b);
|
gtk_rgb_color_rgb(cl,r,g,b);
|
||||||
cairo_set_source_rgb(dc,1-r,1-g,1-b);
|
cairo_set_source_rgb(dc,1-r,1-g,1-b);
|
||||||
cairo_fill(dc);
|
cairo_fill(dc);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function make_sure_rgn(hdc,x,y);
|
|
||||||
begin
|
|
||||||
rc := gtk_object_get_data(hdc,"rgn-rec");
|
|
||||||
if rc then
|
|
||||||
begin
|
|
||||||
cairo_rectangle(hdc,rc[0]+x,rc[1]+y,rc[2]-rc[0],rc[3]-rc[1]);
|
|
||||||
cairo_clip(hdc);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function ReleaseDC(hwd :pointer;hdc:pointer):integer;
|
function ReleaseDC(hwd :pointer;hdc:pointer):integer;
|
||||||
begin
|
begin
|
||||||
DeleteDC(hdc);
|
DeleteDC(hdc);
|
||||||
|
|
@ -1134,42 +1143,11 @@ type tsgtkapi = class(tgtkapis)
|
||||||
gtk_object_set_data(hdc,"rgn-rec",nil);
|
gtk_object_set_data(hdc,"rgn-rec",nil);
|
||||||
cairo_reset_clip(hdc);
|
cairo_reset_clip(hdc);
|
||||||
end
|
end
|
||||||
else
|
|
||||||
begin
|
|
||||||
rr := gtk_object_get_data(hdc,"rgn");
|
|
||||||
if rr = gdiobj then return ;
|
|
||||||
p := new TCRect(gdiobj);
|
|
||||||
rc := p._getdata_();
|
|
||||||
gtk_object_set_data(hdc,"rgn-rec",rc);
|
|
||||||
end
|
|
||||||
return r;
|
|
||||||
|
|
||||||
return r;
|
|
||||||
r := SelectObject(hdc,gdiobj);
|
|
||||||
if not(gdiobj) then
|
|
||||||
begin
|
|
||||||
gtk_object_set_data(hdc,"rgn",nil);
|
|
||||||
cairo_reset_clip(hdc);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
rr := gtk_object_get_data(hdc,"rgn");
|
|
||||||
if rr = gdiobj then return ;
|
|
||||||
p := new TCRect(gdiobj);
|
|
||||||
rc := p._getdata_();
|
|
||||||
cairo_reset_clip(hdc);
|
|
||||||
x := gtk_object_get_data(dc,"viewport.x"); //¿ØÖÆ»ù׼λÖÃ
|
|
||||||
y := gtk_object_get_data(dc,"viewport.y");
|
|
||||||
cairo_rectangle(hdc,rc[0]+x,rc[1]+y,rc[2]-rc[0],rc[3]-rc[1]);
|
|
||||||
cairo_clip(hdc);
|
|
||||||
//gtk_object_set_data(hdc,"rgn",gdiobj);
|
|
||||||
end
|
|
||||||
return r;
|
return r;
|
||||||
end
|
end
|
||||||
function CreateRectRgn(nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer):pointer;
|
function CreateRectRgn(nLeftRect:integer;nTopRect:integer;nRightRect:integer;nBottomRect:integer):pointer;
|
||||||
begin
|
begin
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
if not ifarray(gtk_gdi_object_globals) then gtk_gdi_object_globals := array();
|
|
||||||
p := new TCRect();
|
p := new TCRect();
|
||||||
p.left := nLeftRect;
|
p.left := nLeftRect;
|
||||||
p.top := nTopRect;
|
p.top := nTopRect;
|
||||||
|
|
@ -1213,10 +1191,11 @@ type tsgtkapi = class(tgtkapis)
|
||||||
function DeleteObject(gdiobj :pointer);//ɾ³ýgdi¶ÔÏó
|
function DeleteObject(gdiobj :pointer);//ɾ³ýgdi¶ÔÏó
|
||||||
begin
|
begin
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
if not ifarray(gtk_gdi_object_globals) then return 0;
|
gdiindex := inttostr( gdiobj);
|
||||||
r := gtk_gdi_object_globals[inttostr( gdiobj)];
|
r := gtk_gdi_object_globals[gdiindex];
|
||||||
if r then
|
if r then
|
||||||
begin
|
begin
|
||||||
|
//if ifarray(gtk_gdi_object_globals[inttostr(r)]) then gtk_gdi_object_globals[inttostr(r),"hdc"] := nil;
|
||||||
reindex(gtk_gdi_object_globals,array(inttostr(gdiobj):nil));
|
reindex(gtk_gdi_object_globals,array(inttostr(gdiobj):nil));
|
||||||
return true;
|
return true;
|
||||||
end
|
end
|
||||||
|
|
@ -1242,7 +1221,6 @@ type tsgtkapi = class(tgtkapis)
|
||||||
function CreatePen(FS,w,FC); //gtk Ä£Äâ pen
|
function CreatePen(FS,w,FC); //gtk Ä£Äâ pen
|
||||||
begin
|
begin
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
if not ifarray(gtk_gdi_object_globals) then gtk_gdi_object_globals := array();
|
|
||||||
p := new ttgtk_pen();
|
p := new ttgtk_pen();
|
||||||
p.width := w;
|
p.width := w;
|
||||||
p.color := FC;
|
p.color := FC;
|
||||||
|
|
@ -1255,7 +1233,6 @@ type tsgtkapi = class(tgtkapis)
|
||||||
function CreateSolidBrush(crColor:integer);
|
function CreateSolidBrush(crColor:integer);
|
||||||
begin
|
begin
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
if not ifarray(gtk_gdi_object_globals) then gtk_gdi_object_globals := array();
|
|
||||||
p := new ttgtk_brush();
|
p := new ttgtk_brush();
|
||||||
p.color := crColor;
|
p.color := crColor;
|
||||||
ptr := p._getptr_();
|
ptr := p._getptr_();
|
||||||
|
|
@ -1264,9 +1241,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
end
|
end
|
||||||
function CreateFontIndirectA(lplf:pointer);
|
function CreateFontIndirectA(lplf:pointer);
|
||||||
begin
|
begin
|
||||||
|
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
if not ifarray(gtk_gdi_object_globals) then gtk_gdi_object_globals := array();
|
|
||||||
p := new ttgtk_font();
|
p := new ttgtk_font();
|
||||||
p2 := new ttgtk_font(lplf);
|
p2 := new ttgtk_font(lplf);
|
||||||
for i,v in array("height","width","escapement","orientation","weight","italic","underline","strikeout","charset","outprecision","clipprecision","quality","pitchandfamily","facename") do
|
for i,v in array("height","width","escapement","orientation","weight","italic","underline","strikeout","charset","outprecision","clipprecision","quality","pitchandfamily","facename") do
|
||||||
|
|
@ -1308,8 +1283,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
gtk_rgb_color_rgb(pc,rc,gc,bc);
|
gtk_rgb_color_rgb(pc,rc,gc,bc);
|
||||||
cairo_set_source_rgb(dc,rc,gc,bc);
|
cairo_set_source_rgb(dc,rc,gc,bc);
|
||||||
end
|
end
|
||||||
cairo_applay_pen_style(dc);
|
cairo_applay_pen_style(dc); //LineTo
|
||||||
make_sure_rgn(hdc,xb,yb);
|
|
||||||
xy := gtk_object_get_data(dc,"movepointto");
|
xy := gtk_object_get_data(dc,"movepointto");
|
||||||
if xy then
|
if xy then
|
||||||
begin
|
begin
|
||||||
|
|
@ -1508,7 +1482,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
global gtk_gdi_object_globals;
|
global gtk_gdi_object_globals;
|
||||||
wd := 8;
|
wd := 8;
|
||||||
ht := 16;
|
ht := 16;
|
||||||
if ft and ifarray(gtk_gdi_object_globals) then
|
if ft then
|
||||||
begin
|
begin
|
||||||
fto := gtk_gdi_object_globals[inttostr(ft)];
|
fto := gtk_gdi_object_globals[inttostr(ft)];
|
||||||
if fto then fto := fto[0];
|
if fto then fto := fto[0];
|
||||||
|
|
@ -2543,6 +2517,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
global g_gtk_ttimer_cache;
|
global g_gtk_ttimer_cache;
|
||||||
if not ifarray(g_gtk_ttimer_cache) then return 0;
|
if not ifarray(g_gtk_ttimer_cache) then return 0;
|
||||||
obj := g_gtk_ttimer_cache[nIDEvent] ;
|
obj := g_gtk_ttimer_cache[nIDEvent] ;
|
||||||
|
if not obj then return 0;
|
||||||
g_source_remove(obj._getvalue_(0));
|
g_source_remove(obj._getvalue_(0));
|
||||||
reindex(g_gtk_ttimer_cache,array(nIDEvent:nil));
|
reindex(g_gtk_ttimer_cache,array(nIDEvent:nil));
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -3011,6 +2986,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
SetActiveWindow(hwd);
|
SetActiveWindow(hwd);
|
||||||
end
|
end
|
||||||
//socket
|
//socket
|
||||||
|
{
|
||||||
function socket(af:integer;tp:integer;protocol:integer):pointer;begin end
|
function socket(af:integer;tp:integer;protocol:integer):pointer;begin end
|
||||||
function WSAStartup(af:SHORT;DA:pointer):integer;begin end
|
function WSAStartup(af:SHORT;DA:pointer):integer;begin end
|
||||||
function WSACleanup():integer;begin end
|
function WSACleanup():integer;begin end
|
||||||
|
|
@ -3032,6 +3008,7 @@ type tsgtkapi = class(tgtkapis)
|
||||||
function ioctlsocket(s:pointer;cmd:integer;var argp:integer):integer;begin end
|
function ioctlsocket(s:pointer;cmd:integer;var argp:integer):integer;begin end
|
||||||
function setsockopt(s:pointer;level:integer;optname:integer;optval:string;optlen:integer):integer;begin end
|
function setsockopt(s:pointer;level:integer;optname:integer;optval:string;optlen:integer):integer;begin end
|
||||||
function getsockopt(s:pointer;level:integer;optname:integer;var optval:string;var optlen:integer):integer;begin end
|
function getsockopt(s:pointer;level:integer;optname:integer;var optval:string;var optlen:integer):integer;begin end
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -4009,6 +3986,11 @@ type tgtkapis = class() //gtk
|
||||||
_f_ := static function(kmp:pointer):integer;cdecl;external getfuncptrbyname(0,functionname());
|
_f_ := static function(kmp:pointer):integer;cdecl;external getfuncptrbyname(0,functionname());
|
||||||
return ##_f_(kmp);
|
return ##_f_(kmp);
|
||||||
end
|
end
|
||||||
|
function gdk_keymap_get_caps_lock_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;
|
function gdk_screen_get_default():pointer;
|
||||||
begin
|
begin
|
||||||
|
|
@ -4669,9 +4651,9 @@ type tgtkapis = class() //gtk
|
||||||
_f_ := static procedure(c:pointer;var x1:double;var y1:double;var x2:double;var y2:double);cdecl;external getfuncptrbyname(0,functionname());
|
_f_ := static procedure(c:pointer;var x1:double;var y1:double;var x2:double;var y2:double);cdecl;external getfuncptrbyname(0,functionname());
|
||||||
return ##_f_(c,x1,y1,x2,y2);
|
return ##_f_(c,x1,y1,x2,y2);
|
||||||
end
|
end
|
||||||
function cairo_in_clip(c:pointer;x:double;y:double);
|
function cairo_in_clip(c:pointer;x:double;y:double):integer;
|
||||||
begin
|
begin
|
||||||
_f_ := static function(c:pointer;x:double;y:double);cdecl;external getfuncptrbyname(0,functionname());
|
_f_ := static function(c:pointer;x:double;y:double):integer;cdecl;external getfuncptrbyname(0,functionname());
|
||||||
return ##_f_(c,x,y);
|
return ##_f_(c,x,y);
|
||||||
end
|
end
|
||||||
procedure cairo_reset_clip(c:pointer);
|
procedure cairo_reset_clip(c:pointer);
|
||||||
|
|
@ -4845,9 +4827,17 @@ type tgtkapis = class() //gtk
|
||||||
_f_ := static procedure(c:pointer;offset:double;r:double;g:double;b:double;a:double);cdecl;external getfuncptrbyname(0,functionname());
|
_f_ := static procedure(c:pointer;offset:double;r:double;g:double;b:double;a:double);cdecl;external getfuncptrbyname(0,functionname());
|
||||||
return ##_f_(c,offset,r,g,b,a);
|
return ##_f_(c,offset,r,g,b,a);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////window//////////
|
/////////////////////////window//////////
|
||||||
|
procedure gtk_window_set_keep_above(w:pointer;f:integer);
|
||||||
|
begin
|
||||||
|
_f_ := static procedure(w:pointer;f:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||||
|
return ##_f_(w,f);
|
||||||
|
end
|
||||||
|
procedure gtk_window_set_keep_below(w:pointer;f:integer);
|
||||||
|
begin
|
||||||
|
_f_ := static procedure(w:pointer;f:integer);cdecl;external getfuncptrbyname(0,functionname());
|
||||||
|
return ##_f_(w,f);
|
||||||
|
end
|
||||||
function gtk_window_list_toplevels():pointer;
|
function gtk_window_list_toplevels():pointer;
|
||||||
begin
|
begin
|
||||||
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,functionname());
|
_f_ := static function():pointer;cdecl;external getfuncptrbyname(0,functionname());
|
||||||
|
|
@ -8124,6 +8114,7 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
||||||
//cr := _wapi.gdk_cairo_create(_wapi.gtk_widget_get_window(hd));
|
//cr := _wapi.gdk_cairo_create(_wapi.gtk_widget_get_window(hd));
|
||||||
cr :=c;//rec := r;
|
cr :=c;//rec := r;
|
||||||
rec := zeros(4); _wapi.gdk_cairo_get_clip_rectangle(cr,rec);
|
rec := zeros(4); _wapi.gdk_cairo_get_clip_rectangle(cr,rec);
|
||||||
|
_Wapi.g_object_get_data(cr,nil);
|
||||||
//_wapi.cairo_clip_extents(cr,x,y,w,h);
|
//_wapi.cairo_clip_extents(cr,x,y,w,h);
|
||||||
hwd := handle;
|
hwd := handle;
|
||||||
_wapi.g_object_set_data(hwd,"paint_dc",cr);
|
_wapi.g_object_set_data(hwd,"paint_dc",cr);
|
||||||
|
|
@ -8452,7 +8443,7 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
||||||
private
|
private
|
||||||
ftarget ;
|
ftarget ;
|
||||||
fscrollinfos;
|
fscrollinfos;
|
||||||
ftimerobj;
|
ftimerobj;ftimerfptr;
|
||||||
Fscrolltimedo;
|
Fscrolltimedo;
|
||||||
FStatscrollTime;
|
FStatscrollTime;
|
||||||
public
|
public
|
||||||
|
|
@ -8498,7 +8489,21 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
||||||
dr := ed.direction;
|
dr := ed.direction;
|
||||||
if dr<>0 and dr<>1 then return ;
|
if dr<>0 and dr<>1 then return ;
|
||||||
x := ed.x;//ed.x_root;
|
x := ed.x;//ed.x_root;
|
||||||
y := ed.y;//ed.y_root;
|
y := ed.y;//ed.y_root;-_wapi.gtk_object_get_data_title_height(h);
|
||||||
|
//////////////λÖô¦Àí////////////////////////////////////////////////////////
|
||||||
|
mb := _wapi.g_object_get_data(h,"menubar");
|
||||||
|
if mb and _wapi.gtk_widget_is_visible(mb) then
|
||||||
|
begin
|
||||||
|
rec := zeros(4);
|
||||||
|
_wapi.gtk_widget_get_allocation(mb,rec);
|
||||||
|
y-=rec[3];
|
||||||
|
end
|
||||||
|
if _wapi.gdk_backend_is_wayland() then
|
||||||
|
begin
|
||||||
|
global g_gtk_shadow_width,g_gtk_shadow_heigt;
|
||||||
|
y-=integer(g_gtk_shadow_heigt/2);//_wapi.gtk_object_get_data_title_height(h);
|
||||||
|
end
|
||||||
|
////////////////////////////////////////////////////////
|
||||||
r := array();
|
r := array();
|
||||||
_wapi.GetTopWidgetList(h,x,y,r);
|
_wapi.GetTopWidgetList(h,x,y,r);
|
||||||
lenr := length(r)-1;
|
lenr := length(r)-1;
|
||||||
|
|
@ -8523,7 +8528,8 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
||||||
if not ftimerobj then
|
if not ftimerobj then
|
||||||
begin
|
begin
|
||||||
fscrollinfos := array();
|
fscrollinfos := array();
|
||||||
Fscrolltimedo := makeinstance(thisfunction(scrolltimedo));
|
ftimerfptr := makeinstance(weakref_get(thisfunction(scrolltimedo)));
|
||||||
|
Fscrolltimedo := ftimerfptr;
|
||||||
ftimerobj := new ttmstruct(nil);
|
ftimerobj := new ttmstruct(nil);
|
||||||
rt := _wapi.g_timeout_add(8,Fscrolltimedo,ftimerobj._getptr_() );
|
rt := _wapi.g_timeout_add(8,Fscrolltimedo,ftimerobj._getptr_() );
|
||||||
ftimerobj._setvalue_(0,rt);
|
ftimerobj._setvalue_(0,rt);
|
||||||
|
|
@ -8541,6 +8547,14 @@ type tgtk_ctl_scroll_window = class(tgtk_ctl_object)
|
||||||
function Destroy();override;
|
function Destroy();override;
|
||||||
begin
|
begin
|
||||||
inherited;
|
inherited;
|
||||||
|
if ftimerobj then
|
||||||
|
begin
|
||||||
|
_wapi.g_source_remove(ftimerobj._getvalue_(0));
|
||||||
|
deleteinstance(ftimerfptr);
|
||||||
|
ftimerfptr := 0;
|
||||||
|
ftimerobj := nil;
|
||||||
|
end
|
||||||
|
|
||||||
get_instance_u(thisfunction(do_motion));
|
get_instance_u(thisfunction(do_motion));
|
||||||
get_instance_u(thisfunction(do_received));
|
get_instance_u(thisfunction(do_received));
|
||||||
get_instance_u(thisfunction(do_drop));
|
get_instance_u(thisfunction(do_drop));
|
||||||
|
|
@ -8677,7 +8691,7 @@ type tgtk_ctl_window_PoPup = class(tgtk_ctl_scroll_window)
|
||||||
eheight := cf.height;
|
eheight := cf.height;
|
||||||
dw := abs(AWidth-ewidth);
|
dw := abs(AWidth-ewidth);
|
||||||
dh := abs(AHeight-eheight);
|
dh := abs(AHeight-eheight);
|
||||||
if dw>10 and dh>10 then
|
if dw>10 and dh>10 and dw<200 and dh<200 then
|
||||||
begin
|
begin
|
||||||
g_gtk_shadow_width := dw;
|
g_gtk_shadow_width := dw;
|
||||||
g_gtk_shadow_heigt := dh;
|
g_gtk_shadow_heigt := dh;
|
||||||
|
|
@ -9613,8 +9627,9 @@ begin
|
||||||
global g_w_i_datas,g_w_c_width, g_gtk_buttontable,g_gtk_keytable,
|
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_dragxy,
|
g_gtk_call_handler_manager,g_gtk_font_get_size,g_gtk_dragxy,
|
||||||
g_gtk_shadow_width,g_gtk_shadow_heigt,g_gtk_shadow_size_nset,
|
g_gtk_shadow_width,g_gtk_shadow_heigt,g_gtk_shadow_size_nset,
|
||||||
G_E_ID_Name_1,G_E_ID_Name_2,g_Caret_Blink_Time,g_ansi_unit_cache;
|
G_E_ID_Name_1,G_E_ID_Name_2,g_Caret_Blink_Time,g_ansi_unit_cache,gtk_gdi_object_globals;
|
||||||
g_ansi_unit_cache := array();
|
g_ansi_unit_cache := array();
|
||||||
|
gtk_gdi_object_globals := array();
|
||||||
G_E_ID_Name_2 := array();
|
G_E_ID_Name_2 := array();
|
||||||
G_E_ID_Name_1 := array(
|
G_E_ID_Name_1 := array(
|
||||||
"wm-user":10,
|
"wm-user":10,
|
||||||
|
|
|
||||||
|
|
@ -1067,7 +1067,6 @@ type TcustomInPutQuerys= class(tcustomscrollcontrol)
|
||||||
static SFInputType;
|
static SFInputType;
|
||||||
static SHashInited;
|
static SHashInited;
|
||||||
end
|
end
|
||||||
implementation
|
|
||||||
type TInputEditor=class()
|
type TInputEditor=class()
|
||||||
{**
|
{**
|
||||||
@ignore(ºöÂÔ) %%
|
@ignore(ºöÂÔ) %%
|
||||||
|
|
@ -1121,6 +1120,7 @@ type TInputEditor=class()
|
||||||
end
|
end
|
||||||
FNextCtrl;
|
FNextCtrl;
|
||||||
end
|
end
|
||||||
|
implementation
|
||||||
type tinputbool=class(tcustomcheckbtn,TInputEditor)
|
type tinputbool=class(tcustomcheckbtn,TInputEditor)
|
||||||
{**
|
{**
|
||||||
@explan(˵Ã÷) ÊäÈë¿ò %%
|
@explan(˵Ã÷) ÊäÈë¿ò %%
|
||||||
|
|
@ -1429,7 +1429,7 @@ begin
|
||||||
global g_dlg_call_back;
|
global g_dlg_call_back;
|
||||||
if not g_dlg_call_back then
|
if not g_dlg_call_back then
|
||||||
begin
|
begin
|
||||||
g_dlg_call_back := makeinstance(thisfunction(folderdlgcall));
|
g_dlg_call_back := makeinstance(weakref_get( thisfunction(folderdlgcall)));
|
||||||
end
|
end
|
||||||
return g_dlg_call_back;
|
return g_dlg_call_back;
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -729,6 +729,12 @@ type tcustompagecontrol = class(TCustomControl)
|
||||||
function acceptsheettype(ty,del);
|
function acceptsheettype(ty,del);
|
||||||
begin
|
begin
|
||||||
idx := 0;
|
idx := 0;
|
||||||
|
if ifstring(ty) and ty then
|
||||||
|
begin
|
||||||
|
ob := findclass(ty);
|
||||||
|
if ob then return acceptsheettype(ob,del);
|
||||||
|
return false;
|
||||||
|
end
|
||||||
if ty is class(tcontrol) then
|
if ty is class(tcontrol) then
|
||||||
begin
|
begin
|
||||||
idx := inttostr(int64(ty));
|
idx := inttostr(int64(ty));
|
||||||
|
|
@ -741,6 +747,7 @@ type tcustompagecontrol = class(TCustomControl)
|
||||||
begin
|
begin
|
||||||
faccepttype[idx] := ty;
|
faccepttype[idx] := ty;
|
||||||
end
|
end
|
||||||
|
return true;
|
||||||
end
|
end
|
||||||
{**
|
{**
|
||||||
@param(cursel)(integer) 当前选中序号 %%
|
@param(cursel)(integer) 当前选中序号 %%
|
||||||
|
|
|
||||||
|
|
@ -6768,6 +6768,64 @@ type tcustomprocess = class(tcomponent) //
|
||||||
ftm.Ontimer := thisfunction(dispatchproc);
|
ftm.Ontimer := thisfunction(dispatchproc);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
function executeblock(exe,cmd); //阻塞执行
|
||||||
|
begin
|
||||||
|
if fprocesshandle then return 0;
|
||||||
|
if fexecstr then
|
||||||
|
begin
|
||||||
|
e := exe;
|
||||||
|
if not(ifstring(e) and e) then return 0;
|
||||||
|
arg := cmd;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
if not parserasexeclevparam(exe,cmd,e,arg,envp) then return 0;
|
||||||
|
end
|
||||||
|
//////////////处理linux启动路径/////////////////////
|
||||||
|
{$ifdef linux}
|
||||||
|
for i := length(e) downto 2 do
|
||||||
|
begin
|
||||||
|
if e[i]="/" then
|
||||||
|
begin
|
||||||
|
ph := e[1:i];
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
envp := array();
|
||||||
|
if ph then
|
||||||
|
begin
|
||||||
|
envp[length(envp)] := "LD_LIBRARY_PATH="+ph;
|
||||||
|
end
|
||||||
|
Sysexecsetenvs(envp,1);
|
||||||
|
{$endif}
|
||||||
|
///////////////////////////处理管道////////////////////////
|
||||||
|
Sysexecnewpipe(0);
|
||||||
|
ferrinfo := nil;
|
||||||
|
sdir :=nil;
|
||||||
|
if ifstring(fStartupDirectory) and fStartupDirectory then
|
||||||
|
begin
|
||||||
|
if fStartupDirectory[length(fStartupDirectory)]=iofileseparator() then
|
||||||
|
begin
|
||||||
|
if filelist("",fStartupDirectory+"*") then
|
||||||
|
begin
|
||||||
|
sdir := fStartupDirectory;
|
||||||
|
end
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
if filelist("",fStartupDirectory) then
|
||||||
|
begin
|
||||||
|
sdir := fStartupDirectory+iofileseparator();
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
hd := sysexec(e,arg,sdir,true,code);
|
||||||
|
if ifarray(code) then
|
||||||
|
begin
|
||||||
|
doprocecho(self(true),code["out"]);
|
||||||
|
ferrinfo:=code["code"];
|
||||||
|
end
|
||||||
|
Sysexecdeletepipe(0);
|
||||||
|
return hd;
|
||||||
|
end
|
||||||
function CreateProcess(exe,cmd,exitWithParent);
|
function CreateProcess(exe,cmd,exitWithParent);
|
||||||
begin
|
begin
|
||||||
{**
|
{**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue