summaryrefslogtreecommitdiff
path: root/include/JSystem/J2DGraph/J2DPane.h
blob: 81b2e28c08324985f52e64f81b9ab271a337af00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#ifndef J2DPANE_H
#define J2DPANE_H

#include "JSystem/JGeometry.h"
#include "JSystem/JSupport/JSUList.h"
#include "dolphin/mtx/mtx.h"

class J2DGrafContext;
class JSURandomInputStream;

enum J2DRotateAxis {
    /* 0x78 */ ROTATE_X = 'x',
    /* 0x79 */ ROTATE_Y = 'y',
    /* 0x7A */ ROTATE_Z = 'z'
};

enum J2DBasePosition {
    J2DBasePosition_TopLeft,
    J2DBasePosition_TopMiddle,
    J2DBasePosition_TopRight,
    J2DBasePosition_CenterLeft,
    J2DBasePosition_CenterMiddle,
    J2DBasePosition_CenterRight,
    J2DBasePosition_BottomLeft,
    J2DBasePosition_BottomMiddle,
    J2DBasePosition_BottomRight,
};

struct J2DPaneHeader {
    /* 0x0 */ u32 mMagic;
    /* 0x4 */ u32 mSize;
};

class J2DPane {
public:
    struct J2DScrnBlockHeader {
        /* 0x00 */ u32 mMagic;
        /* 0x04 */ u32 mSize;
    };

    J2DPane();
    J2DPane(J2DPane*, bool, u32, const JGeometry::TBox2<f32>&);
    J2DPane(u32, const JGeometry::TBox2<f32>&);
    J2DPane(J2DPane*, JSURandomInputStream*);
    void initiate();
    void makePaneStream(J2DPane* other, JSURandomInputStream* stream);
    bool insertChild(J2DPane* before, J2DPane* child);
    void draw(f32 x, f32 y, const J2DGrafContext* ctx, bool clip);
    void clip(const JGeometry::TBox2<f32>& bounds);
    void setBasePosition(J2DBasePosition position);

    virtual ~J2DPane();
    virtual u16 getTypeID() { return 0x10; }
    virtual void move(f32 x, f32 y);
    virtual void add(f32 x, f32 y);

    // fakematch, this fake inline is only needed by the J2DPane::resize call inside of J2DWindow::resize
    f32 resize__getMinX() const { return mBounds.i.x; }
    virtual void resize(f32 w, f32 h) {
        f32 x = resize__getMinX();
        x += w;
        mBounds.f.x = x;
        mBounds.f.y = mBounds.i.y + h;
    }
    virtual bool setConnectParent(bool connected) {
        mIsConnectParent = 0;
        return false;
    }
    virtual void calcMtx() {
        if (mPaneTree.mList) {
            makeMatrix(mBounds.i.x, mBounds.i.y);
        }
    }
    virtual void update() {}
    virtual void drawSelf(f32 x, f32 y) {}
    virtual void drawSelf(f32 x, f32 y, Mtx* mtx) {}
    virtual J2DPane* search(u32 tag);
    virtual void makeMatrix(f32 x, f32 y);

    f32 getWidth() { return mBounds.getWidth(); }
    f32 getHeight() { return mBounds.getHeight(); }
    JSUTree<J2DPane>* getFirstChild() { return mPaneTree.getFirstChild(); }
    JSUTree<J2DPane>* getEndChild() { return mPaneTree.getEndChild(); }
    const JSUTree<J2DPane>* getPaneTree() { return &mPaneTree; }
    u8 getAlpha() const { return mAlpha; }
    void setAlpha(u8 alpha) { mAlpha = alpha; }
    bool isConnectParent() const { return mIsConnectParent; }
    void show() { mVisible = true; }
    void hide() { mVisible = false; }
    bool isVisible() { return mVisible; }

    const JGeometry::TBox2<f32>& getBounds() { return mBounds; }
    const JGeometry::TBox2<f32>& getGlbBounds() { return mGlobalBounds; }
    f32 getRotate() const { return mRotation; }
    void place(const JGeometry::TBox2<f32>&) {}
    void rotate(f32 angle) {
        mRotation = angle;
        calcMtx();
    }
    void rotate(f32 offsetX, f32 offsetY, J2DRotateAxis axis, f32 angle) {
        mBasePosition.x = offsetX;
        mBasePosition.y = offsetY;
        mRotationAxis = axis;
        mRotation = angle;
        calcMtx();
    }
    void setInfluencedAlpha(bool) {}

public:
    /* 0x04 */ u32 mMagic;
    /* 0x08 */ int mTag;
    /* 0x0C */ JGeometry::TBox2<f32> mBounds;
    /* 0x1C */ JGeometry::TBox2<f32> mGlobalBounds;
    /* 0x2C */ JGeometry::TBox2<f32> mDrawBounds;
    /* 0x3C */ Mtx mMtx;
    /* 0x6C */ Mtx mDrawMtx;
    /* 0x9C */ JGeometry::TVec2<f32> mBasePosition;
    /* 0xA4 */ f32 mRotation;
    /* 0xA8 */ s8 mRotationAxis;
    /* 0xA9 */ u8 m2DBasePosition;
    /* 0xAA */ bool mVisible;
    /* 0xAB */ u8 mCullMode;
    /* 0xAC */ u8 mAlpha;
    /* 0xAD */ u8 mDrawAlpha;
    /* 0xAE */ u8 mInheritAlpha;
    /* 0xAF */ u8 mIsConnectParent;
    /* 0xB0 */ JSUTree<J2DPane> mPaneTree;
};

#endif /* J2DPANE_H */