initial work

This commit is contained in:
Andrea Blankenstijn 2021-06-03 19:14:02 +02:00
parent 7d59169bd6
commit 2cd5a8e619
5 changed files with 141 additions and 0 deletions

35
button.cpp Normal file
View File

@ -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);
}

16
button.hpp Normal file
View File

@ -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

10
meson.build Normal file
View File

@ -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)

20
widget.hpp Normal file
View File

@ -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

60
widget_test.cpp Normal file
View File

@ -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;
}