summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent Sanders <vince@netsurf-browser.org>2009-04-15 11:33:03 +0000
committerVincent Sanders <vince@netsurf-browser.org>2009-04-15 11:33:03 +0000
commit2b23052622dc6d4effbeee4f079561343347ebf7 (patch)
treeb411dbb345012196dde7f8b00b143c59427f44c5 /src
parentc554e32f8202e6628422cab831c996615911092d (diff)
downloadlibnsfb-2b23052622dc6d4effbeee4f079561343347ebf7.tar.gz
libnsfb-2b23052622dc6d4effbeee4f079561343347ebf7.tar.bz2
add event interface
svn path=/trunk/libnsfb/; revision=7088
Diffstat (limited to 'src')
-rw-r--r--src/Makefile3
-rw-r--r--src/frontend.c10
-rw-r--r--src/frontend_able.c58
-rw-r--r--src/frontend_linux.c51
-rw-r--r--src/frontend_ram.c58
-rw-r--r--src/frontend_sdl.c473
-rw-r--r--src/frontend_vnc.c58
-rw-r--r--src/libnsfb.c17
8 files changed, 703 insertions, 25 deletions
diff --git a/src/Makefile b/src/Makefile
index ebf9996..bb142d0 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,6 +1,5 @@
# Sources
-DIR_SOURCES := libnsfb.c frontend.c frontend_sdl.c plot.c plot_util.c plotters.c 32bpp_plotters.c 16bpp_plotters.c 8bpp_plotters.c
+DIR_SOURCES := libnsfb.c frontend.c frontend_sdl.c frontend_linux.c frontend_vnc.c frontend_able.c frontend_ram.c plot.c plot_util.c plotters.c 32bpp_plotters.c 16bpp_plotters.c 8bpp_plotters.c
-#frontend_linux.c
include build/makefiles/Makefile.subdir
diff --git a/src/frontend.c b/src/frontend.c
index efc1d58..68edb9e 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -1,3 +1,11 @@
+/*
+ * Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
+ *
+ * This file is part of libnsfb, http://www.netsurf-browser.org/
+ * Licenced under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
#include <stdbool.h>
#include <stdio.h>
#include <unistd.h>
@@ -37,7 +45,7 @@ static int frontend_defaults(nsfb_t *nsfb)
{
nsfb->width = 800;
nsfb->height = 600;
- nsfb->bpp = 8;
+ nsfb->bpp = 16;
/* select plotters for bpp */
select_plotters(nsfb);
diff --git a/src/frontend_able.c b/src/frontend_able.c
new file mode 100644
index 0000000..0e92104
--- /dev/null
+++ b/src/frontend_able.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
+ *
+ * This file is part of libnsfb, http://www.netsurf-browser.org/
+ * Licenced under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#include <stdbool.h>
+#include <stdio.h>
+
+#include "libnsfb.h"
+#include "libnsfb_event.h"
+#include "nsfb.h"
+#include "frontend.h"
+
+#define UNUSED(x) ((x) = (x))
+
+static int able_set_geometry(nsfb_t *nsfb, int width, int height, int bpp)
+{
+ if (nsfb->frontend_priv != NULL)
+ return -1; /* if were already initialised fail */
+
+ nsfb->width = width;
+ nsfb->height = height;
+ nsfb->bpp = bpp;
+
+ return 0;
+}
+
+static int able_initialise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static int able_finalise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static bool able_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout)
+{
+ UNUSED(nsfb);
+ UNUSED(event);
+ UNUSED(timeout);
+ return false;
+}
+
+const nsfb_frontend_rtns_t able_rtns = {
+ .initialise = able_initialise,
+ .finalise = able_finalise,
+ .input = able_input,
+ .geometry = able_set_geometry,
+};
+
+NSFB_FRONTEND_DEF(able, NSFB_FRONTEND_ABLE, &able_rtns)
diff --git a/src/frontend_linux.c b/src/frontend_linux.c
index ad95542..3790a76 100644
--- a/src/frontend_linux.c
+++ b/src/frontend_linux.c
@@ -1,9 +1,58 @@
+/*
+ * Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
+ *
+ * This file is part of libnsfb, http://www.netsurf-browser.org/
+ * Licenced under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#include <stdbool.h>
+#include <stdio.h>
+
#include "libnsfb.h"
+#include "libnsfb_event.h"
#include "nsfb.h"
#include "frontend.h"
+#define UNUSED(x) ((x) = (x))
+
+static int linux_set_geometry(nsfb_t *nsfb, int width, int height, int bpp)
+{
+ if (nsfb->frontend_priv != NULL)
+ return -1; /* if were already initialised fail */
+
+ nsfb->width = width;
+ nsfb->height = height;
+ nsfb->bpp = bpp;
+
+ return 0;
+}
+
+static int linux_initialise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static int linux_finalise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static bool linux_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout)
+{
+ UNUSED(nsfb);
+ UNUSED(event);
+ UNUSED(timeout);
+ return false;
+}
+
const nsfb_frontend_rtns_t linux_rtns = {
- .foo = 2,
+ .initialise = linux_initialise,
+ .finalise = linux_finalise,
+ .input = linux_input,
+ .geometry = linux_set_geometry,
};
NSFB_FRONTEND_DEF(linux, NSFB_FRONTEND_LINUX, &linux_rtns)
diff --git a/src/frontend_ram.c b/src/frontend_ram.c
new file mode 100644
index 0000000..82cb29b
--- /dev/null
+++ b/src/frontend_ram.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
+ *
+ * This file is part of libnsfb, http://www.netsurf-browser.org/
+ * Licenced under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#include <stdbool.h>
+#include <stdio.h>
+
+#include "libnsfb.h"
+#include "libnsfb_event.h"
+#include "nsfb.h"
+#include "frontend.h"
+
+#define UNUSED(x) ((x) = (x))
+
+static int ram_set_geometry(nsfb_t *nsfb, int width, int height, int bpp)
+{
+ if (nsfb->frontend_priv != NULL)
+ return -1; /* if were already initialised fail */
+
+ nsfb->width = width;
+ nsfb->height = height;
+ nsfb->bpp = bpp;
+
+ return 0;
+}
+
+static int ram_initialise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static int ram_finalise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static bool ram_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout)
+{
+ UNUSED(nsfb);
+ UNUSED(event);
+ UNUSED(timeout);
+ return false;
+}
+
+const nsfb_frontend_rtns_t ram_rtns = {
+ .initialise = ram_initialise,
+ .finalise = ram_finalise,
+ .input = ram_input,
+ .geometry = ram_set_geometry,
+};
+
+NSFB_FRONTEND_DEF(ram, NSFB_FRONTEND_RAM, &ram_rtns)
diff --git a/src/frontend_sdl.c b/src/frontend_sdl.c
index e082e56..82342d3 100644
--- a/src/frontend_sdl.c
+++ b/src/frontend_sdl.c
@@ -1,10 +1,346 @@
+/*
+ * Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
+ *
+ * This file is part of libnsfb, http://www.netsurf-browser.org/
+ * Licenced under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+#include <stdbool.h>
#include <SDL/SDL.h>
#include "libnsfb.h"
+#include "libnsfb_event.h"
#include "nsfb.h"
#include "frontend.h"
+enum nsfb_key_code_e sdl_nsfb_map[] = {
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_BACKSPACE,
+ NSFB_KEY_TAB,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_CLEAR,
+ NSFB_KEY_RETURN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_PAUSE,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_ESCAPE,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_SPACE,
+ NSFB_KEY_EXCLAIM,
+ NSFB_KEY_QUOTEDBL,
+ NSFB_KEY_HASH,
+ NSFB_KEY_DOLLAR,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_AMPERSAND,
+ NSFB_KEY_QUOTE,
+ NSFB_KEY_LEFTPAREN,
+ NSFB_KEY_RIGHTPAREN,
+ NSFB_KEY_ASTERISK,
+ NSFB_KEY_PLUS,
+ NSFB_KEY_COMMA,
+ NSFB_KEY_MINUS,
+ NSFB_KEY_PERIOD,
+ NSFB_KEY_SLASH,
+ NSFB_KEY_0,
+ NSFB_KEY_1,
+ NSFB_KEY_2,
+ NSFB_KEY_3,
+ NSFB_KEY_4,
+ NSFB_KEY_5,
+ NSFB_KEY_6,
+ NSFB_KEY_7,
+ NSFB_KEY_8,
+ NSFB_KEY_9,
+ NSFB_KEY_COLON,
+ NSFB_KEY_SEMICOLON,
+ NSFB_KEY_LESS,
+ NSFB_KEY_EQUALS,
+ NSFB_KEY_GREATER,
+ NSFB_KEY_QUESTION,
+ NSFB_KEY_AT,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_LEFTBRACKET,
+ NSFB_KEY_BACKSLASH,
+ NSFB_KEY_RIGHTBRACKET,
+ NSFB_KEY_CARET,
+ NSFB_KEY_UNDERSCORE,
+ NSFB_KEY_BACKQUOTE,
+ NSFB_KEY_a,
+ NSFB_KEY_b,
+ NSFB_KEY_c,
+ NSFB_KEY_d,
+ NSFB_KEY_e,
+ NSFB_KEY_f,
+ NSFB_KEY_g,
+ NSFB_KEY_h,
+ NSFB_KEY_i,
+ NSFB_KEY_j,
+ NSFB_KEY_k,
+ NSFB_KEY_l,
+ NSFB_KEY_m,
+ NSFB_KEY_n,
+ NSFB_KEY_o,
+ NSFB_KEY_p,
+ NSFB_KEY_q,
+ NSFB_KEY_r,
+ NSFB_KEY_s,
+ NSFB_KEY_t,
+ NSFB_KEY_u,
+ NSFB_KEY_v,
+ NSFB_KEY_w,
+ NSFB_KEY_x,
+ NSFB_KEY_y,
+ NSFB_KEY_z,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_DELETE,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_KP0,
+ NSFB_KEY_KP1,
+ NSFB_KEY_KP2,
+ NSFB_KEY_KP3,
+ NSFB_KEY_KP4,
+ NSFB_KEY_KP5,
+ NSFB_KEY_KP6,
+ NSFB_KEY_KP7,
+ NSFB_KEY_KP8,
+ NSFB_KEY_KP9,
+ NSFB_KEY_KP_PERIOD,
+ NSFB_KEY_KP_DIVIDE,
+ NSFB_KEY_KP_MULTIPLY,
+ NSFB_KEY_KP_MINUS,
+ NSFB_KEY_KP_PLUS,
+ NSFB_KEY_KP_ENTER,
+ NSFB_KEY_KP_EQUALS,
+ NSFB_KEY_UP,
+ NSFB_KEY_DOWN,
+ NSFB_KEY_RIGHT,
+ NSFB_KEY_LEFT,
+ NSFB_KEY_INSERT,
+ NSFB_KEY_HOME,
+ NSFB_KEY_END,
+ NSFB_KEY_PAGEUP,
+ NSFB_KEY_PAGEDOWN,
+ NSFB_KEY_F1,
+ NSFB_KEY_F2,
+ NSFB_KEY_F3,
+ NSFB_KEY_F4,
+ NSFB_KEY_F5,
+ NSFB_KEY_F6,
+ NSFB_KEY_F7,
+ NSFB_KEY_F8,
+ NSFB_KEY_F9,
+ NSFB_KEY_F10,
+ NSFB_KEY_F11,
+ NSFB_KEY_F12,
+ NSFB_KEY_F13,
+ NSFB_KEY_F14,
+ NSFB_KEY_F15,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_UNKNOWN,
+ NSFB_KEY_NUMLOCK,
+ NSFB_KEY_CAPSLOCK,
+ NSFB_KEY_SCROLLOCK,
+ NSFB_KEY_RSHIFT,
+ NSFB_KEY_LSHIFT,
+ NSFB_KEY_RCTRL,
+ NSFB_KEY_LCTRL,
+ NSFB_KEY_RALT,
+ NSFB_KEY_LALT,
+ NSFB_KEY_RMETA,
+ NSFB_KEY_LMETA,
+ NSFB_KEY_LSUPER,
+ NSFB_KEY_RSUPER,
+ NSFB_KEY_MODE,
+ NSFB_KEY_COMPOSE,
+ NSFB_KEY_HELP,
+ NSFB_KEY_PRINT,
+ NSFB_KEY_SYSREQ,
+ NSFB_KEY_BREAK,
+ NSFB_KEY_MENU,
+ NSFB_KEY_POWER,
+ NSFB_KEY_EURO,
+ NSFB_KEY_UNDO,
+};
+
+
static void
set_palette(nsfb_t *nsfb)
{
@@ -20,8 +356,8 @@ set_palette(nsfb_t *nsfb)
palette[loop].r = (rloop << 5) | (rloop << 2) | (rloop >> 1);
palette[loop].g = (gloop << 5) | (gloop << 2) | (gloop >> 1);
palette[loop].b = (bloop << 6) | (bloop << 4) | (bloop << 2) | (bloop);
- nsfb->palette[loop] = palette[loop].r |
- palette[loop].g << 8 |
+ nsfb->palette[loop] = palette[loop].r |
+ palette[loop].g << 8 |
palette[loop].b << 16;
loop++;
}
@@ -33,6 +369,18 @@ set_palette(nsfb_t *nsfb)
}
+static int sdl_set_geometry(nsfb_t *nsfb, int width, int height, int bpp)
+{
+ if (nsfb->frontend_priv != NULL)
+ return -1; /* if were already initialised fail */
+
+ nsfb->width = width;
+ nsfb->height = height;
+ nsfb->bpp = bpp;
+
+ return 0;
+}
+
static int sdl_initialise(nsfb_t *nsfb)
{
SDL_Surface *sdl_screen;
@@ -42,7 +390,7 @@ static int sdl_initialise(nsfb_t *nsfb)
/* sanity checked depth. */
if ((nsfb->bpp != 32) && (nsfb->bpp != 16) && (nsfb->bpp != 8))
- nsfb->bpp = 16;
+ nsfb->bpp = 16;
/* initialise SDL library */
if (SDL_Init(SDL_INIT_VIDEO) < 0 ) {
@@ -51,9 +399,9 @@ static int sdl_initialise(nsfb_t *nsfb)
}
atexit(SDL_Quit);
- sdl_screen = SDL_SetVideoMode(nsfb->width,
- nsfb->height,
- nsfb->bpp,
+ sdl_screen = SDL_SetVideoMode(nsfb->width,
+ nsfb->height,
+ nsfb->bpp,
SDL_SWSURFACE);
if (sdl_screen == NULL ) {
@@ -68,7 +416,7 @@ static int sdl_initialise(nsfb_t *nsfb)
nsfb->ptr = sdl_screen->pixels;
nsfb->linelen = sdl_screen->pitch;
-
+
SDL_ShowCursor(SDL_DISABLE);
return 0;
@@ -80,26 +428,114 @@ static int sdl_finalise(nsfb_t *nsfb)
return 0;
}
-static int sdl_input(nsfb_t *nsfb)
+static bool sdl_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout)
{
int got_event;
- SDL_Event event;
+ SDL_Event sdlevent;
- got_event = SDL_WaitEvent(&event);
- if (event.type == SDL_QUIT)
- exit(0);
- nsfb=nsfb;
- return 1;
+ nsfb=nsfb; /* unused */
+
+ if (timeout < 0)
+ got_event = SDL_WaitEvent(&sdlevent);
+ else
+ got_event = SDL_PollEvent(&sdlevent);
+
+ /* Do nothing if there was no event */
+ if (got_event == 0)
+ return false;
+
+ event->type = NSFB_EVENT_NONE;
+
+ switch (sdlevent.type) {
+ case SDL_KEYDOWN:
+ event->type = NSFB_EVENT_KEY_DOWN;
+ event->value.keycode = sdl_nsfb_map[sdlevent.key.keysym.sym];
+ break;
+
+ case SDL_KEYUP:
+ event->type = NSFB_EVENT_KEY_UP;
+ event->value.keycode = sdl_nsfb_map[sdlevent.key.keysym.sym];
+ break;
+
+ case SDL_MOUSEBUTTONDOWN:
+ event->type = NSFB_EVENT_KEY_DOWN;
+
+ switch (sdlevent.button.button) {
+
+ case SDL_BUTTON_LEFT:
+ event->value.keycode = NSFB_KEY_MOUSE_1;
+ break;
+
+ case SDL_BUTTON_MIDDLE:
+ event->value.keycode = NSFB_KEY_MOUSE_2;
+ break;
+
+ case SDL_BUTTON_RIGHT:
+ event->value.keycode = NSFB_KEY_MOUSE_3;
+ break;
+
+ case SDL_BUTTON_WHEELUP:
+ event->value.keycode = NSFB_KEY_MOUSE_4;
+ break;
+
+ case SDL_BUTTON_WHEELDOWN:
+ event->value.keycode = NSFB_KEY_MOUSE_5;
+ break;
+ }
+ break;
+
+ case SDL_MOUSEBUTTONUP:
+ event->type = NSFB_EVENT_KEY_UP;
+
+ switch (sdlevent.button.button) {
+
+ case SDL_BUTTON_LEFT:
+ event->value.keycode = NSFB_KEY_MOUSE_1;
+ break;
+
+ case SDL_BUTTON_MIDDLE:
+ event->value.keycode = NSFB_KEY_MOUSE_2;
+ break;
+
+ case SDL_BUTTON_RIGHT:
+ event->value.keycode = NSFB_KEY_MOUSE_3;
+ break;
+
+ case SDL_BUTTON_WHEELUP:
+ event->value.keycode = NSFB_KEY_MOUSE_4;
+ break;
+
+ case SDL_BUTTON_WHEELDOWN:
+ event->value.keycode = NSFB_KEY_MOUSE_5;
+ break;
+ }
+ break;
+
+ case SDL_MOUSEMOTION:
+ event->type = NSFB_EVENT_MOVE_ABSOLUTE;
+ event->value.vector.x = sdlevent.motion.x;
+ event->value.vector.y = sdlevent.motion.y;
+ event->value.vector.z = 0;
+ break;
+
+ case SDL_QUIT:
+ event->type = NSFB_EVENT_CONTROL;
+ event->value.controlcode = NSFB_CONTROL_QUIT;
+ break;
+
+ }
+
+ return true;
}
static int sdl_release(nsfb_t *nsfb, nsfb_bbox_t *box)
{
SDL_Surface *sdl_screen = nsfb->frontend_priv;
- SDL_UpdateRect(sdl_screen,
- box->x0,
- box->y0,
- box->x1 - box->x0,
+ SDL_UpdateRect(sdl_screen,
+ box->x0,
+ box->y0,
+ box->x1 - box->x0,
box->y1 - box->y0);
return 0;
@@ -110,6 +546,7 @@ const nsfb_frontend_rtns_t sdl_rtns = {
.finalise = sdl_finalise,
.input = sdl_input,
.release = sdl_release,
+ .geometry = sdl_set_geometry,
};
NSFB_FRONTEND_DEF(sdl, NSFB_FRONTEND_SDL, &sdl_rtns)
diff --git a/src/frontend_vnc.c b/src/frontend_vnc.c
new file mode 100644
index 0000000..46040b2
--- /dev/null
+++ b/src/frontend_vnc.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
+ *
+ * This file is part of libnsfb, http://www.netsurf-browser.org/
+ * Licenced under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#include <stdbool.h>
+#include <stdio.h>
+
+#include "libnsfb.h"
+#include "libnsfb_event.h"
+#include "nsfb.h"
+#include "frontend.h"
+
+#define UNUSED(x) ((x) = (x))
+
+static int vnc_set_geometry(nsfb_t *nsfb, int width, int height, int bpp)
+{
+ if (nsfb->frontend_priv != NULL)
+ return -1; /* if were already initialised fail */
+
+ nsfb->width = width;
+ nsfb->height = height;
+ nsfb->bpp = bpp;
+
+ return 0;
+}
+
+static int vnc_initialise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static int vnc_finalise(nsfb_t *nsfb)
+{
+ UNUSED(nsfb);
+ return 0;
+}
+
+static bool vnc_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout)
+{
+ UNUSED(nsfb);
+ UNUSED(event);
+ UNUSED(timeout);
+ return false;
+}
+
+const nsfb_frontend_rtns_t vnc_rtns = {
+ .initialise = vnc_initialise,
+ .finalise = vnc_finalise,
+ .input = vnc_input,
+ .geometry = vnc_set_geometry,
+};
+
+NSFB_FRONTEND_DEF(vnc, NSFB_FRONTEND_VNC, &vnc_rtns)
diff --git a/src/libnsfb.c b/src/libnsfb.c
index d54c787..172b554 100644
--- a/src/libnsfb.c
+++ b/src/libnsfb.c
@@ -1,11 +1,20 @@
+/*
+ * Copyright 2009 Vincent Sanders <vince@simtec.co.uk>
+ *
+ * This file is part of libnsfb, http://www.netsurf-browser.org/
+ * Licenced under the MIT License,
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+#include <stdbool.h>
#include <stdio.h>
#include <malloc.h>
#include "libnsfb.h"
+#include "libnsfb_event.h"
#include "nsfb.h"
#include "frontend.h"
-
/* documented in libnsfb.h */
nsfb_t*
nsfb_init(const enum nsfb_frontend_e frontend_type)
@@ -42,9 +51,9 @@ nsfb_init_frontend(nsfb_t *nsfb)
return nsfb->frontend_rtns->initialise(nsfb);
}
-int nsfb_input(nsfb_t *nsfb)
+bool nsfb_input(nsfb_t *nsfb, nsfb_event_t *event, int timeout)
{
- return nsfb->frontend_rtns->input(nsfb);
+ return nsfb->frontend_rtns->input(nsfb, event, timeout);
}
int nsfb_claim(nsfb_t *nsfb, nsfb_bbox_t *box)
@@ -67,6 +76,8 @@ int nsfb_set_geometry(nsfb_t *nsfb, int width, int height, int bpp)
if ((bpp != 32) && (bpp != 16) && (bpp != 8))
bpp = nsfb->bpp;
+
+ return nsfb->frontend_rtns->geometry(nsfb, width, height, bpp);
}
int nsfb_get_geometry(nsfb_t *nsfb, int *width, int *height, int *bpp)