| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 | { Demo showing the use of canvas object.   V0.75 }uses xforms,x,xlib;{*** Forms and Objects ***}type TFD_canvasform = record        canvasform : PFL_FORM;        vdata : pointer;        ldata : longint;        canvas,        br,        keyboard,        mouse,        done,        misc,        menu : PFL_OBJECT;end;PFD_canvasform = ^TFD_canvasform;Var canvasGC : TGC;function canvas_expose(ob : PFL_OBJECT;win : TWindow; w,h : longint; ev : PXEvent;d : Pointer) : longint;cdecl;var ui : PFD_CANVASFORM;begin    ui := d;    XFillRectangle(PDisplay(fl_display), TDRAWABLE(win), canvasGC, 0, 0,cardinal( w), cardinal(h));    fl_addto_browser(ui^.br, 'Expose');end;function canvas_key(ob : PFL_OBJECT; win : TWindow; w,h : Longint; ev : PXEvent; d: pointer) : longint;cdecl;var   ui :PFD_canvasform;   buf : string[128];begin    ui := d;    str (XKeycodeToKeysym(PDisplay(fl_display),ev^.xkey.keycode, TkeyCode(#0)),buf);    buf:= 'KeyPress: keysym='+buf+#0;    fl_addto_browser(ui^.br, @buf[1]);    return 0;end;function canvas_but(ob : PFL_OBJECT; win : TWindow; w,h : longint, ev : PXEvent;d : pointer) : longint;cdecl;var    ui : PFD_canvasform;    buf : string[128];begin  ui := d;  str(ev^.xbutton.button,buf);  if ev^.eventtype=ButtonPress then    buf:='Press '+buf  else    buf:='Release '+buf;  buf:='Button '+buf+#0;    fl_addto_browser(ui^.br, @buf[1]);end;function canvas_misc(ob : PFL_OBJECT; win : TWindow; w,h : longint, ev : PXEvent;d : pointer) : longint;cdecl;var   ui : PFD_canvasform;begin  ui := d;  if ev^.xcrossing.eventtype=EnterNotify then  fl_addto_browser(ui^.br, 'Enter Canvas')  else  fl_addto_browser(ui^.br, 'Leave Canvas')end;procedure init_canvas(FD_canvasform *fdui)begin   fl_add_canvas_handler(fdui^.canvas, Expose, PFL_HANDLE_CANVAS(@canvas_expose), fdui);   fl_add_canvas_handler(fdui^.canvas, KeyPress, PFL_HANDLE_CANVAS(@canvas_key), fdui);   fl_add_canvas_handler(fdui^.canvas, ButtonPress,PFL_HANDLE_CANVAS(@canvas_but),fdui);   fl_add_canvas_handler(fdui^.canvas, ButtonRelease,PFL_HANDLE_CANVAS(canvas_but),fdui);   fl_set_button(fdui^.mouse, 1);   fl_set_button(fdui^.keyboard, 1);   canvasGC := XCreateGC(fl_get_display(),fl_state[fl_vmode].trailblazer,0,0);   XSetForeground(fl_get_display(), canvasGC, fl_get_flcolor(FL_BLACK));end;varfd_canvasform : PFD_canvasform;procedure sensitive_setting(ob : PFL_OBJECT ; event : longint); cdecl;var    hc : PFL_HANDLE_CANVAS;begin if event=Keypress then   hc := PFL_HANDLE_CANVAS(@canvas_key) else  hc := PFL_HANDLE_CANVAS(@canvas_but);    if(fl_get_button(ob)<>0) then       fl_add_canvas_handler(fd_canvasform^.canvas, event, hc, fd_canvasform);    else       fl_remove_canvas_handler(fd_canvasform^.canvas, event, hc);end;procedure disable_it(ob : PFL_OBJECT; data : longint);cdecl;begin    if fl_get_button(ob)<>0 then      fl_deactivate_object(fd_canvasform^.canvas)    else      fl_activate_object (fd_canvasform^.canvas);end;procedure hide_it(ob : PFL_OBJECT; all : longint);cdecl;begin      if(all<>0) then        begin         fl_hide_form(fd_canvasform^.canvasform);         fl_show_form(fd_canvasform^.canvasform,                      FL_PLACE_CENTER, FL_TRANSIENT, 'canvas');{$ifdef nevertrue}       fl_remove_selected_xevent(fd_canvasform^.canvasform^.window,            OwnerGrabButtonMask);{$endif }        end      else       begin         if(fd_canvasform^.canvas^.visible)<>0 then           begin            fl_hide_object(fd_canvasform^.canvas);            fl_set_object_label(ob,'ShowCanvas');           end         else           begin            fl_show_object(fd_canvasform^.canvas);            fl_set_object_label(ob,'HideCanvas');           end        end;end;procedure misc_cb(ob : PFL_OBJECT; data : longint); cdecl;begin    if(fl_get_button(ob)<>0) then      begin       fl_add_canvas_handler(fd_canvasform^.canvas, EnterNotify,                             PFL_HANDLE_CANVAS(@canvas_misc), fd_canvasform);       fl_add_canvas_handler(fd_canvasform^.canvas, LeaveNotify,                             PFL_HANDLE_CANVAS(@canvas_misc), fd_canvasform);      end    else      begin       fl_remove_canvas_handler(fd_canvasform^.canvas,                                EnterNotify, PFL_HANDLE_CANVAS(@canvas_misc));       fl_remove_canvas_handler(fd_canvasform^.canvas,                                LeaveNotify, PFL_HANDLE_CANVAS(@canvas_misc));      end;end;{*****************}function create_form_canvasform : PFD_canvasform;var  obj :=PFL_OBJECT;  fdui : PFD_canvasform;begin  new(fdui);  fdui^.canvasform := fl_bgn_form(FL_NO_BOX, 450, 280);  obj := fl_add_box(FL_UP_BOX,0,0,450,280,'');  obj:= fl_add_canvas(FL_NORMAL_CANVAS,20,40,155,187,'');  fdui^.canvas := obj ;  obj := fl_add_browser(FL_NORMAL_BROWSER,188,40,152,187,'');  fdui^.br := obj ;    obj := fl_add_button(FL_PUSH_BUTTON,30,236,90,27,'Deactivate');    fl_set_object_callback(obj,disable_it,0);  obj := fl_add_button(FL_NORMAL_BUTTON,120,236,90,27,'HideCanvas');    fl_set_object_callback(obj, hide_it, 0);  obj := fl_add_button(FL_NORMAL_BUTTON,210,236,90,27,'HideForm');    fl_set_object_callback(obj, hide_it, 1);  obj := fl_add_button(FL_NORMAL_BUTTON,300,236,90,27,'Done');  fdui^.done := obj ;  obj := fl_add_text(FL_NORMAL_TEXT,130,10,120,20,'Canvas');    fl_set_object_lsize(obj,FL_MEDIUM_SIZE);    fl_set_object_lalign(obj,FL_ALIGN_CENTER);    fl_set_object_lstyle(obj,FL_BOLD_STYLE);  obj:= fl_add_menu(FL_PULLDOWN_MENU, 20,10, 45,22,'Menu');  fdui^.menu := obj ;    fl_set_object_shortcut(obj,'#m', 1);    fl_set_object_lstyle(obj, FL_BOLD_STYLE);  obj := fl_add_checkbutton(FL_PUSH_BUTTON,345,40,76,26,'Keyboard');  fdui^.keyboard := obj ;    fl_set_object_color(obj,FL_COL1,FL_BLUE);    fl_set_object_callback(obj,sensitive_setting,KeyPress);  obj := fl_add_checkbutton(FL_PUSH_BUTTON,345,70,76,26,'Mouse');    fdui^.mouse := obj ;    fl_set_object_color(obj,FL_COL1,FL_BLUE);    fl_set_object_callback(obj,sensitive_setting,ButtonPress); obj := fl_add_checkbutton(FL_PUSH_BUTTON,345,100,74,26,'Enter/Leave');    fdui^.misc := obj;    fl_set_object_color(obj,FL_COL1,FL_BLUE);    fl_set_object_callback(obj,misc_cb,ButtonPress);  fl_end_form();  create_form_canvasform :=fdui;end;begin   fl_set_border_width(-2);   fl_initialize(@argc, argv, 'FormDemo', nil, 0);   fd_canvasform := create_form_canvasform;   { fill-in form initialization code }   fl_set_object_dblbuffer(fd_canvasform^.br, 1); { looks better }   init_canvas (fd_canvasform);   fl_addto_menu(fd_canvasform^.menu,'Item1|Item2|Item3|Item4');   fl_show_form(fd_canvasform^.canvasform,                FL_PLACE_FREE,FL_FULLBORDER,'canvasform');{$ifdef nevertrue}         fl_remove_selected_xevent(fd_canvasform^.canvasform^.window,            OwnerGrabButtonMask);{$endif}   while (fl_do_forms() <> fd_canvasform^.done) do  ;end.
 |