summaryrefslogtreecommitdiff
path: root/framebuffer/fb_frontend_vnc.c
diff options
context:
space:
mode:
Diffstat (limited to 'framebuffer/fb_frontend_vnc.c')
-rw-r--r--framebuffer/fb_frontend_vnc.c344
1 files changed, 188 insertions, 156 deletions
diff --git a/framebuffer/fb_frontend_vnc.c b/framebuffer/fb_frontend_vnc.c
index 339439d55..f7ee89151 100644
--- a/framebuffer/fb_frontend_vnc.c
+++ b/framebuffer/fb_frontend_vnc.c
@@ -38,6 +38,7 @@
#include "framebuffer/fb_frontend.h"
#include "framebuffer/fb_cursor.h"
#include "framebuffer/fb_rootwindow.h"
+#include "framebuffer/fb_options.h"
#include "utils/log.h"
@@ -48,30 +49,30 @@ static void fb_vnc_doptr(int buttonMask,int x,int y,rfbClientPtr cl)
{
struct gui_window *g = cur_window;
if (buttonMask == 0) {
- fb_rootwindow_move(framebuffer, g, x, y, false);
+ fb_rootwindow_move(framebuffer, g, x, y, false);
} else {
/* left button */
/* if (buttonMask && 0x1) {
- fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_1,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- }*/
+ fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_1,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ }*/
if (buttonMask && 0x1) {
- fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_1,
- fb_cursor_x(framebuffer),
+ fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_1,
+ fb_cursor_x(framebuffer),
fb_cursor_y(framebuffer));
}
/* right button */
/*if (buttonMask && 0x4) {
- fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_2,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- }*/
+ fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_2,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ }*/
if (buttonMask && 0x4) {
- fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_2,
- fb_cursor_x(framebuffer),
+ fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_2,
+ fb_cursor_x(framebuffer),
fb_cursor_y(framebuffer));
}
@@ -85,30 +86,30 @@ static void fb_vnc_doptr(int buttonMask,int x,int y,rfbClientPtr cl)
fb_window_scroll(g, 0, 100);
}
-
-
- /*
- case SDL_MOUSEBUTTONUP:
- switch (event.button.button) {
-
- case SDL_BUTTON_LEFT:
- fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_1,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- break;
-
- case SDL_BUTTON_RIGHT:
- fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_2,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- break;
- default:
- printf("Mouse button %d pressed at (%d,%d)\n",
- event.button.button, event.button.x, event.button.y);
- }
- break;
+ /*
+ case SDL_MOUSEBUTTONUP:
+ switch (event.button.button) {
+
+ case SDL_BUTTON_LEFT:
+ fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_1,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ break;
+
+ case SDL_BUTTON_RIGHT:
+ fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_2,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ break;
+
+ default:
+ printf("Mouse button %d pressed at (%d,%d)\n",
+ event.button.button, event.button.x, event.button.y);
+
+ }
+ break;
*/
}
}
@@ -124,7 +125,7 @@ static void fb_vnc_dokey(rfbBool down,rfbKeySym key,rfbClientPtr cl)
case XK_Page_Down:
fb_window_scroll(g, 0, g->height);
break;
-
+
case XK_Page_Up:
fb_window_scroll(g, 0, -g->height);
break;
@@ -132,11 +133,11 @@ static void fb_vnc_dokey(rfbBool down,rfbKeySym key,rfbClientPtr cl)
case XK_Down:
fb_window_scroll(g, 0, 100);
break;
-
+
case XK_Up:
fb_window_scroll(g, 0, -100);
break;
-
+
case XK_Escape:
browser_window_destroy(g->bw);
break;
@@ -161,34 +162,66 @@ static void fb_vnc_dokey(rfbBool down,rfbKeySym key,rfbClientPtr cl)
framebuffer_t *fb_os_init(int argc, char** argv)
{
framebuffer_t *newfb;
+ int fb_width;
+ int fb_height;
+ int fb_depth;
+
+ if ((option_window_width != 0) && (option_window_height != 0)) {
+ fb_width = option_window_width;
+ fb_height = option_window_height;
+ } else {
+ fb_width = 800;
+ fb_height = 600;
+ }
+
+ fb_depth = option_fb_depth;
+ if ((fb_depth != 32) && (fb_depth != 16) && (fb_depth != 8))
+ fb_depth = 16; /* sanity checked depth in bpp */
newfb = calloc(1, sizeof(framebuffer_t));
if (newfb == NULL)
return NULL;
- newfb->width = 800;
- newfb->height = 600;
- newfb->bpp = 32;
+ newfb->width = fb_width;
+ newfb->height = fb_height;
+ newfb->bpp = fb_depth;
- vnc_screen = rfbGetScreen(&argc, argv,
- newfb->width, newfb->height,
- 8, 3, 4);
+ vnc_screen = rfbGetScreen(&argc, argv,
+ newfb->width, newfb->height,
+ 8, 3, (fb_depth / 8));
- vnc_screen->frameBuffer = malloc(newfb->width * newfb->height * 4);
+ vnc_screen->frameBuffer = malloc(newfb->width * newfb->height * (fb_depth / 8));
- vnc_screen->serverFormat.trueColour=TRUE;
- vnc_screen->serverFormat.redShift = 16;
- vnc_screen->serverFormat.greenShift = 8;
- vnc_screen->serverFormat.blueShift = 0;
+ switch (fb_depth) {
+ case 8:
+ break;
+
+ case 16:
+ vnc_screen->serverFormat.trueColour=TRUE;
+ vnc_screen->serverFormat.redShift = 11;
+ vnc_screen->serverFormat.greenShift = 5;
+ vnc_screen->serverFormat.blueShift = 0;
+ vnc_screen->serverFormat.redMax = 31;
+ vnc_screen->serverFormat.greenMax = 63;
+ vnc_screen->serverFormat.blueMax = 31;
+ break;
+
+ case 32:
+ vnc_screen->serverFormat.trueColour=TRUE;
+ vnc_screen->serverFormat.redShift = 16;
+ vnc_screen->serverFormat.greenShift = 8;
+ vnc_screen->serverFormat.blueShift = 0;
+ break;
+ }
vnc_screen->alwaysShared = TRUE;
- vnc_screen->ptrAddEvent = fb_vnc_doptr;
+ vnc_screen->ptrAddEvent = fb_vnc_doptr;
vnc_screen->kbdAddEvent = fb_vnc_dokey;
rfbInitServer(vnc_screen);
newfb->ptr = vnc_screen->frameBuffer;
- newfb->linelen = newfb->width * 4;
+ newfb->linelen = newfb->width * (fb_depth / 8);
//rfbUndrawCursor(vnc_screen);
@@ -199,7 +232,7 @@ void fb_os_quit(framebuffer_t *fb)
{
}
-void fb_os_input(struct gui_window *g, bool active)
+void fb_os_input(struct gui_window *g, bool active)
{
//SDL_Event event;
cur_window = g;
@@ -209,109 +242,109 @@ void fb_os_input(struct gui_window *g, bool active)
else
rfbProcessEvents(vnc_screen, 100000);
/*
- switch (event.type) {
- case SDL_KEYDOWN:
-
- switch (event.key.keysym.sym) {
-
- case SDLK_PAGEDOWN:
- fb_window_scroll(g, 0, g->height);
- break;
-
- case SDLK_PAGEUP:
- fb_window_scroll(g, 0, -g->height);
- break;
-
- case SDLK_DOWN:
- fb_window_scroll(g, 0, 100);
- break;
-
- case SDLK_UP:
- fb_window_scroll(g, 0, -100);
- break;
-
- case SDLK_ESCAPE:
- browser_window_destroy(g->bw);
- break;
-
- case SDLK_LEFT:
- if (history_back_available(g->bw->history))
- history_back(g->bw, g->bw->history);
- break;
-
- case SDLK_RIGHT:
- if (history_forward_available(g->bw->history))
- history_forward(g->bw, g->bw->history);
- break;
-
- default:
- printf("The %s key was pressed!\n",
- SDL_GetKeyName(event.key.keysym.sym));
- fb_rootwindow_input(g, event.key.keysym.sym);
- break;
- }
- break;
-
- case SDL_MOUSEMOTION:
- fb_rootwindow_move(framebuffer, g, event.motion.x, event.motion.y, false);
- break;
-
- case SDL_MOUSEBUTTONDOWN:
- switch (event.button.button) {
-
- case SDL_BUTTON_LEFT:
- fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_1,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- break;
-
- case SDL_BUTTON_RIGHT:
- fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_2,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- break;
-
- case SDL_BUTTON_WHEELUP:
- fb_window_scroll(g, 0, -100);
- break;
-
- case SDL_BUTTON_WHEELDOWN:
- fb_window_scroll(g, 0, 100);
- break;
-
- case SDL_BUTTON_MIDDLE:
- default:
- printf("Mouse button %d pressed at (%d,%d)\n",
- event.button.button, event.button.x, event.button.y);
-
- }
- break;
-
- case SDL_MOUSEBUTTONUP:
- switch (event.button.button) {
-
- case SDL_BUTTON_LEFT:
- fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_1,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- break;
-
- case SDL_BUTTON_RIGHT:
- fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_2,
- fb_cursor_x(framebuffer),
- fb_cursor_y(framebuffer));
- break;
-
- default:
- printf("Mouse button %d pressed at (%d,%d)\n",
- event.button.button, event.button.x, event.button.y);
-
- }
- break;
-
- case SDL_QUIT:
- browser_window_destroy(g->bw);
- }
+ switch (event.type) {
+ case SDL_KEYDOWN:
+
+ switch (event.key.keysym.sym) {
+
+ case SDLK_PAGEDOWN:
+ fb_window_scroll(g, 0, g->height);
+ break;
+
+ case SDLK_PAGEUP:
+ fb_window_scroll(g, 0, -g->height);
+ break;
+
+ case SDLK_DOWN:
+ fb_window_scroll(g, 0, 100);
+ break;
+
+ case SDLK_UP:
+ fb_window_scroll(g, 0, -100);
+ break;
+
+ case SDLK_ESCAPE:
+ browser_window_destroy(g->bw);
+ break;
+
+ case SDLK_LEFT:
+ if (history_back_available(g->bw->history))
+ history_back(g->bw, g->bw->history);
+ break;
+
+ case SDLK_RIGHT:
+ if (history_forward_available(g->bw->history))
+ history_forward(g->bw, g->bw->history);
+ break;
+
+ default:
+ printf("The %s key was pressed!\n",
+ SDL_GetKeyName(event.key.keysym.sym));
+ fb_rootwindow_input(g, event.key.keysym.sym);
+ break;
+ }
+ break;
+
+ case SDL_MOUSEMOTION:
+ fb_rootwindow_move(framebuffer, g, event.motion.x, event.motion.y, false);
+ break;
+
+ case SDL_MOUSEBUTTONDOWN:
+ switch (event.button.button) {
+
+ case SDL_BUTTON_LEFT:
+ fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_1,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ break;
+
+ case SDL_BUTTON_RIGHT:
+ fb_rootwindow_click(g, BROWSER_MOUSE_PRESS_2,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ break;
+
+ case SDL_BUTTON_WHEELUP:
+ fb_window_scroll(g, 0, -100);
+ break;
+
+ case SDL_BUTTON_WHEELDOWN:
+ fb_window_scroll(g, 0, 100);
+ break;
+
+ case SDL_BUTTON_MIDDLE:
+ default:
+ printf("Mouse button %d pressed at (%d,%d)\n",
+ event.button.button, event.button.x, event.button.y);
+
+ }
+ break;
+
+ case SDL_MOUSEBUTTONUP:
+ switch (event.button.button) {
+
+ case SDL_BUTTON_LEFT:
+ fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_1,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ break;
+
+ case SDL_BUTTON_RIGHT:
+ fb_rootwindow_click(g, BROWSER_MOUSE_CLICK_2,
+ fb_cursor_x(framebuffer),
+ fb_cursor_y(framebuffer));
+ break;
+
+ default:
+ printf("Mouse button %d pressed at (%d,%d)\n",
+ event.button.button, event.button.x, event.button.y);
+
+ }
+ break;
+
+ case SDL_QUIT:
+ browser_window_destroy(g->bw);
+ }
*/
}
@@ -332,4 +365,3 @@ fb_os_redraw(struct bbox_s *box)
* c-basic-offset:8
* End:
*/
-