- [WIP] nova UI
This commit is contained in:
1 parent
6c205fb014
commit
dedd6b6285
4 files changed
+57
-2
No files matched your search
+12
-1
@@ -16,8 +16,8 @@ namespace ui
|
||||
|
||||
Context::~Context()
|
||||
{
|
||||
SDL_DestroyRenderer(this->ren);
|
||||
SDL_DestroyTexture(this->fontTex);
|
||||
SDL_DestroyRenderer(this->ren);
|
||||
}
|
||||
|
||||
SDL_Texture *Context::CreateTexture(int width, int height)
|
||||
@@ -88,6 +88,12 @@ namespace ui
|
||||
return ( (tmp_x >= x) && (tmp_x < x+w) && (tmp_y >= y) && (tmp_y < y+h) );
|
||||
}
|
||||
|
||||
void Context::Clear(uint32_t color)
|
||||
{
|
||||
SDL_SetRenderDrawColor(ren, (color>>16)&0xff, (color>>8)&0xff, color&0xff, (color>>24)&0xff);
|
||||
SDL_RenderClear(ren);
|
||||
}
|
||||
|
||||
void Context::DrawRect(int x, int y, int w, int h, uint32_t color)
|
||||
{
|
||||
SDL_FRect rect {float(this->offsetX+x), float(this->offsetY+y), float(w), float(h)};
|
||||
@@ -123,4 +129,9 @@ namespace ui
|
||||
SDL_SetTextureColorMod(this->fontTex, (color>>16)&0xff, (color>>8)&0xff, color&0xff);
|
||||
for (int i=0; i<(int)strlen(text);++i) if (text[i]!=32) DrawChar(x+i*CHR_W, y, text[i]);
|
||||
}
|
||||
|
||||
void Context::Present()
|
||||
{
|
||||
SDL_RenderPresent(this->ren);
|
||||
}
|
||||
}
|
||||
@@ -22,12 +22,15 @@ namespace ui
|
||||
|
||||
bool IsMouseInside(int x, int y, int w, int h);
|
||||
|
||||
void Clear(uint32_t color);
|
||||
void DrawRect(int x, int y, int w, int h, uint32_t color);
|
||||
void FillRect(int x, int y, int w, int h, uint32_t color);
|
||||
void DrawLine(int x1, int y1, int x2, int y2, uint32_t color);
|
||||
void DrawChar(int x, int y, char chr, uint32_t color=0xffffffff);
|
||||
void DrawText(int x, int y, const char *text, uint32_t color);
|
||||
|
||||
void Present();
|
||||
|
||||
protected:
|
||||
SDL_Window *win;
|
||||
SDL_Renderer *ren;
|
||||
|
||||
+40
-1
@@ -26,16 +26,55 @@ namespace ui
|
||||
bool Window::HandleEvents(SDL_Event *e)
|
||||
{
|
||||
switch (e->type) {
|
||||
case SDL_EVENT_WINDOW_EXPOSED:
|
||||
case SDL_EVENT_WINDOW_SHOWN:
|
||||
this->Update();
|
||||
break;
|
||||
|
||||
case SDL_EVENT_MOUSE_MOTION:
|
||||
input.mouse.x = e->motion.x;
|
||||
input.mouse.y = e->motion.y;
|
||||
this->Update();
|
||||
break;
|
||||
|
||||
// ...
|
||||
case SDL_EVENT_MOUSE_BUTTON_DOWN:
|
||||
input.mouse.buttons[e->button.button-1] = mbsDown;
|
||||
this->Update();
|
||||
input.mouse.buttons[e->button.button-1] = mbsPressed;
|
||||
break;
|
||||
|
||||
case SDL_EVENT_MOUSE_BUTTON_UP:
|
||||
input.mouse.buttons[e->button.button-1] = mbsUp;
|
||||
this->Update();
|
||||
input.mouse.buttons[e->button.button-1] = mbsReleased;
|
||||
break;
|
||||
|
||||
case SDL_EVENT_MOUSE_WHEEL:
|
||||
input.mouse.wheel = e->wheel.integer_y;
|
||||
this->Update();
|
||||
input.mouse.wheel = 0;
|
||||
break;
|
||||
|
||||
case SDL_EVENT_KEY_DOWN:
|
||||
input.keyboard.keyDown = e->key.scancode;
|
||||
this->Update();
|
||||
input.keyboard.keyDown = 0;
|
||||
break;
|
||||
|
||||
case SDL_EVENT_KEY_UP:
|
||||
input.keyboard.keyUp = e->key.scancode;
|
||||
this->Update();
|
||||
input.keyboard.keyUp = 0;
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
void Window::Update()
|
||||
{
|
||||
this->context->Clear(0xff1e1e1e);
|
||||
}
|
||||
|
||||
/* MÈTODES ESTATICS */
|
||||
/* ================ */
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace ui
|
||||
struct {
|
||||
int x, y;
|
||||
MouseButtonState buttons[3] = {mbsReleased, mbsReleased, mbsReleased};
|
||||
int wheel = 0;
|
||||
} mouse;
|
||||
struct {
|
||||
uint8_t keyDown = 0;
|
||||
@@ -25,6 +26,7 @@ namespace ui
|
||||
~Window();
|
||||
|
||||
bool HandleEvents(SDL_Event *e);
|
||||
virtual void Update();
|
||||
|
||||
static void DistributeEvent(SDL_Event *e);
|
||||
|
||||
|
||||
Reference in new issue
Block a user