From 36b5deef09d0390e6d1a7bac9362bb8bc0008b0b Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 28 Jun 2009 18:32:47 +0000 Subject: Make framebuffer port use libnsfb svn path=/trunk/netsurf/; revision=8122 --- framebuffer/fbtk.h | 216 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 framebuffer/fbtk.h (limited to 'framebuffer/fbtk.h') diff --git a/framebuffer/fbtk.h b/framebuffer/fbtk.h new file mode 100644 index 000000000..95bd8b9a3 --- /dev/null +++ b/framebuffer/fbtk.h @@ -0,0 +1,216 @@ + +#define FB_SCROLL_COLOUR 0xFF888888 +#define FB_FRAME_COLOUR 0xFFDDDDDD +#define FB_COLOUR_BLACK 0xFF000000 +#define FB_COLOUR_WHITE 0xFFFFFFFF + +typedef struct fbtk_widget_s fbtk_widget_t; + +/* user widget callback */ +typedef int (*fbtk_user_t)(fbtk_widget_t *widget, void *pw); + +/* input callback */ +typedef int (*fbtk_input_t)(fbtk_widget_t *widget, nsfb_event_t *event, void *pw); + +/* mouse click callback */ +typedef int (*fbtk_mouseclick_t)(fbtk_widget_t *widget, nsfb_event_t *event, int x, int y, void *pw); + +/* mouse move callback */ +typedef int (*fbtk_move_t)(fbtk_widget_t *widget, int x, int y, void *pw); + +/* redraw function */ +typedef int (*fbtk_redraw_t)(fbtk_widget_t *root, fbtk_widget_t *widget, void *pw); + +/* enter pressed on writable icon */ +typedef int (*fbtk_enter_t)(void *pw, char *text); + + +/* Widget creation */ + +/** Initialise widget toolkit. + * + * Initialises widget toolkit and creates root window against a framebuffer. + * + * @param fb The underlying framebuffer. + * @return The root widget handle. + */ +fbtk_widget_t *fbtk_init(nsfb_t *fb); + +/** Create a window widget. + * + * @param parent The parent window or the root widget for a top level window. + * @param x The x location relative to the parent window. + * @param y the y location relative to the parent window. + * @param width The width of the window. 0 indicates parents width should be + * used. Negative value indicates parents width less the value + * should be used. The width is limited to lie within the parent + * window. + * @param height The height of the window limited in a similar way to the + * /a width. + * @param c The background colour. + * @return new window widget handle or NULL on error. + */ +fbtk_widget_t *fbtk_create_window(fbtk_widget_t *parent, int x, int y, int width, int height); + +/** Create a text widget. + * + * @param window The window to add the text widget to. + * @return new widget handle or NULL on error. + */ +fbtk_widget_t *fbtk_create_text(fbtk_widget_t *window, int x, int y, int width, int height, colour bg, colour fg, bool outline); + +/** Create a bitmap widget. + * + * Create a widget which shows a bitmap. + * + * @param window The window to add the bitmap widget to. + * @return new widget handle or NULL on error. + */ +fbtk_widget_t *fbtk_create_bitmap(fbtk_widget_t *window, int x, int y, colour c,struct bitmap *image); + +/** Create a filled rectangle + * + * Create a widget which is a filled rectangle, usually used for backgrounds. + * + * @param window The window to add the filled area widget to. + * @return new widget handle or NULL on error. + */ +fbtk_widget_t * +fbtk_create_fill(fbtk_widget_t *window, int x, int y, int width, int height, colour c); + +/** Create a horizontal scroll widget + * + * Create a horizontal scroll widget. + * + * @param window The window to add the filled area widget to. + * @return new widget handle or NULL on error. + */ +fbtk_widget_t * +fbtk_create_hscroll(fbtk_widget_t *window, int x, int y, int width, int height, colour fg, colour bg); + +/** Create a vertical scroll widget + * + * Create a vertical scroll widget. + * + * @param window The window to add the filled area widget to. + * @return new widget handle or NULL on error. + */ +fbtk_widget_t * +fbtk_create_vscroll(fbtk_widget_t *window, int x, int y, int width, int height, colour fg, colour bg); + +/** Create a user widget. + * + * Create a widget which is to be handled entirely by the calling application. + * + * @param window The window to add the user widget to. + * @param pw The private pointer which can be read using ::fbtk_get_pw + * @return new widget handle or NULL on error. + */ +fbtk_widget_t *fbtk_create_user(fbtk_widget_t *window, int x, int y, int width, int height, void *pw); + + +/** Create a button widget. + * + * Helper function which creates a bitmap widget and associate a handler for + * when it is clicked. + * + * @param window The window to add the button widget to. + * @return new widget handle or NULL on error. + */ +fbtk_widget_t *fbtk_create_button(fbtk_widget_t *window, int x, int y, colour c, struct bitmap *image, fbtk_mouseclick_t click, void *pw); + +/** Create a writable text widget. + * + * Helper function which creates a text widget and configures an input handler + * to create a writable text field. This call is equivalent to calling + * ::fbtk_create_text followed by ::fbtk_writable_text + * + * @param window The window to add the text widget to. + * @return new widget handle or NULL on error. + */ +fbtk_widget_t *fbtk_create_writable_text(fbtk_widget_t *window, int x, int y, int width, int height, colour bg, colour fg, bool outline, fbtk_enter_t enter, void *pw); + + +/* Widget Destruction */ + +/** Destroy and free a widget and all its children. + * + * @param widget The widget to destroy. + * @return 0 on success or -1 on error. + */ +int fbtk_destroy_widget(fbtk_widget_t *widget); + +/* Widget information */ + +int fbtk_get_y(fbtk_widget_t *widget); +int fbtk_get_x(fbtk_widget_t *widget); +int fbtk_get_width(fbtk_widget_t *widget); +int fbtk_get_height(fbtk_widget_t *widget); +void *fbtk_get_userpw(fbtk_widget_t *widget); +nsfb_t *fbtk_get_nsfb(fbtk_widget_t *widget); + +/* Set widget properties */ + +void fbtk_set_text(fbtk_widget_t *widget, const char *text); +void fbtk_set_bitmap(fbtk_widget_t *widget, struct bitmap *image); +void fbtk_set_scroll(fbtk_widget_t *widget, int pct); +void fbtk_set_scroll_pos(fbtk_widget_t *widget, int pos); +void fbtk_set_pos_and_size(fbtk_widget_t *widget, int x, int y, int width, int height); +void fbtk_set_handler_redraw(fbtk_widget_t *widget, fbtk_redraw_t input, void *pw); +void fbtk_set_handler_input(fbtk_widget_t *widget, fbtk_input_t input, void *pw); +void fbtk_set_handler_click(fbtk_widget_t *widget, fbtk_mouseclick_t click, void *pw); +void fbtk_set_handler_move(fbtk_widget_t *widget, fbtk_move_t move, void *pw); + +/** Alter a text widget to be writable. + */ +void fbtk_writable_text(fbtk_widget_t *widget, fbtk_enter_t enter, void *pw); + + +/* General routines */ + +bool fbtk_clip_rect(const bbox_t * restrict clip, bbox_t * restrict box); + +/** Pointer movement. + * + * Pointer has been moved. + * + * @param widget any tookit widget. + * @parm x movement in horizontal plane. + * @parm y movement in vertical plane. + * @parm relative Wether the /a x and /a y should be considered relative to + * current pointer position. + */ +void fbtk_move_pointer(fbtk_widget_t *widget, int x, int y, bool relative); + +/** Mouse has been clicked + */ +void fbtk_click(fbtk_widget_t *widget, nsfb_event_t *event); + +/** Input has been recived + */ +void fbtk_input(fbtk_widget_t *widget, nsfb_event_t *event); + +/** Indicate a widget has to be redrawn + */ +void fbtk_request_redraw(fbtk_widget_t *widget); + +/** Cause a redraw to happen. + */ +int fbtk_redraw(fbtk_widget_t *widget); + +int fbtk_count_children(fbtk_widget_t *widget); + +bool fbtk_get_bbox(fbtk_widget_t *widget, struct nsfb_bbox_s *bbox); + +bool fbtk_event(fbtk_widget_t *root, nsfb_event_t *event, int timeout); + +/* keycode to ucs4 */ +int fbtk_keycode_to_ucs4(int code, uint8_t mods); + + + + + + + + -- cgit v1.2.3