diff options
Diffstat (limited to 'framebuffer/fb_frontend_vnc.c')
-rw-r--r-- | framebuffer/fb_frontend_vnc.c | 344 |
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: */ - |