aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/modules/engines/direct3d/evas_direct3d_object_image.h
blob: 379207b114981ac33678d9a10e257f395d0d71f6 (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
#ifndef __EVAS_DIRECT3D_OBJECT_IMAGE_H__
#define __EVAS_DIRECT3D_OBJECT_IMAGE_H__

#include "evas_engine.h"

#include "ref.h"
#include "array.h"

#include "evas_direct3d_object.h"

class D3DObjectImage : public D3DObject
{
public:
   D3DObjectImage();
   virtual ~D3DObjectImage();

   void CopyTo(D3DObjectImage *image);

   static void BeginCache();
   virtual void Draw(D3DDevice *d3d);
   static void EndCache(D3DDevice *d3d);

   void Init(FLOAT u, FLOAT v, FLOAT du, FLOAT dv, int image_id,
      int width, int height, const char *source);
   void Setup(FLOAT x, FLOAT y, FLOAT w, FLOAT h,
      int sx, int sy, int sw, int sh);
   void SetupColorFilter(DWORD color);
   void SetupBorder(const D3DXVECTOR4 &world_border, const D3DXVECTOR4 &pix_border);

   inline bool IsValid();
   inline const char *GetSource();
   inline int GetWidth();
   inline int GetHeight();
   inline FLOAT GetBorderLeft();
   inline FLOAT GetBorderRight();
   inline FLOAT GetBorderTop();
   inline FLOAT GetBorderBottom();

   bool UpdateImageData(DWORD *image_data);
   DWORD *GetImageData();

private:
   struct Vertex
   {
      FLOAT x, y;
      FLOAT u, v;
      D3DCOLOR col;
   };

   struct GroupDesc
   {
      int num;
      int id;
   };

private:
   Vertex *MakeData();
   Vertex *MakeDataBorder();

private:
   FLOAT _x, _y, _w, _h;
   FLOAT _sx, _sy, _sw, _sh;
   D3DXVECTOR4 _border;
   D3DXVECTOR4 _uvborder;

   FLOAT _u, _v, _du, _dv;
   int _image_id;
   int _width, _height;

   D3DCOLOR _color;
   int _cache_i;
   bool _with_border;
   bool _dirty;

   TArray<DWORD> _image_data;
   bool _image_data_updated;

   char _source[256];

   Vertex _data[54];

   static TArray<D3DObjectImage *> _cache;
   static bool _cache_enabled;
};

bool D3DObjectImage::IsValid()
{
   return _image_id >= 0 && _width > 0 && _height > 0;
}

const char *D3DObjectImage::GetSource()
{
   return _source;
}

int D3DObjectImage::GetWidth()
{
   return _width;
}

int D3DObjectImage::GetHeight()
{
   return _height;
}

FLOAT D3DObjectImage::GetBorderLeft()
{
   return _border.x;
}

FLOAT D3DObjectImage::GetBorderRight()
{
   return _border.z;
}

FLOAT D3DObjectImage::GetBorderTop()
{
   return _border.y;
}

FLOAT D3DObjectImage::GetBorderBottom()
{
   return _border.w;
}


#endif  // __EVAS_DIRECT3D_OBJECT_IMAGE_H__