Пример #1
0
int fgui_listbox_init(struct fgui_listbox *listbox, uint16_t x, uint16_t y,
		uint16_t w, uint16_t h, struct fgui_widget *parent)
{
	int ret;
	ret = fgui_combobox_init(listbox, x, y, w, h, parent);
	fgui_widget_set_draw((struct fgui_widget *)listbox, fgui_listbox_draw);
	listbox->base.event_handler = fgui_listbox_event_handler;
	listbox->is_expanded = true;
	return ret;
}
Пример #2
0
int main(int argc, char *argv[])
{
	int ret;
	SDL_Event event;
	struct fgui_event fgui_event;
	int button_clicks = 0;
	int button2_clicks = 0;
	struct btn_cb_data btn_cb_data = {
		&button,
		"hello button userdata",
		&button_clicks,
	};

	struct btn_cb_data btn_cb_data2 = {
		&button2,
		"hello button2 userdata",
		&button2_clicks,
	};

	fgui_application_init(&app);
	fgui_listbox_init(&listbox, 160, 4*LINEHEIGHT-6, 60, 15, NULL);
	fgui_checkbox_init(&checkbox, 160, 6*LINEHEIGHT+3, 82, 15, "check it!", NULL);
	fgui_button_init(&button, 160, 7*LINEHEIGHT, 82, 15, "hello world", NULL);
	fgui_button_init(&button2, 160, 8*LINEHEIGHT, 82, 15, "hello world 2", NULL);
	fgui_combobox_init(&combobox, 160, 9*LINEHEIGHT, 60, 15, NULL);
	fgui_label_init(&label, 160, 10*LINEHEIGHT, 150, 20, "hello fgui label", NULL);
	fgui_lineedit_init(&lineedit, 160, 11*LINEHEIGHT, 100, 15, NULL);
	fgui_combobox_add_item(&combobox, "item1");
	fgui_combobox_add_item(&combobox, "item2");
	fgui_combobox_add_item(&combobox, "item3");
	fgui_combobox_set_index(&combobox, 0);
	fgui_listbox_add_item(&listbox, "item1");
	fgui_listbox_add_item(&listbox, "item2");
	fgui_listbox_add_item(&listbox, "item3");
	fgui_listbox_set_index(&listbox, 0);
	fgui_application_add_widget(&app, (struct fgui_widget *)&listbox);
	fgui_application_add_widget(&app, (struct fgui_widget *)&checkbox);
	fgui_application_add_widget(&app, &button.base);
	fgui_application_add_widget(&app, &button2.base);
	fgui_application_add_widget(&app, (struct fgui_widget *)&label);
	fgui_application_add_widget(&app, (struct fgui_widget *)&combobox);
	fgui_application_add_widget(&app, (struct fgui_widget *)&lineedit);
	fgui_button_set_on_click_handler(&button, on_button_click, &btn_cb_data);
	fgui_button_set_on_click_handler(&button2, on_button_click, &btn_cb_data2);
	fgui_combobox_set_on_change_handler(&combobox, on_combobox_change, NULL);
	fgui_checkbox_set_on_click_handler(&checkbox, on_checkbox_change, NULL);

	fgui_dropmenu_init(&menubar, 0, 0, 80, 15, NULL);
	fgui_dropmenu_add_item(&dropmenu, "menuitem1");
	fgui_dropmenu_add_item(&dropmenu, "menuitem2");
	fgui_dropmenu_add_item(&dropmenu, "menuitem3");
	fgui_dropmenu_set_index(&dropmenu, 0);

	fgui_menubar_init(&menubar, 0, 0, 320, 15, NULL);
	fgui_menubar_add_item(&menubar, "Menu1", (struct fgui_widget *)&dropmenu);
	fgui_menubar_add_item(&menubar, "Menu2", NULL);
	fgui_menubar_add_item(&menubar, "Help", NULL);
	fgui_application_add_widget(&app, (struct fgui_widget *)&menubar);

	if (SDL_Init(SDL_INIT_VIDEO) < 0) {
		fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
		exit(1);
	}

	// make sure things are cleaned up when we quit
	atexit(SDL_Quit);

	// attempt to create a 640x480 window with 32bit pixels.
	gScreen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_SWSURFACE);
	if (gScreen == NULL) {
		fprintf(stderr, "Unable to set up video: %s\n", SDL_GetError());
		exit(1);
	}

	SDL_EnableUNICODE(1);
	while (1) {
		render_stuff();

		// update the whole screen
		SDL_UpdateRect(gScreen, 0, 0, 0, 0);

		// blocking wait (tip: SDL_PollEvent is non-blocking)
		ret = SDL_WaitEvent(&event);
		if (ret == 0) {
			fprintf(stderr, "ERROR: SDL_WaitEvent: %s\n", SDL_GetError());
			exit(1);
		}

		switch (event.type) {
		case SDL_KEYDOWN:
			fgui_event.type = FGUI_EVENT_KEYDOWN;
			fgui_event.key.keycode = sdl_keysym_to_fgui_key(event.key.keysym.sym);
			if ((fgui_event.key.keycode >= 'a') && (fgui_event.key.keycode <= 'z'))
			{
			  if (event.key.keysym.mod & KMOD_SHIFT) 
			    fgui_event.key.keycode = toupper(fgui_event.key.keycode);
			}
			fgui_application_process_event(&app, &fgui_event);
			break;

		case SDL_KEYUP:
			switch (event.key.keysym.sym) {
			case SDLK_ESCAPE:
				// return (and thus, quit)
				return 0;
			default:
				fgui_event.type = FGUI_EVENT_KEYUP;
				fgui_event.key.keycode = sdl_keysym_to_fgui_key(event.key.keysym.sym);
				fgui_application_process_event(&app, &fgui_event);
				break;
			}
			break;

		case SDL_QUIT:
			return 0;

		default:
			break;
		}
	}
	return 0;
}