summaryrefslogtreecommitdiff
path: root/include/JSystem/J2DGraph/J2DPane.h
blob: 646c7ce364dc8ed9e9d39b967d7082cedbaf2cd3 (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
#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);

    virtual void resize(f32 w, f32 h) {
        JGeometry::TVec2<f32> size(w, h);
        mBounds.setSize(size);
    }
    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 */