summaryrefslogtreecommitdiff
path: root/include/JSystem/J2DGraph/J2DGrafContext.h
blob: 244aaf56ec224a197a446f7707592b6a23f81314 (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
#ifndef J2DGRAFCONTEXT_H
#define J2DGRAFCONTEXT_H

#include "JSystem/JGeometry.h"
#include "JSystem/JUtility/TColor.h"
#include "dolphin/mtx/mtx.h"
#include "dolphin/types.h"

class J2DGrafContext {
public:
    struct Blend {
        /* 0x0 */ u8 mType;
        /* 0x1 */ u8 mSrcFactor;
        /* 0x2 */ u8 mDstFactor;
    };

    J2DGrafContext(f32 x, f32 y, f32 width, f32 height);
    void scissor(JGeometry::TBox2<f32> const& bounds);
    void setColor(JUtility::TColor c) { this->setColor(c, c, c, c); }
    void setColor(JUtility::TColor colorTL, JUtility::TColor colorTR, JUtility::TColor colorBR,
                  JUtility::TColor colorBL);
    void setLineWidth(u8);
    void fillBox(JGeometry::TBox2<f32> const& box);
    void drawFrame(JGeometry::TBox2<f32> const& box);
    void line(JGeometry::TVec2<f32> start, JGeometry::TVec2<f32> end);
    void lineTo(JGeometry::TVec2<f32> pos);
    void lineTo(f32 x, f32 y) { this->lineTo(JGeometry::TVec2<f32>(x, y)); }
    void moveTo(f32 x, f32 y) { this->moveTo(JGeometry::TVec2<f32>(x, y)); }

    void moveTo(JGeometry::TVec2<f32> pos) { mPrevPos = pos; }

    virtual ~J2DGrafContext() {}
    virtual void place(JGeometry::TBox2<f32> const& bounds);
    virtual void place(f32 x, f32 y, f32 width, f32 height) {
        JGeometry::TBox2<f32> box(x, y, x + width, y + height);
        this->place(box);
    }
    virtual void setPort();
    virtual void setup2D();
    virtual void setScissor();
    virtual s32 getGrafType() const { return 0; }
    virtual void setLookat() {}

public:
    /* 0x04 */ JGeometry::TBox2<f32> mBounds;
    /* 0x14 */ JGeometry::TBox2<f32> mScissorBounds;
    /* 0x24 */ JUtility::TColor mColorTL;
    /* 0x28 */ JUtility::TColor mColorTR;
    /* 0x2C */ JUtility::TColor mColorBR;
    /* 0x30 */ JUtility::TColor mColorBL;
    /* 0x34 */ u8 mLineWidth;
    /* 0x38 */ JGeometry::TVec2<f32> mPrevPos;
    /* 0x40 */ Mtx44 mMtx44;
    /* 0x80 */ Mtx mPosMtx;
    /* 0xB0 */ Blend field_0xb0;
    /* 0xB3 */ Blend mLinePart;
    /* 0xB6 */ Blend mBoxPart;
};

#endif /* J2DGRAFCONTEXT_H */