@@ -128,6 +128,8 @@ public: | |||
void setSize(const T& width, const T& height) noexcept; | |||
void setSize(const Size<T>& size) noexcept; | |||
void draw(); | |||
Rectangle<T>& operator=(const Rectangle<T>& rect) noexcept; | |||
private: | |||
@@ -412,6 +412,30 @@ void Rectangle<T>::setSize(const Size<T>& size) noexcept | |||
fSize = size; | |||
} | |||
template<typename T> | |||
void Rectangle<T>::draw() | |||
{ | |||
// TODO - use glVexter2 d/f/i/s according to T type | |||
glBegin(GL_QUADS); | |||
{ | |||
glTexCoord2f(0.0f, 0.0f); | |||
glVertex2i(fPos.fX, fPos.fY); | |||
glTexCoord2f(1.0f, 0.0f); | |||
glVertex2i(fPos.fX+fSize.fWidth, fPos.fY); | |||
glTexCoord2f(1.0f, 1.0f); | |||
glVertex2i(fPos.fX+fSize.fWidth, fPos.fY+fSize.fHeight); | |||
glTexCoord2f(0.0f, 1.0f); | |||
glVertex2i(fPos.fX, fPos.fY+fSize.fHeight); | |||
} | |||
glEnd(); | |||
} | |||
template<typename T> | |||
Rectangle<T>& Rectangle<T>::operator=(const Rectangle<T>& rect) noexcept | |||
{ | |||
@@ -423,16 +447,19 @@ Rectangle<T>& Rectangle<T>::operator=(const Rectangle<T>& rect) noexcept | |||
// ----------------------------------------------------------------------- | |||
// Possible template data types | |||
template class Point<short>; | |||
template class Point<int>; | |||
template class Point<long>; | |||
template class Point<float>; | |||
template class Point<double>; | |||
template class Size<short>; | |||
template class Size<int>; | |||
template class Size<long>; | |||
template class Size<float>; | |||
template class Size<double>; | |||
template class Rectangle<short>; | |||
template class Rectangle<int>; | |||
template class Rectangle<long>; | |||
template class Rectangle<float>; | |||
@@ -99,50 +99,13 @@ private: | |||
void onDisplay() override | |||
{ | |||
int x = 0; | |||
int y = 0; | |||
int width = getWidth(); | |||
int height = getHeight(); | |||
// paint bg color (in full size) | |||
glColor3b(r, g, b); | |||
glBegin(GL_QUADS); | |||
glTexCoord2f(0.0f, 0.0f); | |||
glVertex2i(x, y); | |||
glTexCoord2f(1.0f, 0.0f); | |||
glVertex2i(x+width, y); | |||
glTexCoord2f(1.0f, 1.0f); | |||
glVertex2i(x+width, y+height); | |||
glTexCoord2f(0.0f, 1.0f); | |||
glVertex2i(x, y+height); | |||
glEnd(); | |||
// centered 2/3 size | |||
x = width/6; | |||
y = height/6; | |||
width = width*2/3; | |||
height = height*2/3; | |||
bgFull.draw(); | |||
// paint inverted color (in 2/3 size) | |||
glColor3b(100-r, 100-g, 100-b); | |||
glBegin(GL_QUADS); | |||
glTexCoord2f(0.0f, 0.0f); | |||
glVertex2i(x, y); | |||
glTexCoord2f(1.0f, 0.0f); | |||
glVertex2i(x+width, y); | |||
glTexCoord2f(1.0f, 1.0f); | |||
glVertex2i(x+width, y+height); | |||
glTexCoord2f(0.0f, 1.0f); | |||
glVertex2i(x, y+height); | |||
glEnd(); | |||
bgSmall.draw(); | |||
} | |||
void onReshape(int width, int height) override | |||
@@ -150,11 +113,19 @@ private: | |||
// make widget same size as window | |||
setSize(width, height); | |||
Widget::onReshape(width, height); | |||
// full bg | |||
bgFull = Rectangle<int>(0, 0, width, height); | |||
// small bg, centered 2/3 size | |||
bgSmall = Rectangle<int>(width/6, height/6, width*2/3, height*2/3); | |||
} | |||
char cur; | |||
bool reverse; | |||
int r, g, b; | |||
Rectangle<int> bgFull, bgSmall; | |||
}; | |||
// ------------------------------------------------------ | |||