X-Git-Url: https://git.ucc.asn.au/?p=tpg%2Facess2.git;a=blobdiff_plain;f=Usermode%2FApplications%2Faxwin4_src%2FUI%2Ftaskbar.c;fp=Usermode%2FApplications%2Faxwin4_src%2FUI%2Ftaskbar.c;h=b62a0420555fa8e62436820d5ef64515c0e8929b;hp=0000000000000000000000000000000000000000;hb=845b6f9d90bb87b5e760e4d49aa93b0e003ab750;hpb=67a7fe2bb79eceaf10c572a99bd8345c4e81cf5b diff --git a/Usermode/Applications/axwin4_src/UI/taskbar.c b/Usermode/Applications/axwin4_src/UI/taskbar.c new file mode 100644 index 00000000..b62a0420 --- /dev/null +++ b/Usermode/Applications/axwin4_src/UI/taskbar.c @@ -0,0 +1,92 @@ +/* + * AxWin4 GUI - UI Core + * - By John Hodge (thePowersGang) + * + * taskbar.c + * - Main toolbar (aka Taskbar) + */ +#include +#include "include/common.h" +#include "include/taskbar.h" +#include + +// === CONSTANTS === +#define TASKBAR_HEIGHT 30 +#define TASKBAR_BORDER 3 // Border between window edge and controls +#define TASKBAR_SYSBTN_SIZE (TASKBAR_HEIGHT-TASKBAR_BORDER*2) +#define TASKBAR_WIN_MAXSIZE 100 +#define TASKBAR_WIN_MINSIZE 24 +#define TASKBAR_CLOCKSIZE 60 + +// === TYPES === +typedef struct sTaskbar_Win tTaskbar_Win; +struct sTaskbar_Win +{ + tTaskbar_Win *Next; + const char *Title; +}; + +// === PROTOTYPES === + +// === GLOBALS === +tAxWin4_Window *gpTaskbar_Window; +unsigned int giTaskbar_NumWins = 0; +tTaskbar_Win *gpTaskbar_FirstWin; + +// === CODE === +void Taskbar_Create(void) +{ + gpTaskbar_Window = AxWin4_CreateWindow("taskbar"); + tAxWin4_Window * const win = gpTaskbar_Window; + + AxWin4_MoveWindow(win, 0, 0); + AxWin4_ResizeWindow(win, giScreenWidth, TASKBAR_HEIGHT); + + AxWin4_SetWindowFlags(win, AXWIN4_WNDFLAG_NODECORATE); + Taskbar_Redraw(); + AxWin4_ShowWindow(win, true); +} + +void Taskbar_Redraw(void) +{ + const int w = giScreenWidth; + const int h = TASKBAR_HEIGHT; + + const int active_height = h - TASKBAR_BORDER*2; + const int winlist_start_x = TASKBAR_BORDER+TASKBAR_SYSBTN_SIZE+TASKBAR_BORDER; + const int clock_start_x = w - (TASKBAR_BORDER+TASKBAR_CLOCKSIZE); + + // Window background: Toolbar skin + AxWin4_DrawControl(gpTaskbar_Window, 0, 0, w, h, AXWIN4_CTL_TOOLBAR, 0); + + // System button + // TODO: Use an image instead + AxWin4_DrawControl(gpTaskbar_Window, TASKBAR_BORDER, TASKBAR_BORDER, TASKBAR_SYSBTN_SIZE, active_height, AXWIN4_CTL_BUTTON, 0); + + // Windows + // TODO: Maintain/request a list of windows + if( giTaskbar_NumWins ) + { + int winbutton_size = (clock_start_x - winlist_start_x) / giTaskbar_NumWins; + if(winbutton_size > TASKBAR_WIN_MAXSIZE) winbutton_size = TASKBAR_WIN_MAXSIZE; + int x = winlist_start_x; + for(tTaskbar_Win *win = gpTaskbar_FirstWin; win; win = win->Next ) + { + AxWin4_DrawControl(gpTaskbar_Window, x, TASKBAR_BORDER, winbutton_size, active_height, AXWIN4_CTL_BUTTON, 0); + } + } + + // Clock + { + char timestr[5]; + time_t rawtime; + time(&rawtime); + strftime(timestr, 5, "%H%M", localtime(&rawtime)); + //AxWin4_DrawControl(gpTaskbar_Window, clock_start_x, TASKBAR_BORDER, TASKBAR_CLOCKSIZE, active_height, AXWIN4_CTL_BOX); + + AxWin4_DrawText(gpTaskbar_Window, clock_start_x, TASKBAR_BORDER, TASKBAR_CLOCKSIZE, active_height, 0, timestr); + } + + AxWin4_DamageRect(gpTaskbar_Window, 0, 0, w, h); +} +