initial work
This commit is contained in:
parent
7d59169bd6
commit
2cd5a8e619
|
@ -0,0 +1,35 @@
|
|||
#include "button.hpp"
|
||||
#include "widget.hpp"
|
||||
#include <SDL2/SDL_render.h>
|
||||
|
||||
Button::Button(SDL_Renderer* r, SDL_Rect& vp)
|
||||
: Widget(r, vp)
|
||||
{
|
||||
}
|
||||
|
||||
void Button::handle_event(const SDL_Event& ev)
|
||||
{
|
||||
}
|
||||
|
||||
void Button::render()
|
||||
{
|
||||
SDL_Rect old_vp;
|
||||
|
||||
SDL_RenderGetViewport(_renderer, &old_vp);
|
||||
SDL_RenderSetViewport(_renderer, &viewport);
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
SDL_SetRenderDrawColor(
|
||||
_renderer,
|
||||
background_color.r * 10 / (i + 11),
|
||||
background_color.g * 10 / (i + 11),
|
||||
background_color.b * 10 / (i + 11),
|
||||
background_color.a
|
||||
);
|
||||
SDL_Rect rect = {i, i, viewport.w - i * 2, viewport.h - 2 * i};
|
||||
SDL_RenderFillRect(_renderer, &rect);
|
||||
}
|
||||
|
||||
SDL_RenderSetViewport(_renderer, &old_vp);
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef BUTTON_HPP
|
||||
#define BUTTON_HPP
|
||||
|
||||
#include "widget.hpp"
|
||||
|
||||
class Button : Widget
|
||||
{
|
||||
public:
|
||||
SDL_Color background_color = {100, 100, 100, SDL_ALPHA_OPAQUE};
|
||||
|
||||
Button(SDL_Renderer*, SDL_Rect&);
|
||||
virtual void handle_event(const SDL_Event&);
|
||||
virtual void render();
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,10 @@
|
|||
project('sdl2_basic_widgets', 'cpp',
|
||||
version : '0.1',
|
||||
default_options : ['warning_level=3', 'cpp_std=c++14'])
|
||||
|
||||
executable('sdl2_basic_widgets',
|
||||
'widget_test.cpp',
|
||||
'button.cpp',
|
||||
dependencies : [
|
||||
dependency('sdl2')],
|
||||
install : true)
|
|
@ -0,0 +1,20 @@
|
|||
#ifndef WIDGET_HPP
|
||||
#define WIDGET_HPP
|
||||
|
||||
#include <SDL2/SDL.h>
|
||||
|
||||
class Widget
|
||||
{
|
||||
protected:
|
||||
SDL_Renderer* _renderer;
|
||||
|
||||
public:
|
||||
SDL_Rect& viewport;
|
||||
|
||||
Widget(SDL_Renderer* r, SDL_Rect& vp) : _renderer(r), viewport(vp) {};
|
||||
virtual ~Widget() {}
|
||||
virtual void handle_event(const SDL_Event&) = 0;
|
||||
virtual void render() = 0;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,60 @@
|
|||
#include "button.hpp"
|
||||
#include <SDL2/SDL_pixels.h>
|
||||
#include <SDL2/SDL_render.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
int width = 320;
|
||||
int height = 240;
|
||||
|
||||
SDL_Init(SDL_INIT_VIDEO);
|
||||
SDL_Window* win = SDL_CreateWindow(
|
||||
"Widget test",
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
width,
|
||||
height,
|
||||
SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE
|
||||
);
|
||||
SDL_Renderer* rend = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
|
||||
SDL_SetRenderDrawBlendMode(rend, SDL_BLENDMODE_BLEND);
|
||||
|
||||
SDL_Rect widget_vp = {10, 10, width - 20, height - 20};
|
||||
Button widget = Button(rend, widget_vp);
|
||||
bool quit = false;
|
||||
while (!quit)
|
||||
{
|
||||
SDL_Event ev;
|
||||
while (SDL_PollEvent(&ev) != 0)
|
||||
{
|
||||
switch (ev.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
quit = true;
|
||||
break;
|
||||
case SDL_WINDOWEVENT:
|
||||
if (ev.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
|
||||
{
|
||||
SDL_GetRendererOutputSize(rend, &width, &height);
|
||||
widget_vp.w = width - 20;
|
||||
widget_vp.h = height - 20;
|
||||
}
|
||||
break;
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
//_handle_click({ev.button.x, ev.button.y});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(rend, 0, 0, 0, SDL_ALPHA_OPAQUE);
|
||||
SDL_RenderClear(rend);
|
||||
|
||||
widget.render();
|
||||
SDL_RenderPresent(rend);
|
||||
}
|
||||
|
||||
SDL_DestroyRenderer(rend);
|
||||
SDL_DestroyWindow(win);
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue