Set dimensions, position & alignment separately
This commit is contained in:
		@ -11,7 +11,7 @@
 | 
			
		||||
constexpr const char* FT_LOGO_PATH = "resources/Fasttube_Logo-white.bmp";
 | 
			
		||||
constexpr const char* AVENIR_FONT_PATH = "resources/Avenir-Book.ttf";
 | 
			
		||||
 | 
			
		||||
class AMI : public View {
 | 
			
		||||
class AMI final : public View {
 | 
			
		||||
public:
 | 
			
		||||
  AMI(SDL_Renderer* renderer);
 | 
			
		||||
 | 
			
		||||
@ -20,5 +20,8 @@ public:
 | 
			
		||||
private:
 | 
			
		||||
  TTF_Font* avenir;
 | 
			
		||||
 | 
			
		||||
  std::vector<std::unique_ptr<Widget>> widgets;
 | 
			
		||||
  std::vector<Widget*> widgets;
 | 
			
		||||
 | 
			
		||||
  ImageWidget ft_logo;
 | 
			
		||||
  TextWidget choose;
 | 
			
		||||
};
 | 
			
		||||
@ -5,6 +5,7 @@
 | 
			
		||||
class View {
 | 
			
		||||
public:
 | 
			
		||||
  View(SDL_Renderer* renderer);
 | 
			
		||||
  virtual ~View();
 | 
			
		||||
 | 
			
		||||
  virtual void draw() = 0;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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