]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - ui.c
Fast commit before Im off for 10 days. Please correct/undo my commit if it breaks...
[xonotic/darkplaces.git] / ui.c
diff --git a/ui.c b/ui.c
index 9097aaf5b2c772eb55c1d9b9670a198ace63e384..661ae30e2f5c76035e201eb170c26d1736e4b6de 100644 (file)
--- a/ui.c
+++ b/ui.c
@@ -1,7 +1,7 @@
 
 #include "quakedef.h"
 
-cvar_t ui_showname = {0, "ui_showname", "0"};
+/*cvar_t ui_showname = {0, "ui_showname", "0"};
 
 #define ITEM_CLICKABLE 1
 #define ITEM_DRAWABLE 2
@@ -14,63 +14,16 @@ cvar_t ui_showname = {0, "ui_showname", "0"};
 
 #define UI_MOUSEBUTTONS 3
 
-static int                     ui_alive, ui_active;
-static float           ui_mouse_x, ui_mouse_y;
-static int                     ui_mousebutton[UI_MOUSEBUTTONS], ui_mouseclick;
-static int                     ui_keyui, ui_keyitem;
-static ui_item_t       *ui_keyrealitem;
+static int ui_alive, ui_active;
+static float ui_mouse_x, ui_mouse_y;
+static int ui_mousebutton[UI_MOUSEBUTTONS], ui_mouseclick;
+static int ui_keyui, ui_keyitem;
+static ui_item_t *ui_keyrealitem;
 
 static ui_t *ui_list[MAX_UI_COUNT];
 
-//static qpic_t *ui_mousepointer;
-static rtexture_t *ui_mousepointertexture;
-
-static byte pointerimage[256] =
-{
-       "333333332......."
-       "26777761........"
-       "2655541........."
-       "265541.........."
-       "2654561........."
-       "26414561........"
-       "251.14561......."
-       "21...14561......"
-       "1.....141......."
-       ".......1........"
-       "................"
-       "................"
-       "................"
-       "................"
-       "................"
-       "................"
-};
-
-static rtexturepool_t *uitexturepool;
-
 static void ui_start(void)
-{
-       int i;
-       byte buffer[256][4];
-       uitexturepool = R_AllocTexturePool();
-//     ui_mousepointer = Draw_CachePic("ui/mousepointer.lmp");
-       for (i = 0;i < 256;i++)
-       {
-               if (pointerimage[i] == '.')
-               {
-                       buffer[i][0] = 0;
-                       buffer[i][1] = 0;
-                       buffer[i][2] = 0;
-                       buffer[i][3] = 0;
-               }
-               else
-               {
-                       buffer[i][0] = (pointerimage[i] - '0') * 16;
-                       buffer[i][1] = (pointerimage[i] - '0') * 16;
-                       buffer[i][2] = (pointerimage[i] - '0') * 16;
-                       buffer[i][3] = 255;
-               }
-       }
-       ui_mousepointertexture = R_LoadTexture(uitexturepool, "mousepointer", 16, 16, &buffer[0][0], TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE);
+{      
        ui_mouse_x = vid.conwidth * 0.5;
        ui_mouse_y = vid.conheight * 0.5;
        ui_alive = true;
@@ -78,10 +31,7 @@ static void ui_start(void)
 
 static void ui_shutdown(void)
 {
-//     ui_mousepointer = NULL;
-       ui_mousepointertexture = NULL;
        ui_alive = false;
-       R_FreeTexturePool(&uitexturepool);
 }
 
 static void ui_newmap(void)
@@ -95,6 +45,7 @@ void ui_init(void)
        uimempool = Mem_AllocPool("UI");
 
        Cvar_RegisterVariable(&ui_showname);
+
        R_RegisterModule("UI", ui_start, ui_shutdown, ui_newmap);
 }
 
@@ -142,7 +93,7 @@ void ui_clear(ui_t *ui)
 void ui_item
 (
        ui_t *ui, char *basename, int number,
-       float x, float y, qpic_t *pic, char *string,
+       float x, float y, char *picname, char *string,
        float left, float top, float width, float height,
        void(*leftkey)(void *nativedata1, void *nativedata2, float data1, float data2),
        void(*rightkey)(void *nativedata1, void *nativedata2, float data1, float data2),
@@ -168,12 +119,12 @@ void ui_item
                ui->item_count++;
        }
        memset(it, 0, sizeof(ui_item_t));
-       strncpy(it->name, itemname, 32);
+       strlcpy (it->name, itemname, sizeof (it->name));
        it->flags = 0;
-       if (pic || string)
+       if (picname || string)
        {
                it->flags |= ITEM_DRAWABLE;
-               it->draw_pic = pic;
+               it->draw_picname = picname;
                it->draw_string = string;
                it->draw_x = x;
                it->draw_y = y;
@@ -283,7 +234,7 @@ int ui_isactive(void)
 }
 
 #define UI_QUEUE_SIZE 256
-static byte ui_keyqueue[UI_QUEUE_SIZE];
+static qbyte ui_keyqueue[UI_QUEUE_SIZE];
 static int ui_keyqueuepos = 0;
 
 void ui_leftkeyupdate(int pressed)
@@ -432,29 +383,170 @@ void ui_draw(void)
                                        for (i = 0, it = ui->items;i < ui->item_count;i++, it++)
                                                if (it->flags & ITEM_DRAWABLE)
                                                {
-                                                       if (it->draw_pic)
-                                                               Draw_Pic(it->draw_x, it->draw_y, it->draw_pic);
+                                                       if (it->draw_picname)
+                                                               DrawQ_Pic(it->draw_x, it->draw_y, it->draw_picname, 0, 0, 1, 1, 1, 1, 0);
                                                        if (it->draw_string)
-                                                               Draw_String(it->draw_x, it->draw_y, it->draw_string, 9999);
+                                                               DrawQ_String(it->draw_x, it->draw_y, it->draw_string, 0, 8, 8, 1, 1, 1, 1, 0);
                                                }
 
                if ((it = ui_hititem(ui_mouse_x, ui_mouse_y)))
                {
-                       if (it->draw_pic)
-                               Draw_AdditivePic(it->draw_x, it->draw_y, it->draw_pic);
+                       if (it->draw_picname)
+                               DrawQ_Pic(it->draw_x, it->draw_y, it->draw_picname, 0, 0, 1, 1, 1, 1, DRAWFLAG_ADDITIVE);
                        if (it->draw_string)
-                               Draw_AdditiveString(it->draw_x, it->draw_y, it->draw_string, 9999);
+                               DrawQ_String(it->draw_x, it->draw_y, it->draw_string, 0, 8, 8, 1, 1, 1, 1, DRAWFLAG_ADDITIVE);
                        if (ui_showname.integer)
-                               Draw_String(ui_mouse_x, ui_mouse_y + 16, it->name, 9999);
+                               DrawQ_String(ui_mouse_x, ui_mouse_y + 16, it->name, 0, 8, 8, 1, 1, 1, 1, 0);
        }
 
                it = ui_keyrealitem;
-               if (it->draw_pic)
-                       Draw_AdditivePic(it->draw_x, it->draw_y, it->draw_pic);
+               if (it->draw_picname)
+                       DrawQ_Pic(it->draw_x, it->draw_y, it->draw_picname, 0, 0, 1, 1, 1, 1, DRAWFLAG_ADDITIVE);
                if (it->draw_string)
-                       Draw_AdditiveString(it->draw_x, it->draw_y, it->draw_string, 9999);
+                       DrawQ_String(it->draw_x, it->draw_y, it->draw_string, 0, 8, 8, 1, 1, 1, 1, DRAWFLAG_ADDITIVE);
 
-//             Draw_Pic(ui_mouse_x, ui_mouse_y, ui_mousepointer);
-               Draw_GenericPic(ui_mousepointertexture, 1, 1, 1, 1, ui_mouse_x, ui_mouse_y, 16, 16);
+               DrawQ_Pic(ui_mouse_x, ui_mouse_y, "ui/mousepointer.tga", 0, 0, 1, 1, 1, 1, 0);
        }
+}*/
+
+#define FRAME_THICKNESS        2
+#define FRAME_COLOR1   0.2, 0.2, 0.5, 0, 0
+#define FRAME_COLOR2   0, 0, 0, 0.6, 0
+#define TEXT_FONTSIZE  10, 10
+
+static void UIG_DrawFrame(float x, float y, float w, float h)
+{
+       // bottom
+       DrawQ_Fill(x - FRAME_THICKNESS, y - FRAME_THICKNESS, w + 2 * FRAME_THICKNESS, FRAME_THICKNESS, FRAME_COLOR1);
+       // top
+       DrawQ_Fill(x - FRAME_THICKNESS, y + h, w + 2 * FRAME_THICKNESS, FRAME_THICKNESS, FRAME_COLOR1);
+       // left
+       DrawQ_Fill(x - FRAME_THICKNESS, y, FRAME_THICKNESS, h, FRAME_COLOR1);
+       // right
+       DrawQ_Fill(x + w, y, FRAME_THICKNESS, h, FRAME_COLOR1);
+       // area
+       DrawQ_Fill(x, y, w, h, FRAME_COLOR2);
+} 
+
+static void UIG_DrawText(const char *text, float x, float y, float w, float h, float r, float g, float b, float a, float f)
+{
+       if(w != 0 && h != 0)
+               DrawQ_SetClipArea(x, y, w, h);
+       DrawQ_String(x, y, text, 0, TEXT_FONTSIZE, r, g, b, a , f);
+       if(w != 0 && h != 0)    
+               DrawQ_ResetClipArea();
+}
+
+void UI_Init(void)
+{
 }
+
+void UI_Key(ui_itemlist_t list, int key, int ascii)
+{
+}
+
+void UI_Draw(ui_itemlist_t list)
+{
+}
+
+void UI_SetFocus(ui_itemlist_t list, ui_item_t item)
+{
+}
+
+void UI_SetNeighbors(ui_item_t left, ui_item_t right, ui_item_t up, ui_item_t down)
+{
+}
+
+// item stuff
+ui_item_t UI_CreateButton(const char *caption, float x, float y, void(*action)(ui_item_t))
+{
+       return NULL;
+}
+
+ui_item_t UI_CreateLabel(const char *caption, float x, float y)
+{
+       return NULL;
+}
+
+ui_item_t UI_CreateText(const char *caption, float x, float y, const char *allowed, int maxlen, int scrolllen)
+{
+       return NULL;
+}
+
+void UI_FreeItem(ui_item_t item)
+{
+}
+
+const char* UI_GetCaption(ui_item_t item)
+{
+}
+
+void UI_SetCaption(ui_item_t item, const char * caption)
+{
+}
+
+// itemlist stuff
+ui_itemlist_t UI_CreateItemList(float x, float y)
+{
+       return NULL;
+}
+
+void UI_FreeItemList(ui_itemlist_t list)
+{
+}
+
+void UI_AddItem(ui_itemlist_t list, ui_item_t item)
+{
+}
+
+// AK: callback system stuff
+static ui_callback_t ui_callback_list[UI_MAX_CALLBACK_COUNT];
+
+void UI_Callback_Init(void)
+{
+       memset(ui_callback_list, 0, sizeof(ui_callback_list));
+}
+
+int  UI_Callback_GetFreeSlot(void)
+{
+       int i;
+       for(i = 0; ui_callback_list[i].flag & UI_SLOTUSED && i < UI_MAX_CALLBACK_COUNT; i++);
+
+       if(i == UI_MAX_CALLBACK_COUNT)
+               return -1;
+       else
+               return i;
+}
+
+int UI_Callback_IsSlotUsed(int slotnr)
+{
+       if(slotnr < 0 || slotnr >= UI_MAX_CALLBACK_COUNT)
+               return false;
+       return (ui_callback_list[slotnr].flag & UI_SLOTUSED);
+}
+
+void UI_Callback_SetupSlot(int slotnr, void(*keydownf)(int num, char ascii), void(*drawf)(void))
+{
+       ui_callback_list[slotnr].flag = UI_SLOTUSED;
+       ui_callback_list[slotnr].draw = drawf;
+       ui_callback_list[slotnr].keydown = keydownf;
+}
+
+void UI_Callback_ResetSlot(int slotnr)
+{
+       ui_callback_list[slotnr].flag = 0;
+}
+
+void UI_Callback_Draw(void)
+{
+       int i;
+       for(i = 0; i < UI_MAX_CALLBACK_COUNT; i++)
+               if(ui_callback_list[i].flag & UI_SLOTUSED && ui_callback_list[i].draw)
+                       ui_callback_list[i].draw();
+}
+
+void UI_Callback_KeyDown(int num, char ascii)
+{
+       if(ui_callback_list[key_dest - 3].flag & UI_SLOTUSED && ui_callback_list[key_dest - 3].keydown)
+               ui_callback_list[key_dest - 3].keydown(num, ascii);
+}
\ No newline at end of file