summaryrefslogtreecommitdiff
path: root/framebuffer/gui.c
diff options
context:
space:
mode:
Diffstat (limited to 'framebuffer/gui.c')
-rw-r--r--framebuffer/gui.c1503
1 files changed, 838 insertions, 665 deletions
diff --git a/framebuffer/gui.c b/framebuffer/gui.c
index 50c3da2ff..a329f4a46 100644
--- a/framebuffer/gui.c
+++ b/framebuffer/gui.c
@@ -53,6 +53,7 @@
#include "framebuffer/findfile.h"
#include "framebuffer/image_data.h"
#include "framebuffer/font.h"
+#include "framebuffer/options.h"
#include "content/urldb.h"
#include "desktop/history_core.h"
@@ -63,7 +64,6 @@ char *quirks_stylesheet_url;
char *adblock_stylesheet_url;
char *options_file_location;
-
fbtk_widget_t *fbtk;
struct gui_window *input_window = NULL;
@@ -81,8 +81,8 @@ struct browser_widget_s {
*/
bbox_t redraw_box; /**< Area requiring redraw. */
bool pan_required; /**< flag indicating the foreground loop
- * needs to pan the window.
- */
+ * needs to pan the window.
+ */
int panx, pany; /**< Panning required. */
};
@@ -91,67 +91,115 @@ struct browser_widget_s {
static void
fb_queue_redraw(struct fbtk_widget_s *widget, int x0, int y0, int x1, int y1)
{
- struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
+ struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
- bwidget->redraw_box.x0 = min(bwidget->redraw_box.x0, x0);
- bwidget->redraw_box.y0 = min(bwidget->redraw_box.y0, y0);
- bwidget->redraw_box.x1 = max(bwidget->redraw_box.x1, x1);
- bwidget->redraw_box.y1 = max(bwidget->redraw_box.y1, y1);
+ bwidget->redraw_box.x0 = min(bwidget->redraw_box.x0, x0);
+ bwidget->redraw_box.y0 = min(bwidget->redraw_box.y0, y0);
+ bwidget->redraw_box.x1 = max(bwidget->redraw_box.x1, x1);
+ bwidget->redraw_box.y1 = max(bwidget->redraw_box.y1, y1);
- if (fbtk_clip_to_widget(widget, &bwidget->redraw_box)) {
- bwidget->redraw_required = true;
- fbtk_request_redraw(widget);
- } else {
- bwidget->redraw_box.y0 = bwidget->redraw_box.x0 = INT_MAX;
- bwidget->redraw_box.y1 = bwidget->redraw_box.x1 = -(INT_MAX);
- bwidget->redraw_required = false;
- }
+ if (fbtk_clip_to_widget(widget, &bwidget->redraw_box)) {
+ bwidget->redraw_required = true;
+ fbtk_request_redraw(widget);
+ } else {
+ bwidget->redraw_box.y0 = bwidget->redraw_box.x0 = INT_MAX;
+ bwidget->redraw_box.y1 = bwidget->redraw_box.x1 = -(INT_MAX);
+ bwidget->redraw_required = false;
+ }
}
-static void fb_pan(fbtk_widget_t *widget,
- struct browser_widget_s *bwidget,
- struct browser_window *bw)
+/* queue a window scroll */
+static void
+widget_scroll_y(struct gui_window *gw, int y, bool abs)
{
- int x;
- int y;
- int width;
+ struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
+ int content_height;
int height;
- nsfb_bbox_t srcbox;
- nsfb_bbox_t dstbox;
- nsfb_t *nsfb = fbtk_get_nsfb(widget);
+ LOG(("window scroll"));
+ if (abs) {
+ bwidget->pany = y - bwidget->scrolly;
+ } else {
+ bwidget->pany += y;
+ }
+ bwidget->pan_required = true;
- int content_height = content_get_height(bw->current_content);
- int content_width = content_get_width(bw->current_content);
+ content_height = content_get_height(gw->bw->current_content);
- height = fbtk_get_height(widget);
- width = fbtk_get_width(widget);
- x = fbtk_get_x(widget);
- y = fbtk_get_y(widget);
+ height = fbtk_get_height(gw->browser);
/* dont pan off the top */
if ((bwidget->scrolly + bwidget->pany) < 0)
- bwidget->pany = - bwidget->scrolly;
+ bwidget->pany = -bwidget->scrolly;
- /* do not pan off the bottom of the content */
+ /* do not pan off the bottom of the content */
if ((bwidget->scrolly + bwidget->pany) > (content_height - height))
bwidget->pany = (content_height - height) - bwidget->scrolly;
+ fbtk_request_redraw(gw->browser);
+
+ fbtk_set_scroll_position(gw->vscroll, bwidget->scrolly + bwidget->pany);
+}
+
+/* queue a window scroll */
+static void
+widget_scroll_x(struct gui_window *gw, int x, bool abs)
+{
+ struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
+ int content_width;
+ int width;
+
+ if (abs) {
+ bwidget->panx = x - bwidget->scrollx;
+ } else {
+ bwidget->panx += x;
+ }
+ bwidget->pan_required = true;
+
+ content_width = content_get_width(gw->bw->current_content);
+
+ width = fbtk_get_width(gw->browser);
+
+
/* dont pan off the left */
if ((bwidget->scrollx + bwidget->panx) < 0)
bwidget->panx = - bwidget->scrollx;
- /* do not pan off the right of the content */
+ /* do not pan off the right of the content */
if ((bwidget->scrollx + bwidget->panx) > (content_width - width))
bwidget->panx = (content_width - width) - bwidget->scrollx;
- LOG(("panning %d, %d",bwidget->panx, bwidget->pany));
+ fbtk_request_redraw(gw->browser);
+
+ fbtk_set_scroll_position(gw->hscroll, bwidget->scrollx + bwidget->panx);
+}
+
+static void
+fb_pan(fbtk_widget_t *widget,
+ struct browser_widget_s *bwidget,
+ struct browser_window *bw)
+{
+ int x;
+ int y;
+ int width;
+ int height;
+ nsfb_bbox_t srcbox;
+ nsfb_bbox_t dstbox;
+
+ nsfb_t *nsfb = fbtk_get_nsfb(widget);
+
+ height = fbtk_get_height(widget);
+ width = fbtk_get_width(widget);
+
+ LOG(("panning %d, %d", bwidget->panx, bwidget->pany));
+
+ x = fbtk_get_absx(widget);
+ y = fbtk_get_absy(widget);
- /* pump up the volume. dance, dance! lets do it */
+ /* if the pan exceeds the viewport size just redraw the whole area */
if (bwidget->pany > height || bwidget->pany < -height ||
- bwidget->panx > width || bwidget->panx < -width) {
+ bwidget->panx > width || bwidget->panx < -width) {
- /* pan in any direction by more than viewport size */
bwidget->scrolly += bwidget->pany;
bwidget->scrollx += bwidget->panx;
fb_queue_redraw(widget, 0, 0, width, height);
@@ -163,7 +211,6 @@ static void fb_pan(fbtk_widget_t *widget,
if (bwidget->pany < 0) {
/* pan up by less then viewport height */
-
srcbox.x0 = x;
srcbox.y0 = y;
srcbox.x1 = srcbox.x0 + width;
@@ -184,7 +231,6 @@ static void fb_pan(fbtk_widget_t *widget,
if (bwidget->pany > 0) {
/* pan down by less then viewport height */
-
srcbox.x0 = x;
srcbox.y0 = y + bwidget->pany;
srcbox.x1 = srcbox.x0 + width;
@@ -200,13 +246,11 @@ static void fb_pan(fbtk_widget_t *widget,
/* redraw newly exposed area */
bwidget->scrolly += bwidget->pany;
- fb_queue_redraw(widget, 0, height - bwidget->pany, width,
- height);
+ fb_queue_redraw(widget, 0, height - bwidget->pany, width, height);
}
if (bwidget->panx < 0) {
/* pan left by less then viewport width */
-
srcbox.x0 = x;
srcbox.y0 = y;
srcbox.x1 = srcbox.x0 + width + bwidget->panx;
@@ -242,8 +286,7 @@ static void fb_pan(fbtk_widget_t *widget,
/* redraw newly exposed area */
bwidget->scrollx += bwidget->panx;
- fb_queue_redraw(widget, width - bwidget->panx, 0, width,
- height);
+ fb_queue_redraw(widget, width - bwidget->panx, 0, width, height);
}
@@ -252,101 +295,110 @@ static void fb_pan(fbtk_widget_t *widget,
bwidget->pany = 0;
}
-static void fb_redraw(fbtk_widget_t *widget,
- struct browser_widget_s *bwidget,
- struct browser_window *bw)
+static void
+fb_redraw(fbtk_widget_t *widget,
+ struct browser_widget_s *bwidget,
+ struct browser_window *bw)
{
- int x;
- int y;
- int width;
- int height;
+ int x;
+ int y;
+ int width;
+ int height;
+ if (bw->current_content == NULL)
+ return;
- LOG(("redraw box %d,%d to %d,%d",bwidget->redraw_box.x0,bwidget->redraw_box.y0, bwidget->redraw_box.x1, bwidget->redraw_box.y1));
+ LOG(("%d,%d to %d,%d",
+ bwidget->redraw_box.x0,
+ bwidget->redraw_box.y0,
+ bwidget->redraw_box.x1,
+ bwidget->redraw_box.y1));
- height = fbtk_get_height(widget);
- width = fbtk_get_width(widget);
- x = fbtk_get_x(widget);
- y = fbtk_get_y(widget);
+ height = fbtk_get_height(widget);
+ width = fbtk_get_width(widget);
+ x = fbtk_get_absx(widget);
+ y = fbtk_get_absy(widget);
- /* adjust clipping co-ordinates according to window location */
- bwidget->redraw_box.y0 += y;
- bwidget->redraw_box.y1 += y;
- bwidget->redraw_box.x0 += x;
- bwidget->redraw_box.x1 += x;
+ /* adjust clipping co-ordinates according to window location */
+ bwidget->redraw_box.y0 += y;
+ bwidget->redraw_box.y1 += y;
+ bwidget->redraw_box.x0 += x;
+ bwidget->redraw_box.x1 += x;
- nsfb_claim(fbtk_get_nsfb(widget), &bwidget->redraw_box);
+ nsfb_claim(fbtk_get_nsfb(widget), &bwidget->redraw_box);
- /* redraw bounding box is relative to window */
+ /* redraw bounding box is relative to window */
current_redraw_browser = bw;
- content_redraw(bw->current_content,
- x - bwidget->scrollx, y - bwidget->scrolly,
- width, height,
- bwidget->redraw_box.x0, bwidget->redraw_box.y0,
- bwidget->redraw_box.x1, bwidget->redraw_box.y1,
- bw->scale, 0xFFFFFF);
+ content_redraw(bw->current_content,
+ x - bwidget->scrollx, y - bwidget->scrolly,
+ width, height,
+ bwidget->redraw_box.x0, bwidget->redraw_box.y0,
+ bwidget->redraw_box.x1, bwidget->redraw_box.y1,
+ bw->scale, 0xFFFFFF);
current_redraw_browser = NULL;
- nsfb_update(fbtk_get_nsfb(widget), &bwidget->redraw_box);
+ nsfb_update(fbtk_get_nsfb(widget), &bwidget->redraw_box);
- bwidget->redraw_box.y0 = bwidget->redraw_box.x0 = INT_MAX;
- bwidget->redraw_box.y1 = bwidget->redraw_box.x1 = -(INT_MAX);
- bwidget->redraw_required = false;
+ bwidget->redraw_box.y0 = bwidget->redraw_box.x0 = INT_MAX;
+ bwidget->redraw_box.y1 = bwidget->redraw_box.x1 = INT_MIN;
+ bwidget->redraw_required = false;
}
static int
fb_browser_window_redraw(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct gui_window *gw = cbi->context;
- struct browser_widget_s *bwidget;
-
- bwidget = fbtk_get_userpw(widget);
- if (bwidget == NULL) {
- LOG(("browser widget from widget %p was null", widget));
- return -1;
- }
+ struct gui_window *gw = cbi->context;
+ struct browser_widget_s *bwidget;
- if (bwidget->pan_required) {
- int pos;
- fb_pan(widget, bwidget, gw->bw);
- pos = (bwidget->scrollx * 100) / content_get_width(gw->bw->current_content);
- fbtk_set_scroll_pos(gw->hscroll, pos);
- pos = (bwidget->scrolly * 100) / content_get_height(gw->bw->current_content);
- fbtk_set_scroll_pos(gw->vscroll, pos);
+ bwidget = fbtk_get_userpw(widget);
+ if (bwidget == NULL) {
+ LOG(("browser widget from widget %p was null", widget));
+ return -1;
+ }
- }
+ if (bwidget->pan_required) {
+ fb_pan(widget, bwidget, gw->bw);
+ }
- if (bwidget->redraw_required) {
- fb_redraw(widget, bwidget, gw->bw);
- }
- return 0;
+ if (bwidget->redraw_required) {
+ fb_redraw(widget, bwidget, gw->bw);
+ } else {
+ bwidget->redraw_box.x0 = 0;
+ bwidget->redraw_box.y0 = 0;
+ bwidget->redraw_box.x1 = fbtk_get_width(widget);
+ bwidget->redraw_box.y1 = fbtk_get_height(widget);
+ fb_redraw(widget, bwidget, gw->bw);
+ }
+ return 0;
}
+
static const char *fename;
static int febpp;
static int fewidth;
static int feheight;
static const char *feurl;
-static bool process_cmdline(int argc, char** argv)
+static bool
+process_cmdline(int argc, char** argv)
{
int opt;
- LOG(("argc %d, argv %p", argc, argv));
+ LOG(("argc %d, argv %p", argc, argv));
fename = "sdl";
febpp = 32;
- if ((option_window_width != 0) && (option_window_height != 0)) {
- fewidth = option_window_width;
- feheight = option_window_height;
- } else {
- fewidth = 800;
- feheight = 600;
- }
+ if ((option_window_width != 0) && (option_window_height != 0)) {
+ fewidth = option_window_width;
+ feheight = option_window_height;
+ } else {
+ fewidth = 800;
+ feheight = 600;
+ }
- if (option_homepage_url != NULL && option_homepage_url[0] != '\0')
- feurl = option_homepage_url;
+ if (option_homepage_url != NULL && option_homepage_url[0] != '\0')
+ feurl = option_homepage_url;
else
feurl = NETSURF_HOMEPAGE;
@@ -370,9 +422,9 @@ static bool process_cmdline(int argc, char** argv)
break;
default:
- fprintf(stderr,
+ fprintf(stderr,
"Usage: %s [-f frontend] [-b bpp] url\n",
- argv[0]);
+ argv[0]);
return false;
}
}
@@ -385,10 +437,11 @@ static bool process_cmdline(int argc, char** argv)
}
-static void gui_init(int argc, char** argv)
+static void
+gui_init(int argc, char** argv)
{
char buf[PATH_MAX];
- nsfb_t *nsfb;
+ nsfb_t *nsfb;
fb_find_resource(buf, "Aliases", "./framebuffer/res/Aliases");
LOG(("Using '%s' as Aliases file", buf));
@@ -405,29 +458,32 @@ static void gui_init(int argc, char** argv)
fb_find_resource(buf, "quirks.css", "./framebuffer/res/quirks.css");
quirks_stylesheet_url = path_to_url(buf);
- if (process_cmdline(argc,argv) != true)
+ if (process_cmdline(argc,argv) != true)
die("unable to process command line.\n");
- nsfb = framebuffer_initialise(fename, fewidth, feheight, febpp);
- if (nsfb == NULL)
- die("Unable to initialise framebuffer");
+ nsfb = framebuffer_initialise(fename, fewidth, feheight, febpp);
+ if (nsfb == NULL)
+ die("Unable to initialise framebuffer");
+
+ framebuffer_set_cursor(&pointer_image);
- framebuffer_set_cursor(&pointer_image);
+ if (fb_font_init() == false)
+ die("Unable to initialise the font system");
- if (fb_font_init() == false)
- die("Unable to initialise the font system");
+ fbtk = fbtk_init(nsfb);
- fbtk = fbtk_init(nsfb);
+ fbtk_enable_oskb(fbtk);
}
/** Entry point from OS.
*
- * /param argc The number of arguments in the string vector.
+ * /param argc The number of arguments in the string vector.
* /param argv The argument string vector.
* /return The return code to the OS
*/
-int main(int argc, char** argv)
+int
+main(int argc, char** argv)
{
struct browser_window *bw;
char options[PATH_MAX];
@@ -443,7 +499,7 @@ int main(int argc, char** argv)
gui_init(argc, argv);
- LOG(("calling browser_window_create"));
+ LOG(("calling browser_window_create"));
bw = browser_window_create(feurl, 0, 0, true, false);
netsurf_main_loop();
@@ -456,42 +512,45 @@ int main(int argc, char** argv)
}
-void gui_multitask(void)
+void
+gui_multitask(void)
{
- // LOG(("gui_multitask"));
+ /* LOG(("gui_multitask")); */
}
-void gui_poll(bool active)
+void
+gui_poll(bool active)
{
- nsfb_event_t event;
- int timeout; /* timeout in miliseconds */
+ nsfb_event_t event;
+ int timeout; /* timeout in miliseconds */
/* run the scheduler and discover how long to wait for the next event */
timeout = schedule_run();
- /* if active do not wait for event, return immediately */
+ /* if active do not wait for event, return immediately */
if (active)
- timeout = 0;
+ timeout = 0;
- /* if redraws are pending do not wait for event, return immediately */
- if (fbtk_redraw_pending(fbtk))
- timeout = 0;
+ /* if redraws are pending do not wait for event, return immediately */
+ if (fbtk_get_redraw_pending(fbtk))
+ timeout = 0;
- if (fbtk_event(fbtk, &event, timeout)) {
- if ((event.type == NSFB_EVENT_CONTROL) &&
- (event.value.controlcode == NSFB_CONTROL_QUIT))
- netsurf_quit = true;
- }
+ if (fbtk_event(fbtk, &event, timeout)) {
+ if ((event.type == NSFB_EVENT_CONTROL) &&
+ (event.value.controlcode == NSFB_CONTROL_QUIT))
+ netsurf_quit = true;
+ }
- fbtk_redraw(fbtk);
+ fbtk_redraw(fbtk);
}
-void gui_quit(void)
+void
+gui_quit(void)
{
- LOG(("gui_quit"));
- framebuffer_finalise();
+ LOG(("gui_quit"));
+ framebuffer_finalise();
/* We don't care if this fails as we're about to exit, anyway */
hubbub_finalise(ns_realloc, NULL);
@@ -501,174 +560,174 @@ void gui_quit(void)
static int
fb_browser_window_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct browser_window *bw = cbi->context;
- struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
+ struct gui_window *gw = cbi->context;
+ struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
- if (cbi->event->type != NSFB_EVENT_KEY_DOWN &&
+ if (cbi->event->type != NSFB_EVENT_KEY_DOWN &&
cbi->event->type != NSFB_EVENT_KEY_UP)
- return 0;
-
- LOG(("browser window clicked at %d,%d",cbi->x,cbi->y));
-
- switch (cbi->event->type) {
- case NSFB_EVENT_KEY_DOWN:
- switch (cbi->event->value.keycode) {
- case NSFB_KEY_MOUSE_1:
- browser_window_mouse_click(bw,
- BROWSER_MOUSE_PRESS_1,
- cbi->x + bwidget->scrollx,
- cbi->y + bwidget->scrolly);
- break;
-
- case NSFB_KEY_MOUSE_3:
- browser_window_mouse_click(bw,
- BROWSER_MOUSE_PRESS_2,
- cbi->x + bwidget->scrollx,
- cbi->y + bwidget->scrolly);
- break;
-
- case NSFB_KEY_MOUSE_4:
- /* scroll up */
- fb_window_scroll(widget, 0, -100);
- break;
-
- case NSFB_KEY_MOUSE_5:
- /* scroll down */
- fb_window_scroll(widget, 0, 100);
- break;
-
- default:
- break;
-
- }
+ return 0;
+
+ LOG(("browser window clicked at %d,%d", cbi->x, cbi->y));
+
+ switch (cbi->event->type) {
+ case NSFB_EVENT_KEY_DOWN:
+ switch (cbi->event->value.keycode) {
+ case NSFB_KEY_MOUSE_1:
+ browser_window_mouse_click(gw->bw,
+ BROWSER_MOUSE_PRESS_1,
+ cbi->x + bwidget->scrollx,
+ cbi->y + bwidget->scrolly);
+ break;
+
+ case NSFB_KEY_MOUSE_3:
+ browser_window_mouse_click(gw->bw,
+ BROWSER_MOUSE_PRESS_2,
+ cbi->x + bwidget->scrollx,
+ cbi->y + bwidget->scrolly);
+ break;
+
+ case NSFB_KEY_MOUSE_4:
+ /* scroll up */
+ widget_scroll_y(gw, -100, false);
+ break;
+
+ case NSFB_KEY_MOUSE_5:
+ /* scroll down */
+ widget_scroll_y(gw, 100, false);
+ break;
+
+ default:
+ break;
+
+ }
break;
- case NSFB_EVENT_KEY_UP:
- switch (cbi->event->value.keycode) {
- case NSFB_KEY_MOUSE_1:
- browser_window_mouse_click(bw,
- BROWSER_MOUSE_CLICK_1,
- cbi->x + bwidget->scrollx,
- cbi->y + bwidget->scrolly);
- break;
-
- case NSFB_KEY_MOUSE_3:
- browser_window_mouse_click(bw,
- BROWSER_MOUSE_CLICK_2,
- cbi->x + bwidget->scrollx,
- cbi->y + bwidget->scrolly);
- break;
-
- default:
- break;
-
- }
+ case NSFB_EVENT_KEY_UP:
+ switch (cbi->event->value.keycode) {
+ case NSFB_KEY_MOUSE_1:
+ browser_window_mouse_click(gw->bw,
+ BROWSER_MOUSE_CLICK_1,
+ cbi->x + bwidget->scrollx,
+ cbi->y + bwidget->scrolly);
+ break;
+
+ case NSFB_KEY_MOUSE_3:
+ browser_window_mouse_click(gw->bw,
+ BROWSER_MOUSE_CLICK_2,
+ cbi->x + bwidget->scrollx,
+ cbi->y + bwidget->scrolly);
+ break;
+
+ default:
+ break;
+
+ }
break;
- default:
- break;
+ default:
+ break;
- }
- return 1;
+ }
+ return 1;
}
/* called back when movement in browser window */
static int
fb_browser_window_move(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct browser_window *bw = cbi->context;
- struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
+ struct gui_window *gw = cbi->context;
+ struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
- browser_window_mouse_track(bw,
- 0,
- cbi->x + bwidget->scrollx,
- cbi->y + bwidget->scrolly);
+ browser_window_mouse_track(gw->bw,
+ 0,
+ cbi->x + bwidget->scrollx,
+ cbi->y + bwidget->scrolly);
- return 0;
+ return 0;
}
static int
fb_browser_window_input(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct gui_window *gw = cbi->context;
- int res = 0;
- static uint8_t modifier = 0;
- int ucs4 = -1;
-
- LOG(("got value %d", cbi->event->value.keycode));
-
- switch (cbi->event->type) {
- case NSFB_EVENT_KEY_DOWN:
- switch (cbi->event->value.keycode) {
-
- case NSFB_KEY_PAGEUP:
- if (browser_window_key_press(gw->bw, KEY_PAGE_UP) == false)
- fb_window_scroll(gw->browser, 0, -fbtk_get_height(gw->browser));
- break;
-
- case NSFB_KEY_PAGEDOWN:
- if (browser_window_key_press(gw->bw, KEY_PAGE_DOWN) == false)
- fb_window_scroll(gw->browser, 0, fbtk_get_height(gw->browser));
- break;
-
- case NSFB_KEY_RIGHT:
- if (browser_window_key_press(gw->bw, KEY_RIGHT) == false)
- fb_window_scroll(gw->browser, 100, 0);
- break;
-
- case NSFB_KEY_LEFT:
- if (browser_window_key_press(gw->bw, KEY_LEFT) == false)
- fb_window_scroll(gw->browser, -100, 0);
- break;
-
- case NSFB_KEY_UP:
- if (browser_window_key_press(gw->bw, KEY_UP) == false)
- fb_window_scroll(gw->browser, 0, -100);
- break;
-
- case NSFB_KEY_DOWN:
- if (browser_window_key_press(gw->bw, KEY_DOWN) == false)
- fb_window_scroll(gw->browser, 0, 100);
- break;
-
- case NSFB_KEY_RSHIFT:
- modifier |= 1;
- break;
-
- case NSFB_KEY_LSHIFT:
- modifier |= 1<<1;
- break;
-
- default:
- ucs4 = fbtk_keycode_to_ucs4(cbi->event->value.keycode,
+ struct gui_window *gw = cbi->context;
+ int res = 0;
+ static uint8_t modifier = 0;
+ int ucs4 = -1;
+
+ LOG(("got value %d", cbi->event->value.keycode));
+
+ switch (cbi->event->type) {
+ case NSFB_EVENT_KEY_DOWN:
+ switch (cbi->event->value.keycode) {
+
+ case NSFB_KEY_PAGEUP:
+ if (browser_window_key_press(gw->bw, KEY_PAGE_UP) == false)
+ widget_scroll_y(gw, -fbtk_get_height(gw->browser), false);
+ break;
+
+ case NSFB_KEY_PAGEDOWN:
+ if (browser_window_key_press(gw->bw, KEY_PAGE_DOWN) == false)
+ widget_scroll_y(gw, fbtk_get_height(gw->browser), false);
+ break;
+
+ case NSFB_KEY_RIGHT:
+ if (browser_window_key_press(gw->bw, KEY_RIGHT) == false)
+ widget_scroll_x(gw, 100, false);
+ break;
+
+ case NSFB_KEY_LEFT:
+ if (browser_window_key_press(gw->bw, KEY_LEFT) == false)
+ widget_scroll_x(gw, -100, false);
+ break;
+
+ case NSFB_KEY_UP:
+ if (browser_window_key_press(gw->bw, KEY_UP) == false)
+ widget_scroll_y(gw, -100, false);
+ break;
+
+ case NSFB_KEY_DOWN:
+ if (browser_window_key_press(gw->bw, KEY_DOWN) == false)
+ widget_scroll_y(gw, 100, false);
+ break;
+
+ case NSFB_KEY_RSHIFT:
+ modifier |= 1;
+ break;
+
+ case NSFB_KEY_LSHIFT:
+ modifier |= 1<<1;
+ break;
+
+ default:
+ ucs4 = fbtk_keycode_to_ucs4(cbi->event->value.keycode,
modifier);
- if (ucs4 != -1)
- res = browser_window_key_press(gw->bw, ucs4);
- break;
- }
- break;
+ if (ucs4 != -1)
+ res = browser_window_key_press(gw->bw, ucs4);
+ break;
+ }
+ break;
- case NSFB_EVENT_KEY_UP:
- switch (cbi->event->value.keycode) {
- case NSFB_KEY_RSHIFT:
- modifier &= ~1;
- break;
+ case NSFB_EVENT_KEY_UP:
+ switch (cbi->event->value.keycode) {
+ case NSFB_KEY_RSHIFT:
+ modifier &= ~1;
+ break;
- case NSFB_KEY_LSHIFT:
- modifier &= ~(1<<1);
- break;
+ case NSFB_KEY_LSHIFT:
+ modifier &= ~(1<<1);
+ break;
- default:
- break;
- }
- break;
+ default:
+ break;
+ }
+ break;
- default:
- break;
- }
+ default:
+ break;
+ }
- return 0;
+ return 0;
}
static void
@@ -686,79 +745,91 @@ fb_update_back_forward(struct gui_window *gw)
/* left icon click routine */
static int
-fb_leftarrow_click(fbtk_widget_t *widget,fbtk_callback_info *cbi)
+fb_leftarrow_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct gui_window *gw = cbi->context;
- struct browser_window *bw = gw->bw;
+ struct gui_window *gw = cbi->context;
+ struct browser_window *bw = gw->bw;
- if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
- return 0;
+ if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
- if (history_back_available(bw->history))
- history_back(bw, bw->history);
+ if (history_back_available(bw->history))
+ history_back(bw, bw->history);
- fb_update_back_forward(gw);
+ fb_update_back_forward(gw);
- return 1;
+ return 1;
}
/* right arrow icon click routine */
static int
-fb_rightarrow_click(fbtk_widget_t *widget,fbtk_callback_info *cbi)
+fb_rightarrow_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct gui_window *gw = cbi->context;
- struct browser_window *bw = gw->bw;
+ struct gui_window *gw = cbi->context;
+ struct browser_window *bw = gw->bw;
- if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
- return 0;
+ if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
- if (history_forward_available(bw->history))
- history_forward(bw, bw->history);
+ if (history_forward_available(bw->history))
+ history_forward(bw, bw->history);
- fb_update_back_forward(gw);
- return 1;
+ fb_update_back_forward(gw);
+ return 1;
}
/* reload icon click routine */
static int
-fb_reload_click(fbtk_widget_t *widget,fbtk_callback_info *cbi)
+fb_reload_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct browser_window *bw = cbi->context;
+ struct browser_window *bw = cbi->context;
- if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
- return 0;
+ if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
- browser_window_reload(bw, true);
- return 1;
+ browser_window_reload(bw, true);
+ return 1;
}
/* stop icon click routine */
static int
-fb_stop_click(fbtk_widget_t *widget,fbtk_callback_info *cbi)
+fb_stop_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct browser_window *bw = cbi->context;
+ struct browser_window *bw = cbi->context;
- if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
- return 0;
+ if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
browser_window_stop(bw);
- return 0;
+ return 0;
+}
+
+static int
+fb_osk_click(fbtk_widget_t *widget, fbtk_callback_info *cbi)
+{
+
+ if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
+ map_osk();
+
+ return 0;
}
static int
fb_scroll_callback(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- struct gui_window *gw = cbi->context;
+ struct gui_window *gw = cbi->context;
switch (cbi->type) {
case FBTK_CBT_SCROLLY:
- fb_window_scroll(gw->browser, 0, 100 * cbi->y);
+ widget_scroll_y(gw, cbi->y, true);
break;
-
+
case FBTK_CBT_SCROLLX:
- fb_window_scroll(gw->browser, 100 * cbi->x, 0);
+ widget_scroll_x(gw, cbi->x, true);
break;
default:
@@ -770,470 +841,554 @@ fb_scroll_callback(fbtk_widget_t *widget, fbtk_callback_info *cbi)
static int
fb_url_enter(void *pw, char *text)
{
- struct browser_window *bw = pw;
- browser_window_go(bw, text, 0, true);
- return 0;
+ struct browser_window *bw = pw;
+ browser_window_go(bw, text, 0, true);
+ return 0;
}
static int
fb_url_move(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- framebuffer_set_cursor(&caret_image);
- return 0;
+ framebuffer_set_cursor(&caret_image);
+ return 0;
}
static int
set_ptr_default_move(fbtk_widget_t *widget, fbtk_callback_info *cbi)
{
- framebuffer_set_cursor(&pointer_image);
- return 0;
+ framebuffer_set_cursor(&pointer_image);
+ return 0;
}
-struct gui_window *
-gui_create_browser_window(struct browser_window *bw,
- struct browser_window *clone,
- bool new_tab)
+static int
+fb_localhistory_btn_clik(fbtk_widget_t *widget, fbtk_callback_info *cbi)
+{
+ struct gui_window *gw = cbi->context;
+
+ if (cbi->event->type != NSFB_EVENT_KEY_DOWN)
+ return 0;
+
+ fb_localhistory_map(gw->localhistory);
+
+ return 0;
+}
+
+
+
+static void
+create_toolbar(struct gui_window *gw, int toolbar_height)
+{
+ fbtk_widget_t *toolbar;
+ fbtk_widget_t *widget;
+ int url_bar_height = 0;
+ int xpos = 0;
+ int spacing_width = 0;
+
+ spacing_width = 2;
+
+ xpos = spacing_width;
+
+ url_bar_height = toolbar_height - 6;
+
+ toolbar = fbtk_create_window(gw->window, 0, 0, 0, toolbar_height, FB_FRAME_COLOUR);
+ fbtk_set_handler(toolbar, FBTK_CBT_POINTERENTER, set_ptr_default_move, NULL);
+
+ /* back button */
+ gw->back = fbtk_create_button(toolbar, xpos, spacing_width, left_arrow.width, -spacing_width, FB_FRAME_COLOUR, &left_arrow, fb_leftarrow_click, gw);
+ xpos += left_arrow.width + spacing_width;
+
+ /* history window */
+ widget = fbtk_create_button(toolbar,
+ xpos,
+ spacing_width,
+ history_image.width,
+ -spacing_width,
+ FB_FRAME_COLOUR,
+ &history_image,
+ fb_localhistory_btn_clik,
+ gw);
+ xpos += fbtk_get_width(widget) + spacing_width;
+
+ /* forward button */
+ gw->forward = fbtk_create_button(toolbar,
+ xpos,
+ spacing_width,
+ right_arrow.width,
+ -spacing_width,
+ FB_FRAME_COLOUR,
+ &right_arrow,
+ fb_rightarrow_click,
+ gw);
+ xpos += right_arrow.width + spacing_width;
+
+ /* stop button */
+ widget = fbtk_create_button(toolbar,
+ xpos,
+ spacing_width,
+ stop_image.width,
+ -spacing_width,
+ FB_FRAME_COLOUR,
+ &stop_image,
+ fb_stop_click,
+ gw->bw);
+ xpos += stop_image.width + spacing_width;
+
+ /* reload button */
+ widget = fbtk_create_button(toolbar,
+ xpos,
+ spacing_width,
+ reload.width,
+ -spacing_width,
+ FB_FRAME_COLOUR,
+ &reload,
+ fb_reload_click,
+ gw->bw);
+ xpos += reload.width + spacing_width;
+
+ /* url widget */
+ xpos += spacing_width; /* extra spacing for url bar */
+ gw->url = fbtk_create_writable_text(toolbar,
+ xpos,
+ spacing_width,
+ -(spacing_width + throbber0.width),
+ -spacing_width,
+ FB_COLOUR_WHITE,
+ FB_COLOUR_BLACK,
+ true,
+ fb_url_enter,
+ gw->bw);
+ fbtk_set_handler(gw->url, FBTK_CBT_POINTERENTER, fb_url_move, gw->bw);
+ xpos += fbtk_get_width(gw->url) + spacing_width;
+
+ /* throbber */
+ gw->throbber = fbtk_create_bitmap(toolbar,
+ xpos,
+ spacing_width,
+ throbber0.width,
+ -spacing_width,
+ FB_FRAME_COLOUR, &throbber0);
+
+ fbtk_set_mapping(toolbar, true);
+
+}
+
+static void
+create_normal_browser_window(struct gui_window *gw,
+ int furniture_width,
+ int toolbar_height)
{
- struct gui_window *gw;
- struct browser_widget_s *browser_widget;
- fbtk_widget_t *widget;
- int toolbar_height = 0;
- int furniture_width = 0;
- int spacing_width = 0;
- int url_bar_height = 0;
- int statusbar_width = 0;
- int xpos = 0;
+ fbtk_widget_t *widget;
+ int statusbar_width = 0;
- gw = calloc(1, sizeof(struct gui_window));
+ gw->window = fbtk_create_window(fbtk, 0, 0, 0, 0, 0);
- if (gw == NULL)
- return NULL;
+ statusbar_width = option_toolbar_status_width *
+ fbtk_get_width(gw->window) / 10000;
- /* seems we need to associate the gui window with the underlying
- * browser window
- */
- gw->bw = bw;
+ LOG(("Normal window"));
- switch(bw->browser_window_type) {
- case BROWSER_WINDOW_NORMAL:
- gw->window = fbtk_create_window(fbtk, 0, 0, 0, 0);
-
- /* area and widget dimensions */
- toolbar_height = 30;
- furniture_width = 18;
- spacing_width = 2;
- url_bar_height = 24;
-
- statusbar_width = option_toolbar_status_width *
- fbtk_get_width(gw->window) / 10000;
-
- xpos = spacing_width;
-
- LOG(("Normal window"));
-
- /* fill toolbar background */
- widget = fbtk_create_fill(gw->window,
- 0, 0, 0, toolbar_height,
- FB_FRAME_COLOUR);
- fbtk_set_handler(widget, FBTK_CBT_POINTERMOVE, set_ptr_default_move, bw);
-
- /* back button */
- gw->back = fbtk_create_button(gw->window,
- xpos, (toolbar_height - left_arrow.height) / 2,
- FB_FRAME_COLOUR, &left_arrow,
- fb_leftarrow_click, gw);
- xpos += left_arrow.width + spacing_width;
-
- /* forward button */
- gw->forward = fbtk_create_button(gw->window,
- xpos, (toolbar_height - right_arrow.height) / 2,
- FB_FRAME_COLOUR, &right_arrow,
- fb_rightarrow_click, gw);
- xpos += right_arrow.width + spacing_width;
-
- /* reload button */
- widget = fbtk_create_button(gw->window,
- xpos, (toolbar_height - stop_image.height) / 2,
- FB_FRAME_COLOUR, &stop_image,
- fb_stop_click, bw);
- xpos += stop_image.width + spacing_width;
-
- /* reload button */
- widget = fbtk_create_button(gw->window,
- xpos, (toolbar_height - reload.height) / 2,
- FB_FRAME_COLOUR, &reload,
- fb_reload_click, bw);
- xpos += reload.width + spacing_width;
-
- /* url widget */
- xpos += 1; /* extra spacing for url bar */
- gw->url = fbtk_create_writable_text(gw->window,
- xpos, (toolbar_height - url_bar_height) / 2,
- fbtk_get_width(gw->window) - xpos -
- spacing_width - spacing_width -
- throbber0.width,
- url_bar_height,
- FB_COLOUR_WHITE, FB_COLOUR_BLACK,
- true, fb_url_enter, bw);
- fbtk_set_handler(gw->url, FBTK_CBT_POINTERMOVE, fb_url_move, bw);
- xpos += fbtk_get_width(gw->window) - xpos -
- spacing_width - throbber0.width;
-
- /* throbber */
- gw->throbber = fbtk_create_bitmap(gw->window,
- xpos, (toolbar_height - throbber0.height) / 2,
- FB_FRAME_COLOUR, &throbber0);
-
-
-
- /* status bar */
- xpos = 0;
- gw->status = fbtk_create_text(gw->window,
- xpos,
- fbtk_get_height(gw->window) - furniture_width,
- statusbar_width, furniture_width,
- FB_FRAME_COLOUR, FB_COLOUR_BLACK,
- false);
- fbtk_set_handler(gw->status, FBTK_CBT_POINTERMOVE, set_ptr_default_move, bw);
-
- /* create horizontal scrollbar */
- gw->hscroll = fbtk_create_hscroll(gw->window,
- statusbar_width,
- fbtk_get_height(gw->window) - furniture_width,
- fbtk_get_width(gw->window) - statusbar_width - furniture_width,
- furniture_width,
- FB_SCROLL_COLOUR,
- FB_FRAME_COLOUR,
- fb_scroll_callback,
- gw);
-
- /* fill bottom right area */
- widget = fbtk_create_fill(gw->window,
- fbtk_get_width(gw->window) - furniture_width,
- fbtk_get_height(gw->window) - furniture_width,
- furniture_width,
- furniture_width,
- FB_FRAME_COLOUR);
- fbtk_set_handler(widget, FBTK_CBT_POINTERMOVE, set_ptr_default_move, bw);
+ create_toolbar(gw, toolbar_height);
- /* create vertical scrollbar */
- gw->vscroll = fbtk_create_vscroll(gw->window,
- fbtk_get_width(gw->window) - furniture_width,
- toolbar_height,
- furniture_width,
- fbtk_get_height(gw->window) - toolbar_height - furniture_width,
- FB_SCROLL_COLOUR,
- FB_FRAME_COLOUR,
- fb_scroll_callback,
- gw);
+ /* status bar */
+ gw->status = fbtk_create_text(gw->window,
+ 0,
+ fbtk_get_height(gw->window) - furniture_width,
+ statusbar_width, furniture_width,
+ FB_FRAME_COLOUR, FB_COLOUR_BLACK,
+ false);
+ fbtk_set_handler(gw->status, FBTK_CBT_POINTERENTER, set_ptr_default_move, NULL);
+ LOG(("status bar %p at %d,%d", gw->status, fbtk_get_absx(gw->status), fbtk_get_absy(gw->status)));
- break;
+ /* create horizontal scrollbar */
+ gw->hscroll = fbtk_create_hscroll(gw->window,
+ statusbar_width,
+ fbtk_get_height(gw->window) - furniture_width,
+ fbtk_get_width(gw->window) - statusbar_width - furniture_width,
+ furniture_width,
+ FB_SCROLL_COLOUR,
+ FB_FRAME_COLOUR,
+ fb_scroll_callback,
+ gw);
+
+ /* fill bottom right area */
+
+ if (option_fb_osk == true) {
+ widget = fbtk_create_text_button(gw->window,
+ fbtk_get_width(gw->window) - furniture_width,
+ fbtk_get_height(gw->window) - furniture_width,
+ furniture_width,
+ furniture_width,
+ FB_FRAME_COLOUR, FB_COLOUR_BLACK,
+ fb_osk_click,
+ NULL);
+ fbtk_set_text(widget, "\xe2\x8c\xa8");
+ } else {
+ widget = fbtk_create_fill(gw->window,
+ fbtk_get_width(gw->window) - furniture_width,
+ fbtk_get_height(gw->window) - furniture_width,
+ furniture_width,
+ furniture_width,
+ FB_FRAME_COLOUR);
+
+ fbtk_set_handler(widget, FBTK_CBT_POINTERENTER, set_ptr_default_move, NULL);
+ }
- case BROWSER_WINDOW_FRAME:
- gw->window = fbtk_create_window(bw->parent->window->window, 0, 0, 0, 0);
- LOG(("create frame"));
- break;
+ /* create vertical scrollbar */
+ gw->vscroll = fbtk_create_vscroll(gw->window,
+ fbtk_get_width(gw->window) - furniture_width,
+ toolbar_height,
+ furniture_width,
+ fbtk_get_height(gw->window) - toolbar_height - furniture_width,
+ FB_SCROLL_COLOUR,
+ FB_FRAME_COLOUR,
+ fb_scroll_callback,
+ gw);
- default:
- gw->window = fbtk_create_window(bw->parent->window->window, 0, 0, 0, 0);
- LOG(("unhandled type"));
- }
+}
- browser_widget = calloc(1, sizeof(struct browser_widget_s));
+static void
+create_browser_widget(struct gui_window *gw, int toolbar_height, int furniture_width)
+{
+ struct browser_widget_s *browser_widget;
+ browser_widget = calloc(1, sizeof(struct browser_widget_s));
- gw->browser = fbtk_create_user(gw->window, 0, toolbar_height, -furniture_width, - (furniture_width + toolbar_height), browser_widget);
+ gw->browser = fbtk_create_user(gw->window,
+ 0,
+ toolbar_height,
+ -furniture_width,
+ -furniture_width,
+ browser_widget);
fbtk_set_handler(gw->browser, FBTK_CBT_REDRAW, fb_browser_window_redraw, gw);
fbtk_set_handler(gw->browser, FBTK_CBT_INPUT, fb_browser_window_input, gw);
- fbtk_set_handler(gw->browser, FBTK_CBT_CLICK, fb_browser_window_click, bw);
- fbtk_set_handler(gw->browser, FBTK_CBT_POINTERMOVE, fb_browser_window_move, bw);
-
- return gw;
+ fbtk_set_handler(gw->browser, FBTK_CBT_CLICK, fb_browser_window_click, gw);
+ fbtk_set_handler(gw->browser, FBTK_CBT_POINTERMOVE, fb_browser_window_move, gw);
}
-void gui_window_destroy(struct gui_window *gw)
+struct gui_window *
+gui_create_browser_window(struct browser_window *bw,
+ struct browser_window *clone,
+ bool new_tab)
{
- fbtk_destroy_widget(gw->window);
+ struct gui_window *gw;
+
+ gw = calloc(1, sizeof(struct gui_window));
+
+ if (gw == NULL)
+ return NULL;
+
+ /* seems we need to associate the gui window with the underlying
+ * browser window
+ */
+ gw->bw = bw;
+
- free(gw);
+ switch(bw->browser_window_type) {
+ case BROWSER_WINDOW_NORMAL:
+ create_normal_browser_window(gw, option_fb_furniture_size, option_fb_toolbar_size);
+ gw->localhistory = fb_create_localhistory(bw, fbtk, option_fb_furniture_size);
+ create_browser_widget(gw, option_fb_toolbar_size, option_fb_furniture_size);
+
+ /* map and request redraw of gui window */
+ fbtk_set_mapping(gw->window, true);
+
+ break;
+
+ case BROWSER_WINDOW_FRAME:
+ gw->window = fbtk_create_window(bw->parent->window->window, 0, 0, 0, 0, 0);
+ create_browser_widget(gw, 0, 0);
+ LOG(("create frame"));
+ break;
+
+ default:
+ gw->window = fbtk_create_window(bw->parent->window->window, 0, 0, 0, 0, 0);
+ create_browser_widget(gw, 0, 0);
+ LOG(("unhandled type"));
+ }
+ return gw;
}
-void gui_window_set_title(struct gui_window *g, const char *title)
+void
+gui_window_destroy(struct gui_window *gw)
{
- LOG(("%p, %s", g, title));
-}
+ fbtk_destroy_widget(gw->window);
+ free(gw);
-void fb_window_scroll(struct fbtk_widget_s *browser, int x, int y)
-{
- struct browser_widget_s *bwidget = fbtk_get_userpw(browser);
- LOG(("window scroll"));
- bwidget->panx += x;
- bwidget->pany += y;
- bwidget->pan_required = true;
+}
- fbtk_request_redraw(browser);
+void
+gui_window_set_title(struct gui_window *g, const char *title)
+{
+ LOG(("%p, %s", g, title));
}
-void gui_window_redraw(struct gui_window *g, int x0, int y0, int x1, int y1)
+void
+gui_window_redraw(struct gui_window *g, int x0, int y0, int x1, int y1)
{
- fb_queue_redraw(g->browser, x0, y0, x1, y1);
+ fb_queue_redraw(g->browser, x0, y0, x1, y1);
}
-void gui_window_redraw_window(struct gui_window *g)
+void
+gui_window_redraw_window(struct gui_window *g)
{
- fb_queue_redraw(g->browser, 0, 0, fbtk_get_width(g->browser),fbtk_get_height(g->browser) );
+ fb_queue_redraw(g->browser, 0, 0, fbtk_get_width(g->browser), fbtk_get_height(g->browser) );
}
-void gui_window_update_box(struct gui_window *g,
- const union content_msg_data *data)
+void
+gui_window_update_box(struct gui_window *g, const union content_msg_data *data)
{
- struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
- fb_queue_redraw(g->browser,
- data->redraw.x - bwidget->scrollx,
- data->redraw.y - bwidget->scrolly,
- data->redraw.x - bwidget->scrollx +
- data->redraw.width,
- data->redraw.y - bwidget->scrolly +
- data->redraw.height);
+ struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
+ fb_queue_redraw(g->browser,
+ data->redraw.x - bwidget->scrollx,
+ data->redraw.y - bwidget->scrolly,
+ data->redraw.x - bwidget->scrollx +
+ data->redraw.width,
+ data->redraw.y - bwidget->scrolly +
+ data->redraw.height);
}
-bool gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
+bool
+gui_window_get_scroll(struct gui_window *g, int *sx, int *sy)
{
- struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
+ struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
- *sx = bwidget->scrollx;
- *sy = bwidget->scrolly;
+ *sx = bwidget->scrollx;
+ *sy = bwidget->scrolly;
- return true;
+ return true;
}
-void gui_window_set_scroll(struct gui_window *g, int sx, int sy)
+void
+gui_window_set_scroll(struct gui_window *gw, int sx, int sy)
{
- struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
+ struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
assert(bwidget);
- bwidget->panx = sx - bwidget->scrollx;
- bwidget->pany = sy - bwidget->scrolly;
-
- bwidget->pan_required = true;
-
- fbtk_request_redraw(g->browser);
+ widget_scroll_x(gw, sx, true);
+ widget_scroll_y(gw, sy, true);
}
-void gui_window_scroll_visible(struct gui_window *g, int x0, int y0,
- int x1, int y1)
+void
+gui_window_scroll_visible(struct gui_window *g, int x0, int y0,
+ int x1, int y1)
{
- LOG(("%s:(%p, %d, %d, %d, %d)", __func__, g, x0, y0, x1, y1));
+ LOG(("%s:(%p, %d, %d, %d, %d)", __func__, g, x0, y0, x1, y1));
}
-void gui_window_position_frame(struct gui_window *g, int x0, int y0,
- int x1, int y1)
+void
+gui_window_position_frame(struct gui_window *g, int x0, int y0, int x1, int y1)
{
- struct gui_window *parent;
- int px, py;
- int w, h;
- LOG(("%s: %d, %d, %d, %d", g->bw->name, x0, y0, x1, y1));
- parent = g->bw->parent->window;
+ struct gui_window *parent;
+ int px, py;
+ int w, h;
+ LOG(("%s: %d, %d, %d, %d", g->bw->name, x0, y0, x1, y1));
+ parent = g->bw->parent->window;
- if (parent->window == NULL)
- return; /* doesnt have an fbtk widget */
+ if (parent->window == NULL)
+ return; /* doesnt have an fbtk widget */
- px = fbtk_get_x(parent->browser) + x0;
- py = fbtk_get_y(parent->browser) + y0;
- w = x1 - x0;
- h = y1 - y0;
- if (w > (fbtk_get_width(parent->browser) - px))
- w = fbtk_get_width(parent->browser) - px;
+ px = fbtk_get_absx(parent->browser) + x0;
+ py = fbtk_get_absy(parent->browser) + y0;
+ w = x1 - x0;
+ h = y1 - y0;
+ if (w > (fbtk_get_width(parent->browser) - px))
+ w = fbtk_get_width(parent->browser) - px;
- if (h > (fbtk_get_height(parent->browser) - py))
- h = fbtk_get_height(parent->browser) - py;
+ if (h > (fbtk_get_height(parent->browser) - py))
+ h = fbtk_get_height(parent->browser) - py;
- fbtk_set_pos_and_size(g->window, px, py , w , h);
+ fbtk_set_pos_and_size(g->window, px, py , w , h);
- fbtk_request_redraw(parent->browser);
+ fbtk_request_redraw(parent->browser);
}
-void gui_window_get_dimensions(struct gui_window *g, int *width, int *height,
- bool scaled)
+void
+gui_window_get_dimensions(struct gui_window *g,
+ int *width,
+ int *height,
+ bool scaled)
{
- *width = fbtk_get_width(g->browser);
- *height = fbtk_get_height(g->browser);
+ *width = fbtk_get_width(g->browser);
+ *height = fbtk_get_height(g->browser);
}
-void gui_window_update_extent(struct gui_window *gw)
+void
+gui_window_update_extent(struct gui_window *gw)
{
- int pct;
- int width;
- int height;
+ fbtk_set_scroll_parameters(gw->hscroll, 0, content_get_width(gw->bw->current_content), fbtk_get_width(gw->browser), 100);
- width = content_get_width(gw->bw->current_content);
- if (width != 0) {
- pct = (fbtk_get_width(gw->browser) * 100) / width;
- fbtk_set_scroll(gw->hscroll, pct);
- }
+ fbtk_set_scroll_parameters(gw->vscroll, 0, content_get_height(gw->bw->current_content), fbtk_get_height(gw->browser), 100);
- height = content_get_height(gw->bw->current_content);
- if (height != 0) {
- pct = (fbtk_get_height(gw->browser) * 100) / height;
- fbtk_set_scroll(gw->vscroll, pct);
- }
}
-void gui_window_set_status(struct gui_window *g, const char *text)
+void
+gui_window_set_status(struct gui_window *g, const char *text)
{
- fbtk_set_text(g->status, text);
+ fbtk_set_text(g->status, text);
}
-void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
+void
+gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
{
- switch (shape) {
- case GUI_POINTER_POINT:
- framebuffer_set_cursor(&hand_image);
- break;
+ switch (shape) {
+ case GUI_POINTER_POINT:
+ framebuffer_set_cursor(&hand_image);
+ break;
- case GUI_POINTER_CARET:
- framebuffer_set_cursor(&caret_image);
- break;
+ case GUI_POINTER_CARET:
+ framebuffer_set_cursor(&caret_image);
+ break;
- case GUI_POINTER_MENU:
- framebuffer_set_cursor(&menu_image);
- break;
+ case GUI_POINTER_MENU:
+ framebuffer_set_cursor(&menu_image);
+ break;
- case GUI_POINTER_PROGRESS:
- framebuffer_set_cursor(&progress_image);
- break;
+ case GUI_POINTER_PROGRESS:
+ framebuffer_set_cursor(&progress_image);
+ break;
- default:
- framebuffer_set_cursor(&pointer_image);
- break;
- }
+ default:
+ framebuffer_set_cursor(&pointer_image);
+ break;
+ }
}
-void gui_window_hide_pointer(struct gui_window *g)
+void
+gui_window_hide_pointer(struct gui_window *g)
{
}
-void gui_window_set_url(struct gui_window *g, const char *url)
+void
+gui_window_set_url(struct gui_window *g, const char *url)
{
- fbtk_set_text(g->url, url);
+ fbtk_set_text(g->url, url);
}
static void
throbber_advance(void *pw)
{
- struct gui_window *g = pw;
- struct bitmap *image;
-
- switch (g->throbber_index) {
- case 0:
- image = &throbber1;
- g->throbber_index = 1;
- break;
-
- case 1:
- image = &throbber2;
- g->throbber_index = 2;
- break;
-
- case 2:
- image = &throbber3;
- g->throbber_index = 3;
- break;
-
- case 3:
- image = &throbber4;
- g->throbber_index = 4;
- break;
-
- case 4:
- image = &throbber5;
- g->throbber_index = 5;
- break;
-
- case 5:
- image = &throbber6;
- g->throbber_index = 6;
- break;
-
- case 6:
- image = &throbber7;
- g->throbber_index = 7;
- break;
-
- case 7:
- image = &throbber8;
- g->throbber_index = 0;
- break;
+ struct gui_window *g = pw;
+ struct bitmap *image;
+
+ switch (g->throbber_index) {
+ case 0:
+ image = &throbber1;
+ g->throbber_index = 1;
+ break;
+
+ case 1:
+ image = &throbber2;
+ g->throbber_index = 2;
+ break;
+
+ case 2:
+ image = &throbber3;
+ g->throbber_index = 3;
+ break;
+
+ case 3:
+ image = &throbber4;
+ g->throbber_index = 4;
+ break;
+
+ case 4:
+ image = &throbber5;
+ g->throbber_index = 5;
+ break;
+
+ case 5:
+ image = &throbber6;
+ g->throbber_index = 6;
+ break;
+
+ case 6:
+ image = &throbber7;
+ g->throbber_index = 7;
+ break;
+
+ case 7:
+ image = &throbber8;
+ g->throbber_index = 0;
+ break;
default:
return;
- }
+ }
- if (g->throbber_index >= 0) {
- fbtk_set_bitmap(g->throbber, image);
- schedule(10, throbber_advance, g);
- }
+ if (g->throbber_index >= 0) {
+ fbtk_set_bitmap(g->throbber, image);
+ schedule(10, throbber_advance, g);
+ }
}
-void gui_window_start_throbber(struct gui_window *g)
+void
+gui_window_start_throbber(struct gui_window *g)
{
- g->throbber_index = 0;
- schedule(10, throbber_advance, g);
+ g->throbber_index = 0;
+ schedule(10, throbber_advance, g);
}
-void gui_window_stop_throbber(struct gui_window *gw)
+void
+gui_window_stop_throbber(struct gui_window *gw)
{
- gw->throbber_index = -1;
- fbtk_set_bitmap(gw->throbber, &throbber0);
+ gw->throbber_index = -1;
+ fbtk_set_bitmap(gw->throbber, &throbber0);
- fb_update_back_forward(gw);
+ fb_update_back_forward(gw);
}
-void gui_window_place_caret(struct gui_window *g, int x, int y, int height)
+void
+gui_window_place_caret(struct gui_window *g, int x, int y, int height)
{
}
-void gui_window_remove_caret(struct gui_window *g)
+void
+gui_window_remove_caret(struct gui_window *g)
{
}
-void gui_window_new_content(struct gui_window *g)
+void
+gui_window_new_content(struct gui_window *g)
{
}
-bool gui_window_scroll_start(struct gui_window *g)
+bool
+gui_window_scroll_start(struct gui_window *g)
{
return true;
}
-bool gui_window_box_scroll_start(struct gui_window *g,
- int x0, int y0, int x1, int y1)
+bool
+gui_window_box_scroll_start(struct gui_window *g,
+ int x0, int y0, int x1, int y1)
{
return true;
}
-bool gui_window_frame_resize_start(struct gui_window *g)
+bool
+gui_window_frame_resize_start(struct gui_window *g)
{
LOG(("resize frame\n"));
return true;
}
-void
+void
gui_window_save_link(struct gui_window *g, const char *url, const char *title)
{
}
-void gui_window_set_scale(struct gui_window *g, float scale)
+void
+gui_window_set_scale(struct gui_window *g, float scale)
{
LOG(("set scale\n"));
}
@@ -1247,85 +1402,103 @@ gui_window_set_icon(struct gui_window *g, hlcache_handle *icon)
}
/**
-* set gui display of a retrieved favicon representing the search provider
-* \param ico may be NULL for local calls; then access current cache from
-* search_web_ico()
-*/
+ * set gui display of a retrieved favicon representing the search provider
+ * \param ico may be NULL for local calls; then access current cache from
+ * search_web_ico()
+ */
void
gui_window_set_search_ico(hlcache_handle *ico)
{
}
-struct gui_download_window *gui_download_window_create(download_context *ctx,
- struct gui_window *parent)
+struct gui_download_window *
+gui_download_window_create(download_context *ctx, struct gui_window *parent)
{
- return NULL;
+ return NULL;
}
-nserror gui_download_window_data(struct gui_download_window *dw,
- const char *data, unsigned int size)
+nserror
+gui_download_window_data(struct gui_download_window *dw,
+ const char *data,
+ unsigned int size)
{
return NSERROR_OK;
}
-void gui_download_window_error(struct gui_download_window *dw,
- const char *error_msg)
+void
+gui_download_window_error(struct gui_download_window *dw,
+ const char *error_msg)
{
}
-void gui_download_window_done(struct gui_download_window *dw)
+void
+gui_download_window_done(struct gui_download_window *dw)
{
}
-void gui_drag_save_object(gui_save_type type, hlcache_handle *c,
- struct gui_window *w)
+void
+gui_drag_save_object(gui_save_type type,
+ hlcache_handle *c,
+ struct gui_window *w)
{
}
-void gui_drag_save_selection(struct selection *s, struct gui_window *g)
+void
+gui_drag_save_selection(struct selection *s, struct gui_window *g)
{
}
-void gui_start_selection(struct gui_window *g)
+void
+gui_start_selection(struct gui_window *g)
{
}
-void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
+void
+gui_paste_from_clipboard(struct gui_window *g, int x, int y)
{
}
-bool gui_empty_clipboard(void)
+bool
+gui_empty_clipboard(void)
{
- return false;
+ return false;
}
-bool gui_add_to_clipboard(const char *text, size_t length, bool space)
+bool
+gui_add_to_clipboard(const char *text, size_t length, bool space)
{
- return false;
+ return false;
}
-bool gui_commit_clipboard(void)
+bool
+gui_commit_clipboard(void)
{
- return false;
+ return false;
}
-bool gui_copy_to_clipboard(struct selection *s)
+bool
+gui_copy_to_clipboard(struct selection *s)
{
- return false;
+ return false;
}
-void gui_create_form_select_menu(struct browser_window *bw,
- struct form_control *control)
+void
+gui_create_form_select_menu(struct browser_window *bw,
+ struct form_control *control)
{
}
-void gui_launch_url(const char *url)
+void
+gui_launch_url(const char *url)
{
}
-void gui_cert_verify(const char *url, const struct ssl_cert_info *certs,
- unsigned long num,
- nserror (*cb)(bool proceed, void *pw), void *cbpw)
+void
+gui_cert_verify(const char *url,
+ const struct ssl_cert_info *certs,
+ unsigned long num,
+ nserror (*cb)(bool proceed, void *pw),
+ void *cbpw)
{
cb(false, cbpw);
}