Set dimensions, position & alignment separately
This commit is contained in:
@ -6,24 +6,36 @@
|
||||
#include <optional>
|
||||
#include <string>
|
||||
|
||||
enum class Alignment { LEFT, RIGHT, CENTER };
|
||||
struct PositionInfo {
|
||||
int x;
|
||||
int y;
|
||||
Alignment align;
|
||||
};
|
||||
|
||||
class Widget {
|
||||
public:
|
||||
Widget(SDL_Renderer* renderer, SDL_Rect dest_rect);
|
||||
Widget(SDL_Renderer* renderer);
|
||||
virtual ~Widget();
|
||||
|
||||
virtual void update_rect(SDL_Rect new_rect);
|
||||
virtual void set_width(int width, bool preserve_aspect_ratio = true);
|
||||
virtual void set_height(int height, bool preserve_aspect_ratio = true);
|
||||
virtual void set_position(int x, int y);
|
||||
virtual void set_alignment(Alignment align);
|
||||
|
||||
virtual void draw() = 0;
|
||||
|
||||
protected:
|
||||
void recalculate_rect();
|
||||
|
||||
SDL_Renderer* renderer;
|
||||
SDL_Rect dest_rect;
|
||||
SDL_Rect rect;
|
||||
PositionInfo pos;
|
||||
};
|
||||
|
||||
class TextureWidget : public Widget {
|
||||
public:
|
||||
TextureWidget(SDL_Renderer* renderer, SDL_Rect dest_rect,
|
||||
std::optional<SDL_Texture*> texture);
|
||||
TextureWidget(SDL_Renderer* renderer, std::optional<SDL_Texture*> texture);
|
||||
~TextureWidget();
|
||||
|
||||
virtual void draw() override;
|
||||
@ -31,18 +43,18 @@ public:
|
||||
void update_texture(SDL_Texture* new_texture);
|
||||
|
||||
private:
|
||||
void update_dimensions_from_texture(SDL_Texture* texture);
|
||||
std::optional<SDL_Texture*> texture;
|
||||
};
|
||||
|
||||
class ImageWidget : public TextureWidget {
|
||||
public:
|
||||
ImageWidget(SDL_Renderer* renderer, SDL_Rect dest_rect,
|
||||
const std::string& path);
|
||||
ImageWidget(SDL_Renderer* renderer, const std::string& path);
|
||||
};
|
||||
|
||||
class TextWidget : public TextureWidget {
|
||||
public:
|
||||
TextWidget(SDL_Renderer* renderer, SDL_Rect dest_rect, TTF_Font* font,
|
||||
TextWidget(SDL_Renderer* renderer, TTF_Font* font,
|
||||
const std::string& initial_text = "");
|
||||
~TextWidget();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user