ref: 228a7b0eeda3531eb0bf0efa2211e4532af69681
dir: /test/ntest.c/
#include <u.h> #include <libc.h> #include <draw.h> #include <event.h> #include "../nate.h" #include "../n_window.h" #include "../n_hbox.h" #include "../n_vbox.h" #include "../n_box.h" #include "../n_label.h" #include "../n_image.h" char* getlabel(void) { return "ABC"; } NBox *box1; NBox *box2; int callclick(Mouse, Nelem* el, void*) { int id = 0; if (el == box1) id = 1; if (el == box2) id = 2; fprint(2, "click: %s (%d)\n", el->type, id); return 1; } void eresized(int new) { if (new && getwindow(display, Refnone) < 0) sysfatal("getwindow: %r"); nateredraw(1); } void main(int argc, char **argv) { USED(argc, argv); Nelem* mainwindow; Event ev; int e; if (initdraw(nil, nil, "nate test") < 0) sysfatal("initdraw: %r"); einit(Emouse); nateinit(); nateborders = 1; natetracehit = 1; Image* red = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, DRed); Image* green = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, DGreen); Image* blue = allocimage(display, Rect(0, 0, 1, 1), screen->chan, 1, DBlue); NAssign(NWindow, &mainwindow, New_Window(nil)) ->MakeRoot() ->Slot( New_VBox(nil) ->SizeToContent(1) ->Slot( New_HBox("first") ->SizeToContent(1) ->Slot( NAssign(NBox, &box1, New_Box(nil)) ->Border(1, green) ->SizeToContent(1) ->Padding(NMargin2(5, 3)) ->OnClick(callclick, nil) ->Slot( New_Label(nil) ->LabelFunc(getlabel) ->Margin(NMargin2(5, 5)) ) ) ->Slot( NAssign(NBox, &box2, New_Box(nil)) ->Border(1, blue) ->SizeToContent(1) ->OnClick(callclick, nil) ->Slot( New_Label(nil) ->Label("DEF") ->Margin(NMargin2(5, 5)) ) ) ->Slot( New_Box("imagebox") ->Size(Pt(50, 50)) ->Slot( New_Image(nil) ->Image(display->black) ) ) ) ->Slot( New_HBox("second") ->SizeToContent(1) ->Slot( New_Label(nil) ->Label("abc") ) ) ); eresized(0); int p[2]; pipe(p); dup(p[0], 2); int fd = create("/srv/ntest", OWRITE|ORCLOSE, 0666); if (fd < 0) sysfatal("create: %r"); fprint(fd, "%d\n", p[1]); close(p[1]); for (;;) { e = event(&ev); switch (e) { case Emouse: if (ev.mouse.buttons & 4) exits(nil); if (ev.mouse.buttons & 1) natemouseevent(ev.mouse); break; default: break; } } }