metaforce/specter/include/Specter/ModalWindow.hpp

81 lines
2.0 KiB
C++
Raw Normal View History

#ifndef SPECTER_MODAL_WINDOW_HPP
#define SPECTER_MODAL_WINDOW_HPP
#include <Specter/View.hpp>
#include <Specter/MultiLineTextView.hpp>
namespace Specter
{
class ModalWindow : public View
{
2016-01-13 01:31:50 +00:00
public:
enum class Phase
{
BuildIn,
ResWait,
Showing,
BuildOut,
Done
2016-01-13 01:31:50 +00:00
};
private:
int m_frame = 0;
int m_contentStartFrame = 0;
float m_lineTime = 0.0;
Phase m_phase = Phase::BuildIn;
int m_width = 0;
int m_height = 0;
2015-12-20 04:39:09 +00:00
RectangleConstraint m_constraint;
Zeus::CColor m_windowBg;
Zeus::CColor m_windowBgClear;
Zeus::CColor m_line1;
Zeus::CColor m_line2;
Zeus::CColor m_line2Clear;
ViewBlock m_viewBlock;
boo::IGraphicsBufferD* m_viewBlockBuf;
struct
{
SolidShaderVert lineVerts[22];
SolidShaderVert fillVerts[16];
} m_verts;
void setLineVerts(int width, int height, float pf, float t);
void setLineVertsOut(int width, int height, float pf, float t);
void setLineColors(float t);
void setLineColorsOut(float t);
void setFillVerts(int width, int height, float pf);
void setFillColors(float t);
VertexBufferBinding m_vertsBinding;
2015-12-18 03:26:10 +00:00
boo::GraphicsDataToken m_windowGfxData;
std::unique_ptr<TextView> m_cornersOutline[4];
std::unique_ptr<TextView> m_cornersFilled[4];
protected:
virtual void updateContentOpacity(float opacity) {}
2016-01-03 02:42:52 +00:00
RectangleConstraint& constraint() {return m_constraint;}
public:
2016-01-02 23:07:40 +00:00
ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint, const Zeus::CColor& bgColor);
2015-12-20 04:39:09 +00:00
ModalWindow(ViewResources& res, View& parentView, const RectangleConstraint& constraint);
void think();
bool skipBuildInAnimation();
2016-01-04 23:58:38 +00:00
void close(bool skipAnimation=false);
bool closed() const {return m_phase >= Phase::BuildOut;}
2016-01-13 01:31:50 +00:00
ModalWindow::Phase phase() const {return m_phase;}
void resized(const boo::SWindowRect& root, const boo::SWindowRect& sub);
void draw(boo::IGraphicsCommandQueue* gfxQ);
};
}
#endif // SPECTER_MODAL_WINDOW_HPP