← index
cplusplus2x.Examples/C++20/MasterX/src/dimension.hpp
Source: cplusplus2x.Examples/C++20/MasterX/src/dimension.hpp
#ifndef _DIMENSION_H

#define _DIMENSION_H


#include "mx_event.hpp"

#include "window.hpp"

#include <functional>

#include <iostream>

#include <memory>

#include <string>

#include <vector>


namespace mx {

    extern bool cursor_shown;

    class Window;
    class SystemBar;
    class MenuBar;

    class DimensionContainer : public Screen {
      public:
        std::string name = "Default";
        DimensionContainer(mxApp &app);
        virtual ~DimensionContainer();
        void init(SystemBar *sysbar, const std::string &name, SDL_Texture *wallpaperx);
        virtual void draw(mxApp &app) override;
        virtual bool event(mxApp &app, SDL_Event &e) override;
        std::vector<std::unique_ptr<Screen>> objects;
        std::vector<Window *> mini_win;
        void setActive(bool a);
        bool isActive() const;
        void setVisible(bool v);
        bool isVisible() const;
        void startTransition(SDL_Texture *);
        void updateTransition();
        void destroyWindow(Window *win);
        Window *createWindow(mxApp &app);
        bool hoveringX = false;
        SDL_Texture *wallpaper, *nextWallpaper;
        EventHandler events;

      private:
        SystemBar *system_bar;
        bool active = false;
        bool visible = false;
        bool transitioning = false;
        int currentDimension = 0;
        int nextDimension = -1;
        int transitionAlpha = 255;
        int transitionSpeed = 3;
    };

    class Terminal;
    class Label;
    class Button;
    class Image;

    class Dimension : public Screen {
      public:
        Dimension(mxApp &app);
        virtual ~Dimension();
        void setCurrentDimension(int dim);
        int getCurrentDimension() const;
        virtual void draw(mxApp &app) override;
        virtual bool event(mxApp &app, SDL_Event &e) override;
        void drawDash(mxApp &app);
        Screen *getDimension();
        Screen *getDimension(int index);

      private:
        SDL_Texture *wallpaper;
        std::vector<std::unique_ptr<Screen>> objects;
        std::vector<std::unique_ptr<Screen>> dimensions;
        DimensionContainer *welcome, *dash;
        DimensionContainer *about;
        DimensionContainer *term;
        SystemBar *system_bar;
        Window *welcome_window, *welcome_help;
        Window *about_window, *settings_window;
        Button *about_window_ok, *welcome_ok, *toggle_fullscreen;
        Image *welcome_image;
        Label *about_window_info, *welcome_help_info;
        Image *about_window_logo;
        int current_dim;
        SDL_Texture *hand_cursor, *reg_cursor;
        int cursor_x = 0, cursor_y = 0;
        Terminal *termx;
    };

} // namespace mx


#endif