Mercurial > LightClone
comparison LightClone/Source/GuiButton.cpp @ 21:b4dc5d674e22
Added GUI event system and some support data structures
author | koryspansel |
---|---|
date | Thu, 15 Sep 2011 18:42:12 -0700 |
parents | 33cb6979ac51 |
children | a785b0aaf004 |
comparison
equal
deleted
inserted
replaced
20:4e9b5299ffdc | 21:b4dc5d674e22 |
---|---|
4 | 4 |
5 #include "GuiButton.h" | 5 #include "GuiButton.h" |
6 #include "VertexTypes.h" | 6 #include "VertexTypes.h" |
7 | 7 |
8 /* | 8 /* |
9 * EventClick | |
10 */ | |
11 const char* GuiButton::EventClick = "GuiButton:Click"; | |
12 | |
13 /* | |
9 * GuiButton | 14 * GuiButton |
10 */ | 15 */ |
11 GuiButton::GuiButton() | 16 GuiButton::GuiButton() : nState(GuiButtonState_Normal), pEffect(NULL), pVertexBuffer(NULL) |
12 { | 17 { |
18 memset(pTexture, 0, sizeof(pTexture)); | |
13 } | 19 } |
14 | 20 |
15 /* | 21 /* |
16 * Initialize | 22 * Initialize |
17 */ | 23 */ |
18 ErrorCode GuiButton::Initialize(ResourceManager* pResourceManager) | 24 ErrorCode GuiButton::Initialize(ResourceManager* pManager) |
19 { | 25 { |
20 ErrorCode eCode = pResourceManager->CreateEffectFromFile("Data\\Shaders\\TexturedQuad.fx", &pEffect); | 26 ErrorCode eCode = pManager->CreateEffectFromFile("Data\\Shaders\\TexturedQuad.fx", &pEffect); |
21 if(eCode == Error_Success) | 27 if(eCode == Error_Success) |
22 { | 28 { |
23 eCode = pResourceManager->CreateVertexBuffer(6 * sizeof(Vertex::Quad), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer); | 29 eCode = pManager->CreateVertexBuffer(6 * sizeof(Vertex::Quad), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer); |
24 if(eCode == Error_Success) | 30 if(eCode == Error_Success) |
25 { | 31 { |
26 eCode = SetupVertexBuffer(); | 32 eCode = SetupVertexBuffer(); |
33 if(eCode == Error_Success) | |
34 { | |
35 pResourceManager = pManager; | |
36 } | |
27 } | 37 } |
28 } | 38 } |
29 | 39 |
30 return eCode; | 40 return eCode; |
31 } | 41 } |
69 */ | 79 */ |
70 void GuiButton::Render(RenderContext& kContext, Camera& kCamera) | 80 void GuiButton::Render(RenderContext& kContext, Camera& kCamera) |
71 { | 81 { |
72 if(pTexture[nState]) | 82 if(pTexture[nState]) |
73 { | 83 { |
84 uint32 nPasses = 0; | |
85 | |
86 const float fOffsetX = -0.5f * ScreenSizeX; | |
87 const float fOffsetY = +0.5f * ScreenSizeY; | |
88 | |
74 const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f); | 89 const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f); |
75 | 90 |
76 D3DSURFACE_DESC kDescriptor; | 91 kContext.ApplyCameraToEffect(kCamera, pEffect); |
77 pTexture[nState]->GetLevelDesc(0, &kDescriptor); | |
78 | |
79 const float fX = ScreenSizeX - (float)kDescriptor.Width; | |
80 const float fY = 0.0f; | |
81 | 92 |
82 D3DXMATRIX kScale; | 93 D3DXMATRIX kScale; |
83 D3DXMatrixScaling(&kScale, (float)kDescriptor.Width, (float)kDescriptor.Height, 1.0f); | 94 D3DXMatrixScaling(&kScale, kDimensions.x, kDimensions.y, 1.0f); |
84 | 95 |
85 D3DXMATRIX kTranslate; | 96 D3DXMATRIX kTranslate; |
86 //D3DXMatrixTranslation(&kTranslate, -0.5f * ScreenSizeX + fX + 0.5f, 0.5f * ScreenSizeY - fY + 0.5f, 0.0f); | 97 D3DXMatrixTranslation(&kTranslate, fOffsetX + kPosition.x + 0.5f, fOffsetY - kPosition.y + 0.5f, 0.0f); |
87 //D3DXMatrixTranslation( | |
88 | 98 |
89 D3DXMATRIX kWorldMatrix; | 99 D3DXMATRIX kWorldMatrix; |
90 D3DXMatrixMultiply(&kWorldMatrix, &kScale, &kTranslate); | 100 D3DXMatrixMultiply(&kWorldMatrix, &kScale, &kTranslate); |
91 | 101 |
92 pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); | 102 pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix); |
93 pEffect->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector); | 103 pEffect->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector); |
94 pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pTexture[nState]); | 104 pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pTexture[nState]); |
95 pEffect->CommitChanges(); | 105 |
106 pEffect->SetTechnique(pEffect->GetTechnique(0)); | |
107 pEffect->Begin(&nPasses, 0); | |
108 pEffect->BeginPass(0); | |
96 | 109 |
97 kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); | 110 kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace); |
111 | |
112 pEffect->EndPass(); | |
113 pEffect->End(); | |
98 } | 114 } |
115 } | |
116 | |
117 /* | |
118 * SetTexture | |
119 */ | |
120 ErrorCode GuiButton::SetTexture(uint32 nState, const char* pName, bool bResize) | |
121 { | |
122 ErrorCode eCode = Error_Fail; | |
123 | |
124 if(nState < GuiButtonState_Count) | |
125 { | |
126 if(pTexture[nState]) | |
127 { | |
128 pTexture[nState]->Release(); | |
129 pTexture[nState] = NULL; | |
130 } | |
131 | |
132 eCode = pResourceManager->CreateTextureFromFile(pName, &pTexture[nState]); | |
133 if(eCode == Error_Success) | |
134 { | |
135 if(bResize) | |
136 { | |
137 D3DSURFACE_DESC kDescriptor; | |
138 pTexture[nState]->GetLevelDesc(0, &kDescriptor); | |
139 | |
140 kDimensions.x = (float)kDescriptor.Width; | |
141 kDimensions.y = (float)kDescriptor.Height; | |
142 } | |
143 } | |
144 } | |
145 | |
146 return eCode; | |
147 } | |
148 | |
149 /* | |
150 * OnMouseDown | |
151 */ | |
152 void GuiButton::OnMouseDown(uint32 nButton, float fX, float fY) | |
153 { | |
154 GuiEventArguments kArguments; | |
155 kArguments.pSource = this; | |
156 | |
157 Fire(EventClick, kArguments); | |
158 } | |
159 | |
160 /* | |
161 * OnMouseUp | |
162 */ | |
163 void GuiButton::OnMouseUp(uint32 nButton, float fX, float fY) | |
164 { | |
99 } | 165 } |
100 | 166 |
101 /* | 167 /* |
102 * SetupVertexBuffer | 168 * SetupVertexBuffer |
103 */ | 169 */ |
109 if(FAILED(hResult)) | 175 if(FAILED(hResult)) |
110 { | 176 { |
111 return Error_Fail; | 177 return Error_Fail; |
112 } | 178 } |
113 | 179 |
114 pVertices[0] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f); | 180 pVertices[0] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f); |
115 pVertices[1] = Vertex::Quad(+0.0f, +0.0f, 1.0f, 0.0f, 0.0f); | 181 pVertices[1] = Vertex::Quad(+0.0f, +0.0f, 1.0f, 0.0f, 0.0f); |
116 pVertices[2] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f); | 182 pVertices[2] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f); |
117 pVertices[3] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f); | 183 pVertices[3] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f); |
118 pVertices[4] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f); | 184 pVertices[4] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f); |
119 pVertices[5] = Vertex::Quad(+1.0f, -1.0f, 1.0f, 1.0f, 1.0f); | 185 pVertices[5] = Vertex::Quad(+1.0f, -1.0f, 1.0f, 1.0f, 1.0f); |
120 | 186 |
121 pVertexBuffer->Unlock(); | 187 pVertexBuffer->Unlock(); |
122 | 188 |
123 return Error_Success; | 189 return Error_Success; |
124 } | 190 } |