diff --git a/src/gui.c b/src/gui.c index d42084e..571ba01 100644 --- a/src/gui.c +++ b/src/gui.c @@ -188,14 +188,14 @@ int button ( x--; y--; - if(hover) { + if (hover) { SDL_SetRenderDrawColor(renderer, 255, 255, 160, 255); } else { white(renderer); } centerStr(renderer, str, x, y); - if(hover) { + if (hover) { white(renderer); } else { SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); @@ -205,6 +205,51 @@ int button ( return hover; } +/* input + * Draws a simple text input. Draws the string in buffer. If buffer is empty, + * the placeholder text is drawn instead (but in a darker color). Returns + * whether or not the mouse is inside of the input. + */ +int input ( + SDL_Renderer *renderer, + const char *placeholder, + const char *buffer, + int x, int y, int w, + int mouseX, int mouseY, + int active +) { + int hover = mouseX >= x && + mouseY >= y && + mouseX < x + w && + mouseY < y + 16 ; + + SDL_Rect rect; + rect.x = x; + rect.y = y; + rect.w = w; + rect.h = 16; + + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderFillRect(renderer, &rect); + + if (hover || active) { + white(renderer); + } else { + SDL_SetRenderDrawColor(renderer, 139, 139, 139, 255); + } + SDL_RenderDrawRect(renderer, &rect); + + if (buffer[0]) { + SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); + drawStr(renderer, buffer, x + 4, y + 4); + } else { + SDL_SetRenderDrawColor(renderer, 63, 63, 63, 255); + drawStr(renderer, placeholder, x + 4, y + 4); + } + + return hover; +} + /* drawSlot * Takes in a pointer to a renderer, an InvSlot, draws the item * with the specified x and y coordinates and width, and then diff --git a/src/gui.h b/src/gui.h index 0d31ca9..5382d97 100644 --- a/src/gui.h +++ b/src/gui.h @@ -7,21 +7,23 @@ #include "minecraftfont.h" #include "textures.h" -void strnum (char*, int, int); -int drawChar (SDL_Renderer*, int, int, int); -int drawStr (SDL_Renderer*, const char*, int, int); -int shadowStr (SDL_Renderer*, const char*, int, int); -int centerStr (SDL_Renderer*, const char*, int, int); -int shadowCenterStr (SDL_Renderer*, const char*, int, int); -int drawBig (SDL_Renderer*, const char*, int, int); -int drawBGStr (SDL_Renderer*, const char*, int, int); -int button (SDL_Renderer*, const char*, int, int, int, int, int); -int drawSlot (SDL_Renderer*, InvSlot*, int, int, int, int); -void dirtBg (SDL_Renderer*); -void loadScreen (SDL_Renderer*, const char*, float, float); +void strnum (char *, int, int); +int drawChar (SDL_Renderer *, int, int, int); +int drawStr (SDL_Renderer *, const char *, int, int); +int shadowStr (SDL_Renderer *, const char *, int, int); +int centerStr (SDL_Renderer *, const char *, int, int); +int shadowCenterStr (SDL_Renderer *, const char *, int, int); +int drawBig (SDL_Renderer *, const char *, int, int); +int drawBGStr (SDL_Renderer *, const char *, int, int); +int button (SDL_Renderer *, const char *, int, int, int, int, int); +int input (SDL_Renderer *, const char *, const char *, int, int, int, + int, int, int); +int drawSlot (SDL_Renderer *, InvSlot *, int, int, int, int); +void dirtBg (SDL_Renderer *); +void loadScreen (SDL_Renderer *, const char *, float, float); void chatAdd (const char*); -void white (SDL_Renderer*); -void tblack (SDL_Renderer*); +void white (SDL_Renderer *); +void tblack (SDL_Renderer *); extern const int BUFFER_W; extern const int BUFFER_H; diff --git a/src/menus.c b/src/menus.c index 76d2cb0..87718b1 100644 --- a/src/menus.c +++ b/src/menus.c @@ -74,6 +74,14 @@ void state_newWorld ( typeSelect = (typeSelect + 1) % 4; } + if (input(renderer, "", "Seed", + BUFFER_HALF_W - 64, 42, 128, + inputs->mouse.x, inputs->mouse.y, 0) && + inputs->mouse.left + ) { + + } + if (button(renderer, "Cancel", BUFFER_HALF_W - 64, 64, 61, inputs->mouse.x, inputs->mouse.y) &&