00001
00002
00003 #include "Component.h"
00004
00005 #include "CoreEngine.h"
00006 #include "Renderer.h"
00007 #include "Texture.h"
00008
00009
00010 namespace pge {
00011 namespace gui {
00012
00013
00014
00015
00016
00017
00018
00019 Component::Component(int x, int y, int width, int height) {
00020 m_position = Vector2i(x, y);
00021 m_dimension = Vector2i(width, height);
00022 m_backgroundColor = Vector4f(1.0f, 1.0f, 1.0f, 1.0f);
00023 m_texture = NULL;
00024 m_textureEnabled = false;
00025
00026 }
00027
00028
00029
00030
00031
00032
00033
00034 Component::~Component(void) {
00035 }
00036
00037
00038
00039
00040
00041
00042
00043 void Component::render(void) {
00044
00045
00046
00047 if(m_textureEnabled) {
00048 renderer::setTexture(m_texture);
00049 } else {
00050 renderer::setTextureUnitEnabled(GL_TEXTURE0, false);
00051 }
00052
00053
00054 if(m_backgroundColor.m_v[3] != 1.0f) {
00055 renderer::setBlendingEnabled(true);
00056 renderer::setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
00057 }
00058
00059
00060 renderer::color4f(m_backgroundColor);
00061
00062 if(m_textureEnabled) {
00063 glBegin(GL_QUADS);
00064 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0], m_position.m_v[1]), 0.0f, 0.0f);
00065 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0], m_position.m_v[1] + m_dimension.m_v[1]),
00066 0.0f, 1.0f);
00067 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0] + m_dimension.m_v[0], m_position.m_v[1]
00068 + m_dimension.m_v[1]), 1.0f, 1.0f);
00069 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0] + m_dimension.m_v[0], m_position.m_v[1]),
00070 1.0f, 0.0f);
00071 glEnd();
00072 } else {
00073 glBegin(GL_QUADS);
00074 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0], m_position.m_v[1]));
00075 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0], m_position.m_v[1] + m_dimension.m_v[1]));
00076 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0] + m_dimension.m_v[0], m_position.m_v[1]
00077 + m_dimension.m_v[1]));
00078 renderer::vertex2i(Component::convertToGLCoords(m_position.m_v[0] + m_dimension.m_v[0], m_position.m_v[1]));
00079 glEnd();
00080 }
00081 if(m_backgroundColor.m_v[3] != 1.0f) {
00082 renderer::setBlendingEnabled(false);
00083 renderer::color4f(1.0f, 1.0f, 1.0f, 1.0f);
00084 }
00085 }
00086
00087
00088
00089
00090
00091
00092
00093 void Component::setBackgroundColor(const Vector4f &color) {
00094 m_backgroundColor = color;
00095 }
00096
00097
00098
00099
00100
00101
00102
00103 Vector4f Component::getBackgroundColor(void) {
00104 return m_backgroundColor;
00105 }
00106
00107
00108
00109
00110
00111
00112
00113 void Component::setPosition(Vector2i position) {
00114 m_position = position;
00115 }
00116
00117
00118
00119
00120
00121
00122
00123 Vector2i Component::getPosition(void) {
00124 return m_position;
00125 }
00126
00127
00128
00129
00130
00131
00132
00133 void Component::setDimension(const Vector2i &dimension) {
00134 m_dimension = dimension;
00135 }
00136
00137
00138
00139
00140
00141
00142
00143 Vector2i Component::getDimension(void) {
00144 return m_dimension;
00145 }
00146
00147
00148
00149
00150
00151
00152
00153 void Component::setTextureEnabled(bool texEnabled) {
00154 m_textureEnabled = texEnabled;
00155 }
00156
00157
00158
00159
00160
00161
00162
00163 bool Component::isTextureEnabled(void) {
00164 return m_textureEnabled;
00165 }
00166
00167
00168
00169
00170
00171
00172
00173 void Component::setTexture(Texture *texture) {
00174 m_texture = texture;
00175 }
00176
00177
00178
00179
00180
00181
00182
00183 Vector2i Component::convertToGLCoords(const Vector2i &coords) {
00184 return Vector2i(coords.m_v[0], CoreEngine::getInstance()->getResolutionHeight() - coords.m_v[1]);
00185 }
00186
00187
00188
00189
00190
00191
00192
00193 Vector2i Component::convertToGLCoords(int x, int y) {
00194 return Vector2i(x, CoreEngine::getInstance()->getResolutionHeight() - y);
00195 }
00196 };
00197 };