Re-hello.
In previous post, the mail was not well formated, here maybe better:
This are the PMs of Lagprogramming he agreed to share:
First PM:
________________
I've read the mailing list discussion regarding saving rendered form bitmaps
and framebuffers. Maybe the following information is useful to you.
If you need a system function free backend in MSEgui you need to implement the
functions:
gdifuncty = (gdf_creategc,gdf_destroygc,gdf_changegc,gdf_createpixmap,
gdf_pixmaptoimage,gdf_imagetopixmap,
gdf_getcanvasclass,gdf_endpaint,gdf_flush,gdf_movewindowrect,
gdf_drawlines,gdf_drawlinesegments,gdf_drawellipse,gdf_drawarc,
gdf_fillrect,
gdf_fillellipse,gdf_fillarc,gdf_fillpolygon,{gdf_drawstring,}
gdf_drawstring16,
gdf_setcliporigin,
gdf_createemptyregion,gdf_createrectregion,gdf_createrectsregion,
gdf_destroyregion,gdf_copyregion,gdf_moveregion,
gdf_regionisempty,gdf_regionclipbox,
gdf_regsubrect,gdf_regsubregion,
gdf_regaddrect,gdf_regaddregion,gdf_regintersectrect,
gdf_regintersectregion,
gdf_copyarea,gdf_getimage,
gdf_fonthasglyph,
gdf_getfont,gdf_getfonthighres,gdf_freefontdata,
gdf_gettext16width,gdf_getchar16widths,gdf_getfontmetrics
);
LCL's customdrawn initially tried to use the fcl-image package, which is
distributed with FPC.
At the time customdrawn developers started working, the fcl-image package was
far from being complete and it didn't had implemented many routines.
Even today it misses features and has bugs, but it's better than it was at that
time.
In order to get over these limitations of the fcl-image package,
customdrawn developers added functionality to LCL units like lcl/lazregions.pas.
MSEgui might have it's own fcl-image modified implementation, too.
Anyway, in the future, customdrawn developers will have to improve the
fcl-image package, not the LCL units.
In the mentioned example the developers added a new unit for regions, instead
of improving the fcl-image package to support regions.
For sure they had their reasons.
Instead of fcl-image you may try to use bgrabitmap.
I've never used it but maybe it has offscreen 2D rendering.
For sure circular must know if bgrabitmap has better functionality than
fcl-image
and maybe has an idea on how much work is needed to implement in bgrabitmap the
missing routines needed by msegui.
----------------------------
Second PM:
This is what has to be implemented for the GUI-interface
function gui_init: guierrorty;
function gui_deinit: guierrorty;
procedure gui_cancelshutdown;
procedure GUI_DEBUGBEGIN; export;
procedure GUI_DEBUGEND; export;
function gui_registergdi: guierrorty;
function gui_setmainthread: guierrorty;
function gui_sethighrestimer(const avalue: boolean): guierrorty;
function gui_grouphideminimizedwindows: boolean;
function gui_postevent(event: tmseevent): guierrorty;
function gui_settimer(us: longword): guierrorty;
procedure gui_disconnectmaineventqueue();
procedure gui_connectmaineventqueue();
function gui_hasevent: boolean;
function gui_getevent: tmseevent;
function gui_escapepressed: boolean;
procedure gui_resetescapepressed;
function gui_createwindow(const rect: rectty; var options:
internalwindowoptionsty; var awindow: windowty): guierrorty;
function gui_destroywindow(var awindow: windowty): guierrorty;
function gui_getrootwindow(id: winidty = 0): winidty;
function gui_getparentwindow(const awindow: winidty): winidty;
function gui_reparentwindow(const child: winidty; const parent: winidty;
const pos: pointty): guierrorty;
function gui_getchildren(const id: winidty; out children: winidarty):
guierrorty;
function gui_showsysdock(var awindow: windowty): guierrorty;
function gui_hidesysdock(var awindow: windowty): guierrorty;
function gui_docktosyswindow(var child: windowty; const akind:
syswindowty): guierrorty;
function gui_traymessage(var awindow: windowty; const message: msestring;
out messageid: longword; const timeoutms: longword = 0): guierrorty;
function gui_canceltraymessage(var awindow: windowty; const messageid:
longword): guierrorty;
function gui_settrayicon(var awindow: windowty; const icon,mask: pixmapty):
guierrorty;
function gui_settrayhint(var awindow: windowty; const hint: msestring):
guierrorty;
function gui_flushgdi(const synchronize: boolean = false): guierrorty;
function gui_showwindow(id: winidty): guierrorty;
function gui_hidewindow(id: winidty): guierrorty;
function gui_raisewindow(id: winidty): guierrorty;
function gui_lowerwindow(id: winidty): guierrorty;
function gui_stackunderwindow(id: winidty; predecessor: winidty):
guierrorty;
function gui_stackoverwindow(id: winidty; predecessor: winidty): guierrorty;
function gui_canstackunder: boolean;
function gui_getzorder(const ids: winidarty; out zorders: integerarty):
guierrorty;
function gui_getwindowrect(id: winidty; out rect: rectty): guierrorty;
function gui_getwindowpos(id: winidty; out pos: pointty): guierrorty;
function gui_getwindowsize(id: winidty): windowsizety;
function gui_getwindowdesktop(const id: winidty): integer;
function gui_windowvisible(id: winidty): boolean;
function gui_setwindowstate(id: winidty; size: windowsizety; visible:
boolean): guierrorty;
function gui_setwindowcaption(id: winidty; const caption: msestring):
guierrorty;
function gui_setwindowicon(id: winidty; const icon,mask: pixmapty):
guierrorty;
function gui_setsizeconstraints(id: winidty; const min,max: sizety):
guierrorty;
function gui_reposwindow(id: winidty; const rect: rectty): guierrorty;
function gui_getdecoratedwindowrect(id: winidty; out arect: rectty):
guierrorty;
function gui_setdecoratedwindowrect(id: winidty; const rect: rectty; out
clientrect: rectty): guierrorty;
function gui_setembeddedwindowrect(id: winidty; const rect: rectty):
guierrorty;
function gui_setwindowfocus(id: winidty): guierrorty;
function gui_setimefocus(var awindow: windowty): guierrorty;
function gui_unsetimefocus(var awindow: windowty): guierrorty;
function gui_setappfocus(id: winidty): guierrorty;
function gui_minimizeapplication: guierrorty;
function gui_setwindowgroup(id: winidty; group: winidty): guierrorty;
function gui_settransientfor(var awindow: windowty; const transientfor:
winidty): guierrorty;
function gui_movewindowrect(id: winidty; const dist: pointty; const rect:
rectty): guierrorty;
function gui_windowatpos(const pos: pointty): winidty;
function gui_getscreenrect(const id: winidty): rectty;
function gui_getworkarea(id: winidty): rectty;
function gui_setapplicationicon(const icon,mask: pixmapty): guierrorty;
function gui_pidtowinid(const pids: procidarty): winidty;
function gui_setcursorshape(winid: winidty; shape: cursorshapety):
guierrorty;
function gui_getpointerpos: pointty;
function gui_setpointerpos(const pos: pointty): guierrorty;
function gui_movepointer(const dist: pointty): guierrorty;
function gui_grabpointer(id: winidty): guierrorty;
function gui_ungrabpointer: guierrorty;
function gui_getpixel(const id: winidty; const pos: pointty; out pixel:
pixelty): guierrorty;
function gui_rgbtopixel(rgb: longword): pixelty;
function gui_pixeltorgb(pixel: pixelty): longword;
function gui_graytopixel(gray: byte): pixelty;
function gui_pixeltogray(pixel: pixelty): byte;
function gui_initcolormap: guierrorty;
function gui_regiontorects(const aregion: regionty): rectarty;
function gui_getdefaultfontnames: defaultfontnamesty;
function gui_createpixmap(const size: sizety; winid: winidty = 0; kind:
bitmapkindty = bmk_rgb; copyfrom: pixmapty = 0): pixmapty; overload;
function gui_freepixmap(pixmap: pixmapty): gdierrorty;
function gui_getpixmapinfo(var info: pixmapinfoty): gdierrorty;
function gui_createbitmapfromdata(const size: sizety; datapo: pbyte;
msbitfirst: boolean = false; dwordaligned: boolean = false; bottomup: boolean =
false): pixmapty;
function gui_pixmaptoimage(pixmap: pixmapty; out image: imagety; gchandle:
longword): gdierrorty;
function gui_imagetopixmap(const image: imagety; out pixmap: pixmapty;
gchandle: longword): gdierrorty;
function gui_allocimagemem(length: integer): plongwordaty;
procedure gui_freeimagemem(data: plongwordaty);
procedure gui_beep;
function gui_copytoclipboard(const value: msestring; const buffer:
clipboardbufferty): guierrorty;
function gui_pastefromclipboard(out value: msestring; const buffer:
clipboardbufferty): guierrorty;
function gui_canpastefromclipboard(const buffer: clipboardbufferty):
boolean;
function gui_sysdnd(const action: sysdndactionty; const aintf: isysdnd;
const arect: rectty; out aresult: boolean): guierrorty;
function gui_sysdndreaddata(var adata: string; const typeindex: integer):
guierrorty;
function gui_sysdndreadtext(var atext: msestring; const typeindex:
integer): guierrorty;
function gui_getgdifuncs: pgdifunctionaty; function gui_init: guierrorty;
function gui_deinit: guierrorty;
procedure gui_cancelshutdown;
procedure GUI_DEBUGBEGIN; export;
procedure GUI_DEBUGEND; export;
function gui_registergdi: guierrorty;
function gui_setmainthread: guierrorty;
function gui_sethighrestimer(const avalue: boolean): guierrorty;
function gui_grouphideminimizedwindows: boolean;
function gui_postevent(event: tmseevent): guierrorty;
function gui_settimer(us: longword): guierrorty;
procedure gui_disconnectmaineventqueue();
procedure gui_connectmaineventqueue();
function gui_hasevent: boolean;
function gui_getevent: tmseevent;
function gui_escapepressed: boolean;
procedure gui_resetescapepressed;
function gui_createwindow(const rect: rectty; var options:
internalwindowoptionsty; var awindow: windowty): guierrorty;
function gui_destroywindow(var awindow: windowty): guierrorty;
function gui_getrootwindow(id: winidty = 0): winidty;
function gui_getparentwindow(const awindow: winidty): winidty;
function gui_reparentwindow(const child: winidty; const parent: winidty;
const pos: pointty): guierrorty;
function gui_getchildren(const id: winidty; out children: winidarty):
guierrorty;
function gui_showsysdock(var awindow: windowty): guierrorty;
function gui_hidesysdock(var awindow: windowty): guierrorty;
function gui_docktosyswindow(var child: windowty; const akind:
syswindowty): guierrorty;
function gui_traymessage(var awindow: windowty; const message: msestring;
out messageid: longword; const timeoutms: longword = 0): guierrorty;
function gui_canceltraymessage(var awindow: windowty; const messageid:
longword): guierrorty;
function gui_settrayicon(var awindow: windowty; const icon,mask: pixmapty):
guierrorty;
function gui_settrayhint(var awindow: windowty; const hint: msestring):
guierrorty;
function gui_flushgdi(const synchronize: boolean = false): guierrorty;
function gui_showwindow(id: winidty): guierrorty;
function gui_hidewindow(id: winidty): guierrorty;
function gui_raisewindow(id: winidty): guierrorty;
function gui_lowerwindow(id: winidty): guierrorty;
function gui_stackunderwindow(id: winidty; predecessor: winidty):
guierrorty;
function gui_stackoverwindow(id: winidty; predecessor: winidty): guierrorty;
function gui_canstackunder: boolean; //no way found to change stacking
order in KDE
function gui_getzorder(const ids: winidarty; out zorders: integerarty):
guierrorty;
function gui_getwindowrect(id: winidty; out rect: rectty): guierrorty;
function gui_getwindowpos(id: winidty; out pos: pointty): guierrorty;
function gui_getwindowsize(id: winidty): windowsizety;
function gui_getwindowdesktop(const id: winidty): integer;
function gui_windowvisible(id: winidty): boolean;
function gui_setwindowstate(id: winidty; size: windowsizety; visible:
boolean): guierrorty;
function gui_setwindowcaption(id: winidty; const caption: msestring):
guierrorty;
function gui_setwindowicon(id: winidty; const icon,mask: pixmapty):
guierrorty;
function gui_setsizeconstraints(id: winidty; const min,max: sizety):
guierrorty;
function gui_reposwindow(id: winidty; const rect: rectty): guierrorty;
function gui_getdecoratedwindowrect(id: winidty; out arect: rectty):
guierrorty;
function gui_setdecoratedwindowrect(id: winidty; const rect: rectty; out
clientrect: rectty): guierrorty;
function gui_setembeddedwindowrect(id: winidty; const rect: rectty):
guierrorty;
function gui_setwindowfocus(id: winidty): guierrorty;
function gui_setimefocus(var awindow: windowty): guierrorty;
function gui_unsetimefocus(var awindow: windowty): guierrorty;
function gui_setappfocus(id: winidty): guierrorty;
function gui_minimizeapplication: guierrorty;
function gui_setwindowgroup(id: winidty; group: winidty): guierrorty;
function gui_settransientfor(var awindow: windowty; const transientfor:
winidty): guierrorty;
function gui_movewindowrect(id: winidty; const dist: pointty; const rect:
rectty): guierrorty;
function gui_windowatpos(const pos: pointty): winidty;
function gui_getscreenrect(const id: winidty): rectty;
function gui_getworkarea(id: winidty): rectty;
function gui_setapplicationicon(const icon,mask: pixmapty): guierrorty;
function gui_pidtowinid(const pids: procidarty): winidty;
function gui_setcursorshape(winid: winidty; shape: cursorshapety):
guierrorty;
function gui_getpointerpos: pointty;
function gui_setpointerpos(const pos: pointty): guierrorty;
function gui_movepointer(const dist: pointty): guierrorty;
function gui_grabpointer(id: winidty): guierrorty;
function gui_ungrabpointer: guierrorty;
function gui_getpixel(const id: winidty; const pos: pointty; out pixel:
pixelty): guierrorty;
function gui_rgbtopixel(rgb: longword): pixelty;
function gui_pixeltorgb(pixel: pixelty): longword;
function gui_graytopixel(gray: byte): pixelty;
function gui_pixeltogray(pixel: pixelty): byte;
function gui_initcolormap: guierrorty;
function gui_regiontorects(const aregion: regionty): rectarty;
function gui_getdefaultfontnames: defaultfontnamesty;
function gui_createpixmap(const size: sizety; winid: winidty = 0; kind:
bitmapkindty = bmk_rgb; copyfrom: pixmapty = 0): pixmapty; overload;
function gui_freepixmap(pixmap: pixmapty): gdierrorty;
function gui_getpixmapinfo(var info: pixmapinfoty): gdierrorty;
function gui_createbitmapfromdata(const size: sizety; datapo: pbyte;
msbitfirst: boolean = false; dwordaligned: boolean = false; bottomup: boolean =
false): pixmapty;
function gui_pixmaptoimage(pixmap: pixmapty; out image: imagety; gchandle:
longword): gdierrorty;
function gui_imagetopixmap(const image: imagety; out pixmap: pixmapty;
gchandle: longword): gdierrorty;
function gui_allocimagemem(length: integer): plongwordaty;
procedure gui_freeimagemem(data: plongwordaty);
procedure gui_beep;
function gui_copytoclipboard(const value: msestring; const buffer:
clipboardbufferty): guierrorty;
function gui_pastefromclipboard(out value: msestring; const buffer:
clipboardbufferty): guierrorty;
function gui_canpastefromclipboard(const buffer: clipboardbufferty):
boolean;
function gui_sysdnd(const action: sysdndactionty; const aintf: isysdnd;
const arect: rectty; out aresult: boolean): guierrorty;
function gui_sysdndreaddata(var adata: string; const typeindex: integer):
guierrorty;
function gui_sysdndreadtext(var atext: msestring; const typeindex:
integer): guierrorty;
function gui_getgdifuncs: pgdifunctionaty;
function gui_init: guierrorty;
function gui_deinit: guierrorty;
procedure gui_cancelshutdown;
procedure GUI_DEBUGBEGIN; export;
procedure GUI_DEBUGEND; export;
function gui_registergdi: guierrorty;
function gui_setmainthread: guierrorty; //set mainthread to currentthread
function gui_sethighrestimer(const avalue: boolean): guierrorty;
function gui_grouphideminimizedwindows: boolean;
function gui_postevent(event: tmseevent): guierrorty;
function gui_settimer(us: longword): guierrorty;
procedure gui_disconnectmaineventqueue();
procedure gui_connectmaineventqueue();
function gui_hasevent: boolean;
function gui_getevent: tmseevent;
function gui_escapepressed: boolean;
procedure gui_resetescapepressed;
function gui_createwindow(const rect: rectty; var options:
internalwindowoptionsty; var awindow: windowty): guierrorty;
function gui_destroywindow(var awindow: windowty): guierrorty;
function gui_getrootwindow(id: winidty = 0): winidty;
function gui_getparentwindow(const awindow: winidty): winidty;
function gui_reparentwindow(const child: winidty; const parent: winidty;
const pos: pointty): guierrorty;
function gui_getchildren(const id: winidty; out children: winidarty):
guierrorty;
function gui_showsysdock(var awindow: windowty): guierrorty;
function gui_hidesysdock(var awindow: windowty): guierrorty;
function gui_docktosyswindow(var child: windowty; const akind:
syswindowty): guierrorty;
function gui_traymessage(var awindow: windowty; const message: msestring;
out messageid: longword; const timeoutms: longword = 0): guierrorty;
function gui_canceltraymessage(var awindow: windowty; const messageid:
longword): guierrorty;
function gui_settrayicon(var awindow: windowty; const icon,mask: pixmapty):
guierrorty;
function gui_settrayhint(var awindow: windowty; const hint: msestring):
guierrorty;
function gui_flushgdi(const synchronize: boolean = false): guierrorty;
function gui_showwindow(id: winidty): guierrorty;
function gui_hidewindow(id: winidty): guierrorty;
function gui_raisewindow(id: winidty): guierrorty;
function gui_lowerwindow(id: winidty): guierrorty;
function gui_stackunderwindow(id: winidty; predecessor: winidty):
guierrorty;
function gui_stackoverwindow(id: winidty; predecessor: winidty): guierrorty;
function gui_canstackunder: boolean; //no way found to change stacking
order in KDE
function gui_getzorder(const ids: winidarty; out zorders: integerarty):
guierrorty;
function gui_getwindowrect(id: winidty; out rect: rectty): guierrorty;
function gui_getwindowpos(id: winidty; out pos: pointty): guierrorty;
function gui_getwindowsize(id: winidty): windowsizety;
function gui_getwindowdesktop(const id: winidty): integer;
function gui_windowvisible(id: winidty): boolean;
function gui_setwindowstate(id: winidty; size: windowsizety; visible:
boolean): guierrorty;
function gui_setwindowcaption(id: winidty; const caption: msestring):
guierrorty;
function gui_setwindowicon(id: winidty; const icon,mask: pixmapty):
guierrorty;
function gui_setsizeconstraints(id: winidty; const min,max: sizety):
guierrorty;
function gui_reposwindow(id: winidty; const rect: rectty): guierrorty;
function gui_getdecoratedwindowrect(id: winidty; out arect: rectty):
guierrorty;
function gui_setdecoratedwindowrect(id: winidty; const rect: rectty; out
clientrect: rectty): guierrorty;
function gui_setembeddedwindowrect(id: winidty; const rect: rectty):
guierrorty;
function gui_setwindowfocus(id: winidty): guierrorty;
function gui_setimefocus(var awindow: windowty): guierrorty;
function gui_unsetimefocus(var awindow: windowty): guierrorty;
function gui_setappfocus(id: winidty): guierrorty;
function gui_minimizeapplication: guierrorty;
function gui_setwindowgroup(id: winidty; group: winidty): guierrorty;
function gui_settransientfor(var awindow: windowty; const transientfor:
winidty): guierrorty;
function gui_movewindowrect(id: winidty; const dist: pointty; const rect:
rectty): guierrorty;
function gui_windowatpos(const pos: pointty): winidty;
function gui_getscreenrect(const id: winidty): rectty;
function gui_getworkarea(id: winidty): rectty;
function gui_setapplicationicon(const icon,mask: pixmapty): guierrorty;
function gui_pidtowinid(const pids: procidarty): winidty;
function gui_setcursorshape(winid: winidty; shape: cursorshapety):
guierrorty;
function gui_getpointerpos: pointty;
function gui_setpointerpos(const pos: pointty): guierrorty;
function gui_movepointer(const dist: pointty): guierrorty;
function gui_grabpointer(id: winidty): guierrorty;
function gui_ungrabpointer: guierrorty;
function gui_getpixel(const id: winidty; const pos: pointty; out pixel:
pixelty): guierrorty;
function gui_rgbtopixel(rgb: longword): pixelty;
function gui_pixeltorgb(pixel: pixelty): longword;
function gui_graytopixel(gray: byte): pixelty;
function gui_pixeltogray(pixel: pixelty): byte;
function gui_initcolormap: guierrorty;
function gui_regiontorects(const aregion: regionty): rectarty;
function gui_getdefaultfontnames: defaultfontnamesty;
function gui_createpixmap(const size: sizety; winid: winidty = 0; kind:
bitmapkindty = bmk_rgb; copyfrom: pixmapty = 0): pixmapty; overload;
function gui_freepixmap(pixmap: pixmapty): gdierrorty;
function gui_getpixmapinfo(var info: pixmapinfoty): gdierrorty;
function gui_createbitmapfromdata(const size: sizety; datapo: pbyte;
msbitfirst: boolean = false; dwordaligned: boolean = false; bottomup: boolean =
false): pixmapty;
function gui_pixmaptoimage(pixmap: pixmapty; out image: imagety; gchandle:
longword): gdierrorty;
function gui_imagetopixmap(const image: imagety; out pixmap: pixmapty;
gchandle: longword): gdierrorty;
function gui_allocimagemem(length: integer): plongwordaty;
procedure gui_freeimagemem(data: plongwordaty);
procedure gui_beep;
function gui_copytoclipboard(const value: msestring; const buffer:
clipboardbufferty): guierrorty;
function gui_pastefromclipboard(out value: msestring; const buffer:
clipboardbufferty): guierrorty;
function gui_canpastefromclipboard(const buffer: clipboardbufferty):
boolean;
function gui_sysdnd(const action: sysdndactionty; const aintf: isysdnd;
const arect: rectty; out aresult: boolean): guierrorty;
function gui_sysdndreaddata(var adata: string; const typeindex: integer):
guierrorty;
function gui_sysdndreadtext(var atext: msestring; const typeindex:
integer): guierrorty;
function gui_getgdifuncs: pgdifunctionaty;
Regarding MSEgui, for now, in order to supply mouse and keyboardevents and the
like you need to post the according event objects into the application
eventqueue.
This message and the previous one are the blueprints that people were talking
on the mailing lists.
_______________________________________________
mseide-msegui-talk mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mseide-msegui-talk