shithub: libnate

ref: 228a7b0eeda3531eb0bf0efa2211e4532af69681
dir: /test/ntest.c/

View raw version
#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;
		}
	}
}