From 3b540119d96b47d7f489b36276acce259fb8b518 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 22 Oct 2011 17:46:24 +0800 Subject: [PATCH] Usermode/axwin2 - Added full mouse/cursor support (no input yet though :) --- Usermode/Applications/axwin2_src/Makefile | 6 ++-- Usermode/Applications/axwin2_src/WM/common.h | 1 + Usermode/Applications/axwin2_src/WM/input.c | 15 +++++--- .../axwin2_src/WM/resources/cursor.h | 34 +++++++++++++++++++ Usermode/Applications/axwin2_src/WM/video.c | 20 ++++++++++- 5 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 Usermode/Applications/axwin2_src/WM/resources/cursor.h diff --git a/Usermode/Applications/axwin2_src/Makefile b/Usermode/Applications/axwin2_src/Makefile index 1174798c..89f15842 100644 --- a/Usermode/Applications/axwin2_src/Makefile +++ b/Usermode/Applications/axwin2_src/Makefile @@ -5,9 +5,9 @@ DIRS = WM Shell_src SUBMAKE = $(MAKE) --no-print-directory all: - @$(foreach DIR,$(DIRS), echo --- $(NAME)/$(DIR); $(SUBMAKE) -C $(DIR) $@ ;) + @$(foreach DIR,$(DIRS), echo --- $(NAME)/$(DIR) && $(SUBMAKE) -C $(DIR) $@ &&) true install: - @$(foreach DIR,$(DIRS), echo --- $(NAME)/$(DIR); $(SUBMAKE) -C $(DIR) $@ ;) + @$(foreach DIR,$(DIRS), echo --- $(NAME)/$(DIR) && $(SUBMAKE) -C $(DIR) $@ &&) true clean: - @$(foreach DIR,$(DIRS), $(SUBMAKE) -C $(DIR) $@ ;) + @$(foreach DIR,$(DIRS), $(SUBMAKE) -C $(DIR) $@ &&) true diff --git a/Usermode/Applications/axwin2_src/WM/common.h b/Usermode/Applications/axwin2_src/WM/common.h index 2d92cb58..b00d6971 100644 --- a/Usermode/Applications/axwin2_src/WM/common.h +++ b/Usermode/Applications/axwin2_src/WM/common.h @@ -92,6 +92,7 @@ extern tApplication *AxWin_GetClient(tIPC_Type *Method, void *Ident); extern tElement *AxWin_CreateAppWindow(tApplication *App, const char *Name); // --- Video --- extern void Video_Setup(void); +extern void Video_SetCursorPos(short X, short Y); extern void Video_Update(void); extern void Video_FillRect(short X, short Y, short W, short H, uint32_t Color); extern void Video_DrawRect(short X, short Y, short W, short H, uint32_t Color); diff --git a/Usermode/Applications/axwin2_src/WM/input.c b/Usermode/Applications/axwin2_src/WM/input.c index 08cefc72..93869328 100644 --- a/Usermode/Applications/axwin2_src/WM/input.c +++ b/Usermode/Applications/axwin2_src/WM/input.c @@ -5,6 +5,9 @@ #include "common.h" #include +#define JOY_IOCTL_GETSETAXISLIMIT 6 +#define JOY_IOCTL_GETSETAXISPOSITION 7 + // === CODE === int Input_Init(void) { @@ -18,11 +21,15 @@ int Input_Init(void) // Set mouse limits num_value.Num = 0; num_value.Value = giScreenWidth; - ioctl(giMouseFD, 6, &num_value); + ioctl(giMouseFD, JOY_IOCTL_GETSETAXISLIMIT, &num_value); + num_value.Value = giScreenWidth/2; + ioctl(giMouseFD, JOY_IOCTL_GETSETAXISPOSITION, &num_value); num_value.Num = 1; num_value.Value = giScreenHeight; - ioctl(giMouseFD, 6, &num_value); + ioctl(giMouseFD, JOY_IOCTL_GETSETAXISLIMIT, &num_value); + num_value.Value = giScreenHeight/2; + ioctl(giMouseFD, JOY_IOCTL_GETSETAXISPOSITION, &num_value); return 0; } @@ -78,7 +85,7 @@ void Input_HandleSelect(fd_set *set) // mouseinfo.Axies[0].CurValue // ); // Handle movement -// Video_SetCursorPos( mouseinfo.Axies[0], mouseinfo.Axies[1] ); - _SysDebug("Cursor to %i,%i", mouseinfo.Axies[0].CursorPos, mouseinfo.Axies[1].CursorPos); + Video_SetCursorPos( mouseinfo.Axies[0].CursorPos, mouseinfo.Axies[1].CursorPos ); +// _SysDebug("Cursor to %i,%i", mouseinfo.Axies[0].CursorPos, mouseinfo.Axies[1].CursorPos); } } diff --git a/Usermode/Applications/axwin2_src/WM/resources/cursor.h b/Usermode/Applications/axwin2_src/WM/resources/cursor.h new file mode 100644 index 00000000..58b47e80 --- /dev/null +++ b/Usermode/Applications/axwin2_src/WM/resources/cursor.h @@ -0,0 +1,34 @@ +/* + */ +#ifndef _RESORUCE_CURSOR_H +#define _RESORUCE_CURSOR_H + +#include + +static struct { + uint16_t W, H, OfsX, OfsY; + uint32_t Data[]; +} cCursorBitmap = { + 8, 16, 0, 0, + { + 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF888888, 0xFF000000, 0xFF000000, 0xFF000000, + 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFFFFFFFF, 0xFF000000, 0xFF000000, 0xFFFFFFFF, 0xFF000000, 0x00000000, 0x00000000, + 0xFF000000, 0xFF000000, 0x00000000, 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0x00000000, + 0xFF000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0xFFFFFFFF, 0xFF000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0xFFFFFFFF, 0xFF000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xFF000000, 0x00000000, + 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 + } +}; + +#endif + diff --git a/Usermode/Applications/axwin2_src/WM/video.c b/Usermode/Applications/axwin2_src/WM/video.c index b57b8c7f..4121fbeb 100644 --- a/Usermode/Applications/axwin2_src/WM/video.c +++ b/Usermode/Applications/axwin2_src/WM/video.c @@ -6,9 +6,11 @@ #include #include #include +#include "resources/cursor.h" // === PROTOTYPES === void Video_Setup(void); +void Video_SetCursorPos(short X, short Y); void Video_Update(void); void Video_FillRect(short X, short Y, short W, short H, uint32_t Color); void Video_DrawRect(short X, short Y, short W, short H, uint32_t Color); @@ -54,12 +56,17 @@ void Video_Setup(void) tmpInt = TERM_MODE_FB; ioctl( giTerminalFD, TERM_IOCTL_MODETYPE, &tmpInt ); - // Force VT8 to be shown + // Force VT to be shown ioctl( giTerminalFD, TERM_IOCTL_FORCESHOW, NULL ); // Create local framebuffer (back buffer) gpScreenBuffer = malloc( giScreenWidth*giScreenHeight*4 ); memset32( gpScreenBuffer, 0x8888FF, giScreenWidth*giScreenHeight ); + + // Set cursor position and bitmap + ioctl(giTerminalFD, TERM_IOCTL_SETCURSORBITMAP, &cCursorBitmap); + Video_SetCursorPos( giScreenWidth/2, giScreenHeight/2 ); + Video_Update(); } @@ -70,6 +77,17 @@ void Video_Update(void) write(giTerminalFD, gpScreenBuffer, giScreenWidth*giScreenHeight*4); } +void Video_SetCursorPos(short X, short Y) +{ + struct { + uint16_t x; + uint16_t y; + } pos; + pos.x = giVideo_CursorX = X; + pos.y = giVideo_CursorY = Y; + ioctl(giTerminalFD, TERM_IOCTL_GETSETCURSOR, &pos); +} + void Video_FillRect(short X, short Y, short W, short H, uint32_t Color) { uint32_t *buf = gpScreenBuffer + Y*giScreenWidth + X; -- 2.20.1