00001 #include "glwx.h"
00002
00003 GUISeparator::GUISeparator(int orientation_) : GUIRectangle()
00004 {
00005 setOrientation(orientation);
00006 setRatio(1.0f);
00007 widgetType = WT_SEPARATOR;
00008 }
00009
00010 bool GUISeparator::loadXMLSettings(const TiXmlElement *element)
00011 {
00012 if(!element || !element->Value() || strcmp(element->Value(), "Separator"))
00013 return Logger::writeErrorLog("Need a <Separator> tag");
00014
00015 setRatio(XMLArbiter::fillComponents1f(element, "ratio", ratio));
00016 return true;
00017 }
00018
00019 void GUISeparator::setRatio(float ratio_)
00020 {
00021 ratio = clamp(ratio_, 0.1f, 1.0f);
00022 }
00023
00024 float GUISeparator::getRatio()
00025 {
00026 return ratio;
00027 }
00028
00029 void GUISeparator::setOrientation(int orientation_)
00030 {
00031 orientation = orientation_ == OR_HORIZONTAL ? OR_HORIZONTAL : OR_VERTICAL;
00032 }
00033
00034 int GUISeparator::getOrientation()
00035 {
00036 return orientation;
00037 }
00038
00039 void GUISeparator::render(float tick)
00040 {
00041 if(!parent || !((GUIPanel*)parent)->isBGColorOn())
00042 return;
00043
00044 glColor3fv(((GUIPanel*)parent)->getBordersColor());
00045
00046 glBegin(GL_LINES);
00047 glVertex2i(windowBounds.x, windowBounds.y);
00048 glVertex2i(windowBounds.z, (orientation == OR_VERTICAL) ? windowBounds.w : windowBounds.y);
00049 glEnd();
00050 glColor3f(1.0f, 1.0f, 1.0f);
00051 }
00052
00053 void const GUISeparator::computeWindowBounds()
00054 {
00055 const Tuple4i &parentBounds = parent->getWindowBounds();
00056 if(orientation == OR_HORIZONTAL)
00057 {
00058 float offset = (float(parent->getWidth()) - float(ratio*parent->getWidth()))/2.0f;
00059 windowBounds.set(int(parentBounds.x + offset), int(parentBounds.y + position.y),
00060 int(parentBounds.z - offset), int(parentBounds.y + position.y));
00061 }
00062 else
00063 {
00064 float offset = (float(parent->getHeight()) - float(parent->getHeight())*ratio)/2.0f;
00065 windowBounds.set(int(parentBounds.x + position.x), int(parentBounds.y + offset),
00066 int(parentBounds.x + position.x), int(parentBounds.w - offset));
00067 }
00068 }
00069
00070 const Tuple4i &GUISeparator::getWindowBounds()
00071 {
00072 windowBounds.set(0,0,0,1);
00073 return windowBounds;
00074 }
00075