cplusplus2x.Examples/C++20/MasterX/src/mx_system_bar.hpp
Source: cplusplus2x.Examples/C++20/MasterX/src/mx_system_bar.hpp
#ifndef _MXSYSTEM_BAR_H_
#define _MXSYSTEM_BAR_H_
#include "window.hpp"
#include <algorithm>
#include <memory>
#include <vector>
namespace mx {
class MenuBar : public Screen {
public:
MenuBar(mxApp &app);
virtual ~MenuBar();
virtual void draw(mxApp &app) override;
virtual bool event(mxApp &app, SDL_Event &e) override;
bool menuOpen;
bool animating;
int currentY;
int targetY;
int itemClicked(mxApp &app, int x, int y);
private:
TTF_Font *font;
SDL_Surface *itemSurface;
SDL_Texture *itemTexture;
SDL_Rect itemRect = {0, 0, 0, 0};
SDL_Color white;
};
class Window;
class SystemBar : public Screen {
public:
SystemBar(mxApp &app);
virtual ~SystemBar();
virtual void draw(mxApp &app) override;
virtual bool event(mxApp &app, SDL_Event &e) override;
void setDimensions(std::vector<std::unique_ptr<Screen>> *dim);
void setCurrentDimension(int dim);
int getCurrentDimension() const;
void activateDimension(int dim);
void deactivateDimension(int dim);
bool empty() const;
void addMinimizedWindow(Window *win);
void performAction(mxApp &app, int action);
void loadDimension(int id);
void restoreWindow(Window *window);
void drawMinimizedMenu(mxApp &app, int button_x, int button_y, int button_width);
friend class Window;
private:
bool holdingDimension = false;
bool showMinimizedMenu = false;
Uint32 holdStartTime = 0;
int yPos = 0;
bool animationComplete = false;
TTF_Font *font;
SDL_Color start_bg = {0, 0, 0, 225};
bool isHovering = false;
std::vector<std::unique_ptr<Screen>> objects;
std::vector<std::unique_ptr<Screen>> *dimensions;
MenuBar *menu;
int cur_dim = 0;
int prev_dim = 0;
int hoverIndex = 0;
bool menuHover = false;
void drawDimensions(mxApp &app);
std::vector<int> activeDimensionsStack;
std::vector<Window *> minimizedWindows;
};
} // namespace mx
#endif