diff --git a/Blocks3D VS2003.vcproj b/Blocks3D VS2003.vcproj index 85adb0c..2645e1b 100644 --- a/Blocks3D VS2003.vcproj +++ b/Blocks3D VS2003.vcproj @@ -429,6 +429,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +#include "../Instance.h" + +namespace B3D{ + class BaseButtonInstance : public Instance + { + public: + BaseButtonInstance(void); + virtual ~BaseButtonInstance(void); + virtual void render(RenderDevice* rd); + virtual void drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown); + virtual bool mouseInButton(float, float, RenderDevice* rd); + virtual void onMouseClick(); + void setActionCode(int actionCode); + bool floatBottom; + bool floatRight; + bool floatCenter; + volatile bool disabled; + bool selected; + protected: + int actionCode; + bool mouseInArea(float, float, float, float, float, float); + }; +} \ No newline at end of file diff --git a/src/include/DataModelV3/Gui/BaseGuiInstance.h b/src/include/DataModelV3/Gui/BaseGuiInstance.h new file mode 100644 index 0000000..4d70c30 --- /dev/null +++ b/src/include/DataModelV3/Gui/BaseGuiInstance.h @@ -0,0 +1,56 @@ +#pragma once +#include +#include "../Instance.h" +namespace B3D{ + struct UDim + { + float scale; + float offset; + UDim() + { + scale = offset = 0; + } + UDim(float scale_, float offset_) + { + scale = scale_; + offset = offset_; + } + }; + + struct UDim2 + { + UDim x; + UDim y; + UDim2(UDim x_, UDim y_) + { + x = x_; + y = y_; + } + UDim2(float scale_x, float offset_x, float scale_y, float offset_y) + { + x = UDim(scale_x, offset_x); + y = UDim(scale_y, offset_y); + } + }; + + class BaseGuiInstance : public Instance + { + public: + BaseGuiInstance(void); + virtual ~BaseGuiInstance(void); + virtual void render(RenderDevice* rd); + virtual bool mouseHovered(float, float, RenderDevice* rd); + UDim2 position; + UDim2 size; + static G3D::Color4 translucentBackdrop() + { + return G3D::Color4(0.60000002F, 0.60000002F, 0.60000002F, 0.60000002F); + } + static G3D::Color4 disabledFill() + { + return G3D::Color4(0.69999999F, 0.69999999F, 0.69999999F, 0.5F); + } + protected: + bool mouseInArea(float, float, float, float, float, float); + }; +} diff --git a/src/include/DataModelV3/Gui/GuiRootInstance.h b/src/include/DataModelV3/Gui/GuiRootInstance.h new file mode 100644 index 0000000..33a781e --- /dev/null +++ b/src/include/DataModelV3/Gui/GuiRootInstance.h @@ -0,0 +1,34 @@ +#pragma once +#include "../Instance.h" + +namespace B3D{ + //TODO deprecated + class ImageButtonInstance; + //TODO deprecated + class TextButtonInstance; + class GuiRootInstance : public Instance + { + public: + GuiRootInstance(); + GuiRootInstance::~GuiRootInstance(); + + //TODO deprecated + TextButtonInstance* makeTextButton(); + void drawButtons(RenderDevice* rd); + + //TODO deprecated + ImageButtonInstance* makeImageButton(G3D::TextureRef newImage, G3D::TextureRef overImage, G3D::TextureRef downImage, G3D::TextureRef disableImage); + void renderGUI(G3D::RenderDevice* rd, double fps); + void setDebugMessage(std::string msg, G3D::RealTime msgTime); + void update(); + bool mouseInGUI(G3D::RenderDevice* renderDevice,int x,int y); + void onMouseLeftUp(G3D::RenderDevice* renderDevice, int x,int y); + void hideGui(bool doHide); + private: + G3D::GFontRef fntdominant; + G3D::GFontRef fntlighttrek; + std::string _message; + G3D::RealTime _messageTime; + bool _hideGui; + }; +} \ No newline at end of file diff --git a/src/include/DataModelV3/Gui/ImageButtonInstance.h b/src/include/DataModelV3/Gui/ImageButtonInstance.h new file mode 100644 index 0000000..dd3cf8d --- /dev/null +++ b/src/include/DataModelV3/Gui/ImageButtonInstance.h @@ -0,0 +1,28 @@ +#pragma once +#include "BaseButtonInstance.h" + +namespace B3D{ + class BaseButtonInstance; + class ImageButtonInstance : public BaseButtonInstance + { + public: + //ImageButtonInstance(G3D::TextureRef); + //ImageButtonInstance(G3D::TextureRef,G3D::TextureRef); + //ImageButtonInstance(G3D::TextureRef,G3D::TextureRef,G3D::TextureRef); + ImageButtonInstance(G3D::TextureRef,G3D::TextureRef,G3D::TextureRef,G3D::TextureRef); + ~ImageButtonInstance(void); + void drawObj(RenderDevice*, Vector2, bool); + Vector2 size; + Vector2 position; + + G3D::TextureRef image; + int openGLID; + G3D::TextureRef image_ovr; + int openGLID_ovr; + G3D::TextureRef image_dn; + int openGLID_dn; + G3D::TextureRef image_ds; + int openGLID_ds; + bool mouseInButton(float, float, RenderDevice*); + }; +} diff --git a/src/include/DataModelV3/Gui/TextButtonInstance.h b/src/include/DataModelV3/Gui/TextButtonInstance.h new file mode 100644 index 0000000..ece3cef --- /dev/null +++ b/src/include/DataModelV3/Gui/TextButtonInstance.h @@ -0,0 +1,37 @@ +#pragma once +#include "BaseButtonInstance.h" +namespace B3D{ + class TextButtonInstance : public BaseButtonInstance + { + public: + TextButtonInstance(void); + ~TextButtonInstance(void); + void setAllColorsSame(); + Vector2 boxBegin; + Vector2 boxEnd; + Vector2 fontLocationRelativeTo; + Color4 textColor; + Color4 textOutlineColor; + Color4 boxColor; + Color4 boxOutlineColor; + Color4 textColorOvr; + Color4 textOutlineColorOvr; + Color4 boxColorOvr; + Color4 boxOutlineColorOvr; + Color4 textColorDn; + Color4 textOutlineColorDn; + Color4 boxColorDn; + Color4 boxOutlineColorDn; + Color4 textColorDis; + Color4 textOutlineColorDis; + Color4 boxColorDis; + Color4 boxOutlineColorDis; + bool centeredWithinBox; + std::string title; + G3D::GFontRef font; + bool visible; + int textSize; + void drawObj(RenderDevice*, Vector2, bool); + bool mouseInButton(float, float, RenderDevice*); + }; +} \ No newline at end of file diff --git a/src/include/DataModelV3/Gui/ToggleImageButtonInstance.h b/src/include/DataModelV3/Gui/ToggleImageButtonInstance.h new file mode 100644 index 0000000..0cc7057 --- /dev/null +++ b/src/include/DataModelV3/Gui/ToggleImageButtonInstance.h @@ -0,0 +1,31 @@ +#pragma once +#include "ImageButtonInstance.h" + +namespace B3D{ + class ToggleImageButtonInstance : public ImageButtonInstance + { + public: + //ImageButtonInstance(G3D::TextureRef); + //ImageButtonInstance(G3D::TextureRef,G3D::TextureRef); + //ImageButtonInstance(G3D::TextureRef,G3D::TextureRef,G3D::TextureRef); + //Oh dear god + ToggleImageButtonInstance(G3D::TextureRef newImage,G3D::TextureRef overImage = NULL, + G3D::TextureRef downImage = NULL, + G3D::TextureRef disableImage = NULL, + G3D::TextureRef newImage2 = NULL, + G3D::TextureRef overImage2 = NULL, + G3D::TextureRef downImage2 = NULL, + G3D::TextureRef disableImage2 = NULL); + ~ToggleImageButtonInstance(void); + void drawObj(RenderDevice*, Vector2, bool); + bool checked; + G3D::TextureRef image2; + int openGLID2; + G3D::TextureRef image_ovr2; + int openGLID2_ovr; + G3D::TextureRef image_dn2; + int openGLID2_dn; + G3D::TextureRef image_ds2; + int openGLID2_ds; + }; +} \ No newline at end of file diff --git a/src/include/DataModelV3/Instance.h b/src/include/DataModelV3/Instance.h index 4924aa1..890a88b 100644 --- a/src/include/DataModelV3/Instance.h +++ b/src/include/DataModelV3/Instance.h @@ -1,5 +1,4 @@ #pragma once -#define WINVER 0x0400 #include "Reflection/Reflection.h" #include "Reflection/ReflectionDataTable.h" #include "Reflection/ReflectionProperty.h" diff --git a/src/source/DataModelV3/DataModelInstance.cpp b/src/source/DataModelV3/DataModelInstance.cpp index 69da22a..4be476e 100644 --- a/src/source/DataModelV3/DataModelInstance.cpp +++ b/src/source/DataModelV3/DataModelInstance.cpp @@ -9,7 +9,7 @@ DataModelInstance::DataModelInstance(void) parentDataModel = this; workspace = new WorkspaceInstance(); - //guiRoot = new GuiRootInstance(); + guiRoot = new GuiRootInstance(); level = new LevelInstance(); //thumbnailGenerator = new ThumbnailGeneratorInstance(); soundService = new SoundService(); @@ -27,6 +27,7 @@ DataModelInstance::DataModelInstance(void) level->setParent(this); soundService->setParent(this); lightingInstance->setParent(this); + guiRoot->setParent(this); running = false; xplicitNgine = NULL; @@ -305,10 +306,10 @@ WorkspaceInstance* DataModelInstance::getWorkspace() } //TODO implement -/*GuiRootInstance* DataModelInstance::getGuiRoot() +GuiRootInstance* DataModelInstance::getGuiRoot() { return guiRoot; -}*/ +} SelectionService* DataModelInstance::getSelectionService() { diff --git a/src/source/DataModelV3/Gui/BaseButtonInstance.cpp b/src/source/DataModelV3/Gui/BaseButtonInstance.cpp new file mode 100644 index 0000000..7e875d1 --- /dev/null +++ b/src/source/DataModelV3/Gui/BaseButtonInstance.cpp @@ -0,0 +1,52 @@ +#include "DataModelV3/Gui/BaseButtonInstance.h" +using namespace B3D; + +BaseButtonInstance::BaseButtonInstance(void) +{ + Instance::Instance(); + actionCode = 0; +} + +void BaseButtonInstance::render(RenderDevice* rd) +{ + //TODO make mouse a member of datamodel + //Vector2 pos = Vector2(g_usableApp->mouse.x,g_usableApp->mouse.y); + //drawObj(rd, pos, g_usableApp->mouse.isMouseDown()); + Instance::render(rd); +} + +BaseButtonInstance::~BaseButtonInstance(void) +{ +} + +void BaseButtonInstance::setActionCode(int actionCode) +{ + this->actionCode = actionCode; +} + +void BaseButtonInstance::drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown){} + +bool BaseButtonInstance::mouseInButton(float mousex, float mousey, RenderDevice* rd){return false;} + +void BaseButtonInstance::onMouseClick() +{ +// if(listener != NULL) +// { +// listener->onButton1MouseClick(this); +// } +} + + +bool BaseButtonInstance::mouseInArea(float point1x, float point1y, float point2x, float point2y, float mousex, float mousey) +{ + + + if(mousex >= point1x && mousey >= point1y) + { + if(mousex < point2x && mousey < point2y) + { + return true; + } + } + return false; +} \ No newline at end of file diff --git a/src/source/DataModelV3/Gui/BaseGuiInstance.cpp b/src/source/DataModelV3/Gui/BaseGuiInstance.cpp new file mode 100644 index 0000000..1c75835 --- /dev/null +++ b/src/source/DataModelV3/Gui/BaseGuiInstance.cpp @@ -0,0 +1,2 @@ +#include "DataModelV3/Gui/BaseGuiInstance.h" +//TODO what?? \ No newline at end of file diff --git a/src/source/DataModelV3/Gui/GuiRootInstance.cpp b/src/source/DataModelV3/Gui/GuiRootInstance.cpp new file mode 100644 index 0000000..018bc05 --- /dev/null +++ b/src/source/DataModelV3/Gui/GuiRootInstance.cpp @@ -0,0 +1,613 @@ +#include +#include +#include "G3DAll.h" +#include "DataModelV3/Gui/BaseButtonInstance.h" +#include "DataModelV3/Gui/TextButtonInstance.h" +#include "DataModelV3/Gui/ImageButtonInstance.h" +#include "DataModelV3/Gui/ToggleImageButtonInstance.h" +#include "DataModelV3/Gui/GuiRootInstance.h" +#include "DataModelV3/Gui/ImageButtonInstance.h" +#include "DataModelV3/DataModelInstance.h" +#include "StringFunctions.h" + +using namespace B3D; + +#ifndef _DEBUG + #if _MSC_VER== 1310 + #define VS03_WORKAROUND & + #else + #define VS03_WORKAROUND + #endif +#else + #define VS03_WORKAROUND +#endif + +ImageButtonInstance* GuiRootInstance::makeImageButton(G3D::TextureRef newImage = NULL, G3D::TextureRef overImage = NULL, G3D::TextureRef downImage = NULL, G3D::TextureRef disableImage = NULL) +{ + //Oh come on + ImageButtonInstance* part = new ImageButtonInstance(newImage,overImage, downImage, disableImage); +// instances.push_back(part); +// instances_2D.push_back(part); + return part; +} + +TextButtonInstance* GuiRootInstance::makeTextButton() +{ + TextButtonInstance* part = new TextButtonInstance(); + return part; +} +GuiRootInstance::GuiRootInstance() : _message(""), _messageTime(0) +{ + //AAAAAAA + fntdominant = GFont::fromFile(GetFileInPath("/content/font/dominant.fnt")); + fntlighttrek = GFont::fromFile(GetFileInPath("/content/font/lighttrek.fnt")); + _hideGui = false; + + //Bottom Left + TextButtonInstance* button = makeTextButton(); + button->boxBegin = Vector2(0, -24); + button->boxEnd = Vector2(80, 0); + button->floatBottom = true; + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Hopper"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + button->boxOutlineColorOvr = Color3(0,255,255); + button->boxColorDn = Color4(button->boxColor.r,button->boxColor.g,button->boxColor.b, 0.2F); + //TODO Define Action + //button->setButtonListener(toolbar); + //toolbar.addButtonRef(button); + + + button = makeTextButton(); + button->boxBegin = Vector2(0, -48); + button->boxEnd = Vector2(80, -24); + button->floatBottom = true; + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Controller"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + button->boxOutlineColorOvr = Color3(0,255,255); + button->boxColorDn = Color4(button->boxColor.r,button->boxColor.g,button->boxColor.b, 0.2F); + //TODO Define Action + //button->setButtonListener(toolbar); + //toolbar.addButtonRef(button); + + button = makeTextButton(); + button->boxBegin = Vector2(0, -72); + button->boxEnd = Vector2(80, -48); + button->floatBottom = true; + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Color"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + button->boxOutlineColorOvr = Color3(0,255,255); + button->boxColorDn = Color4(button->boxColor.r,button->boxColor.g,button->boxColor.b, 0.2F); + //TODO Define Action + //button->setButtonListener(toolbar); + //toolbar.addButtonRef(button); + + button = makeTextButton(); + button->boxBegin = Vector2(0, -96); + button->boxEnd = Vector2(80, -72); + button->floatBottom = true; + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3(0,255,255); + button->textOutlineColor = Color4::clear(); + button->title = "Surface"; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + button->boxOutlineColorOvr = Color3(0,255,255); + button->boxColorDn = Color4(button->boxColor.r,button->boxColor.g,button->boxColor.b, 0.2F); + //TODO Define Action + //button->setButtonListener(toolbar); + //toolbar.addButtonRef(button); + + button = makeTextButton(); + button->boxBegin = Vector2(0, -120); + button->boxEnd = Vector2(80, -96); + button->floatBottom = true; + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3(0,255,255); + button->title = "Model"; + button->selected = true; + button->fontLocationRelativeTo = Vector2(10, 3); + button->setAllColorsSame(); + button->boxOutlineColorOvr = Color3(0,255,255); + button->boxColorDn = Color4(button->boxColor.r,button->boxColor.g,button->boxColor.b, 0.2F); + //TODO Define Action + //button->setButtonListener(toolbar); + //toolbar.addButtonRef(button); + + //Top bar + button = makeTextButton(); + button->boxBegin = Vector2(0, 0); + button->boxEnd = Vector2(125, 25); + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "File"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->name = "file"; + //TODO Define Action + //button->setButtonListener(menuListener); + + button = makeTextButton(); + button->boxBegin = Vector2(125, 0); + button->boxEnd = Vector2(250, 25); + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "Edit"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->name = "edit"; + //TODO Define Action + //button->setButtonListener(menuListener); + + button = makeTextButton(); + button->boxBegin = Vector2(250, 0); + button->boxEnd = Vector2(375, 25); + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "View"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->name = "view"; + //TODO Define Action + //button->setButtonListener(menuListener); + + button = makeTextButton(); + button->boxBegin = Vector2(375, 0); + button->boxEnd = Vector2(500, 25); + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "Insert"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->name = "insert"; + //TODO Define Action + //button->setButtonListener(menuListener); + + button = makeTextButton(); + button->boxBegin = Vector2(500, 0); + button->boxEnd = Vector2(625, 25); + button->setParent(this); + button->font = fntlighttrek; + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->title = "Format"; + button->textSize = 16; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setAllColorsSame(); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->name = "format"; + //TODO Define Action + //button->setButtonListener(menuListener); + + //Menu + button = makeTextButton(); + button->boxBegin = Vector2(0,215); + button->boxEnd = Vector2(80,235); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3(0,1,1); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "Group"; + button->name = "Group"; + button->setAllColorsSame(); + button->textColorDis = Color3(0.8F,0.8F,0.8F); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->font = fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setParent(this); + //TODO Define Action + //button->setButtonListener(gud); + + button = makeTextButton(); + button->boxBegin = Vector2(0,240); + button->boxEnd = Vector2(80,260); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3(0,1,1); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "UnGroup"; + button->name = "UnGroup"; + button->setAllColorsSame(); + button->textColorDis = Color3(0.8F,0.8F,0.8F); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->font = fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setParent(this); + //TODO Define Action + //button->setButtonListener(gud); + + button = makeTextButton(); + button->boxBegin = Vector2(0,265); + button->boxEnd = Vector2(80,285); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3(0,1,1); + button->boxColor = Color4::clear(); + button->textSize = 12; + button->title = "Duplicate"; + button->setAllColorsSame(); + button->textColorDis = Color3(0.8F,0.8F,0.8F); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->font = fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setParent(this); + button->name = "Duplicate"; + //TODO Define Action + //button->setButtonListener(gud); + + //fntlighttrek->draw2D(rd,"MENU", Vector2(10,332), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); + + button = makeTextButton(); + button->boxBegin = Vector2(0,332); + button->boxEnd = Vector2(80,352); + button->textOutlineColor = Color4(0.5F,0.5F,0.5F,0.5F); + button->textColor = Color3::white(); + button->boxColor = Color4::clear(); + button->textSize = 14; + button->title = "MENU"; + button->setAllColorsSame(); + button->boxColorOvr = Color4(0.6F,0.6F,0.6F,0.4F); + button->font = fntlighttrek; + button->fontLocationRelativeTo = Vector2(10, 0); + button->setParent(this); + button->name = "MENU"; + //TODO Define Action + //button->setButtonListener(menuListener); + + ImageButtonInstance* instance = new ToggleImageButtonInstance( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Run.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Run_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Run_dn.png")), + NULL, + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Stop.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Stop_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Stop_dn.png")) + ); + //TODO Define Action + //instance->setButtonListener(menuListener); + instance->name = "go"; + instance->size = Vector2(65,65); + instance->position = Vector2(6.5, 25); + instance->setParent(this); + + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ArrowTool.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ArrowTool_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ArrowTool_dn.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ArrowTool_ds.png"))); + instance->size = Vector2(50,50); + instance->position = Vector2(15, 90); + instance->setParent(this); + instance->name = "Cursor"; + //TODO Define Action + //instance->setButtonListener(msl); + + instance = makeImageButton(Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ScaleTool.png")),Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ScaleTool_ovr.png")),Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ScaleTool_dn.png")),Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/ScaleTool_ds.png"))); + instance->size = Vector2(40,40); + instance->position = Vector2(0, 140); + instance->setParent(this); + instance->name = "Resize"; + //TODO Define Action + //instance->setButtonListener(msl); + + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/MoveTool.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/MoveTool_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/MoveTool_dn.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/MoveTool_ds.png"))); + instance->size = Vector2(40,40); + instance->position = Vector2(40, 140); + instance->setParent(this); + instance->name = "Arrows"; + //TODO Define Action + //instance->setButtonListener(msl); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/SelectionRotate.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/SelectionRotate_ovr.png")), + NULL, + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/SelectionRotate_ds.png"))); + instance->size = Vector2(30,30); + instance->position = Vector2(10, 175); + instance->setParent(this); + instance->name = "Rotate"; + //TODO Define Action + //instance->setButtonListener(rbl); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/SelectionTilt.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/SelectionTilt_ovr.png")), + NULL, + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/SelectionTilt_ds.png"))); + instance->size = Vector2(30,30); + instance->position = Vector2(40, 175); + instance->setParent(this); + instance->name = "Tilt"; + //TODO Define Action + //instance->setButtonListener(rbl); + + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Delete.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Delete_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Delete_dn.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/Delete_ds.png"))); + instance->size = Vector2(40,46); + instance->position = Vector2(20, 284); + instance->setParent(this); + instance->name = "Delete"; + //TODO Define Action + //instance->setButtonListener(delet); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraZoomIn.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraZoomIn_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraZoomIn_dn.png"))); + instance->size = Vector2(34,25); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-77, -90); + instance->setParent(this); + instance->name = "ZoomIn"; + //TODO Define Action + //instance->setButtonListener(cam); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraZoomOut.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraZoomOut_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraZoomOut_dn.png"))); + instance->size = Vector2(34,26); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-77, -31); + instance->setParent(this); + instance->name = "ZoomOut"; + //TODO Define Action + //instance->setButtonListener(cam); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraPanLeft.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraPanLeft_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraPanLeft_dn.png"))); + instance->size = Vector2(34,34); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-110, -50); + instance->setParent(this); + instance->name = "PanLeft"; + //TODO Define Action + //instance->setButtonListener(cam); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraPanRight.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraPanRight_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraPanRight_dn.png"))); + instance->size = Vector2(34,34); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-45, -50); + instance->setParent(this); + instance->name = "PanRight"; + //TODO Define Action + //instance->setButtonListener(cam); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraCenter.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraCenter_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraCenter_dn.png"))); + instance->size = Vector2(34,20); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-77, -60); + instance->setParent(this); + instance->name = "CenterCam"; + //TODO Define Action + //instance->setButtonListener(cam); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraTiltUp.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraTiltUp_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraTiltUp_dn.png"))); + instance->size = Vector2(24,24); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-105, -75); + instance->setParent(this); + instance->name = "TiltUp"; + //TODO Define Action + //instance->setButtonListener(cam); + + instance = makeImageButton( + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraTiltDown.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraTiltDown_ovr.png")), + Texture::fromFile(VS03_WORKAROUND GetFileInPath("/content/images/CameraTiltDown_dn.png"))); + instance->size = Vector2(24,24); + instance->floatBottom = true; + instance->floatRight = true; + instance->position = Vector2(-40, -75); + instance->setParent(this); + instance->name = "TiltDown"; + //TODO Define Action + //instance->setButtonListener(cam); +} + + +void GuiRootInstance::drawButtons(RenderDevice* rd) +{ + rd->pushState(); + rd->beforePrimitive(); + //this->render(rd); + rd->afterPrimitive(); + rd->popState(); +} + +void GuiRootInstance::setDebugMessage(std::string msg, G3D::RealTime msgTime) +{ + _messageTime = msgTime; + _message = msg; +} + +//void GuiRootInstance::render(G3D::RenderDevice* renderDevice) {} + +void GuiRootInstance::renderGUI(G3D::RenderDevice* rd, double fps) +{ + if(_hideGui) return; + //TODO--Move these to their own instance + + std::stringstream stream; + stream << std::fixed << std::setprecision(1) << parentDataModel->getLevel()->timer.getValue(); + fntdominant->draw2D(rd, "Timer: " + stream.str(), Vector2(rd->getWidth() - 120, 25), 20, Color3::fromARGB(0x81C518), Color3::black()); + fntdominant->draw2D(rd, "Score: " + Convert(parentDataModel->getLevel()->score.getValue()), Vector2(rd->getWidth() - 120, 50), 20, Color3::fromARGB(0x81C518), Color3::black()); + //FPS +#ifdef _DEBUG + stream.str(""); + stream.clear(); + stream << std::fixed << std::setprecision(3) << fps; + fntdominant->draw2D(rd, "FPS: " + stream.str(), Vector2(120, 25), 10, Color3::fromARGB(0xFFFF00), Color3::black()); +#endif + //GUI Boxes + Draw::box(G3D::Box(Vector3(0,25,0),Vector3(80,355,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); + Draw::box(G3D::Box(Vector3(rd->getWidth() - 120,rd->getHeight() - 117,0),Vector3(rd->getWidth(),rd->getHeight(),0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0,0,0,0)); + + //Camera menu title + fntlighttrek->draw2D(rd, "CameraMenu", Vector2(rd->getWidth()-(fntlighttrek->get2DStringBounds("CameraMenu", 14).x+1),rd->getHeight() - 120), 14, Color3::white(), Color4(0.5F,0.5F,0.5F,0.5F)); + + //Tools menu + Draw::box(G3D::Box(Vector3(5, 210,0),Vector3(75, 210,0)),rd,Color4(0.6F,0.6F,0.6F,0.4F), Color4(0.6F,0.6F,0.6F,0.4F)); + + + + //drawButtons(rd); + if(System::time() - 3 < _messageTime) + { + fntdominant->draw2D(rd, _message, Vector2((rd->getWidth()/2)-(fntdominant->get2DStringBounds(_message, 20).x/2),(rd->getHeight()/2)-(fntdominant->get2DStringBounds(_message, 20).y/2)), 20, Color3::yellow(), Color3::black()); + } + + parentDataModel->drawMessage(rd); + render(rd); +} + +bool GuiRootInstance::mouseInGUI(G3D::RenderDevice* renderDevice,int x,int y) +{ + //What??? + std::vector instances_2D = parentDataModel->getGuiRoot()->getAllChildren(); + for(size_t i = 0; i < instances_2D.size(); i++) + { + if(BaseButtonInstance* button = dynamic_cast(instances_2D.at(i))) + { + if(button->mouseInButton(x,y, renderDevice)) + { + return true; + } + } + } + return false; +} +//Oh eww... +void GuiRootInstance::update() +{ + Instance * obj6 = this->findFirstChild("Delete"); + Instance * obj = this->findFirstChild("Duplicate"); + Instance * obj2 = this->findFirstChild("Group"); + Instance * obj3 = this->findFirstChild("UnGroup"); + Instance * obj4 = this->findFirstChild("Rotate"); + Instance * obj5 = this->findFirstChild("Tilt"); + + SelectionService* getSelectionService = parentDataModel->getSelectionService(); + + if(obj != NULL && obj2 != NULL && obj3 != NULL && obj4 !=NULL && obj5 != NULL && obj6 != NULL) + { + BaseButtonInstance* button = (BaseButtonInstance*)obj; + BaseButtonInstance* button2 = (BaseButtonInstance*)obj2; + BaseButtonInstance* button3 = (BaseButtonInstance*)obj3; + BaseButtonInstance* button4 = (BaseButtonInstance*)obj4; + BaseButtonInstance* button5 = (BaseButtonInstance*)obj5; + BaseButtonInstance* button6 = (BaseButtonInstance*)obj6; + button->disabled = true; + button2->disabled = true; + button3->disabled = true; + button4->disabled = true; + button5->disabled = true; + button6->disabled = true; + for(size_t i = 0; i < getSelectionService->getSelection().size(); i++) + if(getSelectionService->getSelection()[i]->canDelete) + { + button->disabled = false; + button4->disabled = false; + button5->disabled = false; + button6->disabled = false; + + + if (getSelectionService->getSelection().size() > 1){ + button2->disabled = false; + } + + if (dynamic_cast(getSelectionService->getSelection()[i])){ + button3->disabled = false; + } + + break; + } + } +} + +GuiRootInstance::~GuiRootInstance() +{ +} + +void GuiRootInstance::onMouseLeftUp(G3D::RenderDevice* renderDevice, int x,int y) +{ + std::vector instances_2D = this->getAllChildren(); + for(size_t i = 0; i < instances_2D.size(); i++) + { + if(BaseButtonInstance* button = dynamic_cast(instances_2D[i])) + { + if(button->mouseInButton(x, y, renderDevice)) + { + button->onMouseClick(); + } + } + } +} + +void GuiRootInstance::hideGui(bool doHide) { + _hideGui = doHide; +} \ No newline at end of file diff --git a/src/source/DataModelV3/Gui/ImageButtonInstance.cpp b/src/source/DataModelV3/Gui/ImageButtonInstance.cpp new file mode 100644 index 0000000..728e509 --- /dev/null +++ b/src/source/DataModelV3/Gui/ImageButtonInstance.cpp @@ -0,0 +1,133 @@ +#include "DataModelV3/Gui/ImageButtonInstance.h" + +//TODO ***what the hell*** +using namespace B3D; + ImageButtonInstance::ImageButtonInstance(G3D::TextureRef newImage, G3D::TextureRef overImage = NULL, G3D::TextureRef downImage = NULL, G3D::TextureRef disableImage = NULL) + { + BaseButtonInstance::BaseButtonInstance(); + image = newImage; + openGLID = image->getOpenGLID(); + image_ovr = overImage; + if(!image_ovr.isNull()) + openGLID_ovr = image_ovr->getOpenGLID(); + image_dn = downImage; + if(!image_dn.isNull()) + openGLID_dn = image_dn->getOpenGLID(); + image_ds = disableImage; + if(!image_ds.isNull()) + openGLID_ds = image_ds->getOpenGLID(); + Vector2 size = Vector2(0,0); + Vector2 position = Vector2(0,0); + floatCenter = false; + floatBottom = false; + floatRight = false; + disabled = false; + } + + ImageButtonInstance::~ImageButtonInstance(void) + { + //Delete everything on destruction + image.~ReferenceCountedPointer(); + delete image.getPointer(); + image_ovr.~ReferenceCountedPointer(); + delete image_ovr.getPointer(); + image_ds.~ReferenceCountedPointer(); + delete image_ds.getPointer(); + image_dn.~ReferenceCountedPointer(); + delete image_dn.getPointer(); + image = NULL; + image_ovr = NULL; + image_ds = NULL; + image_dn = NULL; + actionCode = 0; + selected = false; + } + + bool ImageButtonInstance::mouseInButton(float mousex, float mousey, RenderDevice* rd) + { + Vector2 positionRelative = position; + if(floatRight && floatBottom) + { + positionRelative = Vector2(rd->getWidth() + position.x, rd->getHeight() + position.y); + } + else if(floatBottom) + { + positionRelative = Vector2(position.x, rd->getHeight() + position.y); + } + else if(floatRight) + { + positionRelative = Vector2(rd->getWidth() + position.x, position.y); + } + if(mousex >= positionRelative.x && mousey >= positionRelative.y) + { + if(mousex < positionRelative.x + size.x && mousey < positionRelative.y + size.y) + { + return true; + } + } + return false; + } + + void ImageButtonInstance::drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown) + { + bool drawDisabledBox = false; + Vector2 positionRelative = position; + if(floatRight && floatBottom) + { + positionRelative = Vector2(rd->getWidth() + position.x, rd->getHeight() + position.y); + } + else if(floatBottom) + { + positionRelative = Vector2(position.x, rd->getHeight() + position.y); + } + else if(floatRight) + { + positionRelative = Vector2(rd->getWidth() + position.x, position.y); + } + int renderimage = openGLID; + if(selected == true && !image_dn.isNull() && !disabled) + { + renderimage = openGLID_dn; + } + else if(disabled) + { + if(!image_ds.isNull()) + renderimage = openGLID_ds; + else + drawDisabledBox = true; + } + else if(mouseInArea(positionRelative.x, positionRelative.y, positionRelative.x + size.x, positionRelative.y + size.y, mousePos.x, mousePos.y)) + { + if(mouseDown && !image_dn.isNull()) + { + renderimage = openGLID_dn; + } + else if(!image_ovr.isNull()) + { + renderimage = openGLID_ovr; + } + } + + + + glEnable( GL_TEXTURE_2D ); + glEnable(GL_BLEND);// you enable blending function + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBindTexture( GL_TEXTURE_2D, renderimage); + glBegin( GL_QUADS ); + glTexCoord2d(0.0,0.0); + glVertex2f( positionRelative.x, positionRelative.y ); + glTexCoord2d( 1.0,0.0 ); + glVertex2f( positionRelative.x + size.x, positionRelative.y ); + glTexCoord2d( 1.0,1.0 ); + glVertex2f( positionRelative.x + size.x, positionRelative.y + size.y ); + glTexCoord2d( 0.0,1.0 ); + glVertex2f( positionRelative.x, positionRelative.y + size.y ); + glEnd(); + glDisable( GL_TEXTURE_2D ); + + if(drawDisabledBox) + { + Draw::box(Box(Vector3(positionRelative.x, positionRelative.y, 0), Vector3(positionRelative.x+size.x, positionRelative.y+size.y, 0)), rd, Color4(0.7F,0.7F,0.7F,0.3F), Color4::clear()); + } + } diff --git a/src/source/DataModelV3/Gui/TextButtonInstance.cpp b/src/source/DataModelV3/Gui/TextButtonInstance.cpp new file mode 100644 index 0000000..a0fa96f --- /dev/null +++ b/src/source/DataModelV3/Gui/TextButtonInstance.cpp @@ -0,0 +1,112 @@ +#include "DataModelV3/Gui/TextButtonInstance.h" +#include "DataModelV3/Gui/BaseGuiInstance.h" +using namespace B3D; +TextButtonInstance::TextButtonInstance(void) +{ + BaseButtonInstance::BaseButtonInstance(); + boxBegin = Vector2(0,0); + boxEnd = Vector2(0,0); + fontLocationRelativeTo = Vector2(0,0); + centeredWithinBox = false; + title = "TextBox"; + textColor = Color4(1, 1, 1, 1); + textOutlineColor = Color4(0, 0, 0, 0); + boxColor = BaseGuiInstance::translucentBackdrop(); + boxOutlineColor = Color4(0, 0, 0, 0); + setAllColorsSame(); + textSize = 12; + floatBottom = false; + floatRight = false; + floatCenter = false; + visible = true; + disabled = false; + selected = false; +} + +bool TextButtonInstance::mouseInButton(float mousex, float mousey, RenderDevice* rd) +{ + Vector3 point1; + Vector3 point2; + if(floatBottom) + { + point1 = Vector3(boxBegin.x, rd->getHeight() + boxBegin.y,0); + point2 = Vector3(boxEnd.x, rd->getHeight() + boxEnd.y,0); + + } + else + { + point1 = Vector3(boxBegin.x, boxBegin.y,0); + point2 = Vector3(boxEnd.x, boxEnd.y,0); + } + if(mousex >= point1.x && mousey >= point1.y) + { + if(mousex < point2.x && mousey < point2.y) + { + return true; + } + } + return false; +} + +void TextButtonInstance::setAllColorsSame() +{ + textColorOvr = textColor; + textOutlineColorOvr = textOutlineColor; + boxColorOvr = boxColor; + boxOutlineColorOvr = boxOutlineColor; + textColorDn = textColor; + textOutlineColorDn = textOutlineColor; + boxColorDn = boxColor; + boxOutlineColorDn = boxOutlineColor; + textColorDis = textColor; + textOutlineColorDis = textOutlineColor; + boxColorDis = boxColor; + boxOutlineColorDis = boxOutlineColor; +} + +TextButtonInstance::~TextButtonInstance(void) +{ +} + +void TextButtonInstance::drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown) +{ + Vector3 point1; + Vector3 point2; + glEnableClientState(GL_TEXTURE_COORD_ARRAY); + glDisableClientState(GL_COLOR_ARRAY); + + if(floatBottom) + { + point1 = Vector3(boxBegin.x, rd->getHeight() + boxBegin.y,0); + point2 = Vector3(boxEnd.x, rd->getHeight() + boxEnd.y,0); + + } + else + { + point1 = Vector3(boxBegin.x, boxBegin.y,0); + point2 = Vector3(boxEnd.x, boxEnd.y,0); + } + Vector2 RelativeTo = Vector2(point1.x + fontLocationRelativeTo.x, point1.y + fontLocationRelativeTo.y); + if(disabled) + { + Draw::box(Box(point1, point2), rd, boxColorDis, boxOutlineColorDis); + font->draw2D(rd, title, RelativeTo, textSize, textColorDis, textOutlineColorDis); + } + else if(mouseInArea(point1.x, point1.y, point2.x, point2.y, mousePos.x, mousePos.y) && mouseDown) + { + Draw::box(Box(point1, point2), rd, boxColorDn, boxOutlineColorDn); + font->draw2D(rd, title, RelativeTo, textSize, textColorDn, textOutlineColorDn); + } + else if(selected || mouseInArea(point1.x, point1.y, point2.x, point2.y, mousePos.x, mousePos.y)) + { + Draw::box(Box(point1, point2), rd, boxColorOvr, boxOutlineColorOvr); + font->draw2D(rd, title, RelativeTo, textSize, textColorOvr, textOutlineColorOvr); + } + else + { + Draw::box(Box(point1, point2), rd, boxColor, boxOutlineColor); + font->draw2D(rd, title, RelativeTo, textSize, textColor, textOutlineColor); + } + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + glEnableClientState(GL_COLOR_ARRAY); +} \ No newline at end of file diff --git a/src/source/DataModelV3/Gui/ToggleImageButtonInstance.cpp b/src/source/DataModelV3/Gui/ToggleImageButtonInstance.cpp new file mode 100644 index 0000000..7aacb7f --- /dev/null +++ b/src/source/DataModelV3/Gui/ToggleImageButtonInstance.cpp @@ -0,0 +1,136 @@ +#include "DataModelV3/Gui/ToggleImageButtonInstance.h" +using namespace B3D; +ToggleImageButtonInstance::ToggleImageButtonInstance(G3D::TextureRef newImage, + G3D::TextureRef overImage, + G3D::TextureRef downImage, + G3D::TextureRef disableImage, + G3D::TextureRef newImage2, + G3D::TextureRef overImage2, + G3D::TextureRef downImage2, + G3D::TextureRef disableImage2) : ImageButtonInstance(newImage, overImage, downImage, disableImage) +{ + image2 = newImage2; + openGLID2 = image2->getOpenGLID(); + image_ovr2 = overImage2; + if(!image_ovr2.isNull()) + openGLID2_ovr = image_ovr2->getOpenGLID(); + image_dn2 = downImage2; + if(!image_dn2.isNull()) + openGLID2_dn = image_dn2->getOpenGLID(); + image_ds2 = disableImage2; + if(!image_ds2.isNull()) + openGLID2_ds = image_ds2->getOpenGLID(); + checked = false; +} + +ToggleImageButtonInstance::~ToggleImageButtonInstance(void) +{ + //Delete everything on destruction + image2.~ReferenceCountedPointer(); + delete image2.getPointer(); + image_ovr2.~ReferenceCountedPointer(); + delete image_ovr2.getPointer(); + image_ds2.~ReferenceCountedPointer(); + delete image_ds2.getPointer(); + image_dn2.~ReferenceCountedPointer(); + delete image_dn2.getPointer(); + image = NULL; + image_ovr = NULL; + image_ds = NULL; + image_dn = NULL; + selected = false; +} + + +void ToggleImageButtonInstance::drawObj(RenderDevice* rd, Vector2 mousePos, bool mouseDown) +{ + bool drawDisabledBox = false; + Vector2 positionRelative = position; + if(floatRight && floatBottom) + { + positionRelative = Vector2(rd->getWidth() + position.x, rd->getHeight() + position.y); + } + else if(floatBottom) + { + positionRelative = Vector2(position.x, rd->getHeight() + position.y); + } + else if(floatRight) + { + positionRelative = Vector2(rd->getWidth() + position.x, position.y); + } + int renderimage = openGLID; + if(checked) + { + renderimage = openGLID2; + if(selected == true && !image_dn2.isNull() && !disabled) + { + renderimage = openGLID2_dn; + } + else if(disabled) + { + if(!image_ds2.isNull()) + renderimage = openGLID2_ds; + else + drawDisabledBox = true; + } + else if(mouseInArea(positionRelative.x, positionRelative.y, positionRelative.x + size.x, positionRelative.y + size.y, mousePos.x, mousePos.y)) + { + if(mouseDown && !image_dn2.isNull()) + { + renderimage = openGLID2_dn; + } + else if(!image_ovr2.isNull()) + { + renderimage = openGLID2_ovr; + } + } + } + else + { + if(selected == true && !image_dn.isNull() && !disabled) + { + renderimage = openGLID_dn; + } + else if(disabled) + { + if(!image_ds.isNull()) + renderimage = openGLID_ds; + else + drawDisabledBox = true; + } + else if(mouseInArea(positionRelative.x, positionRelative.y, positionRelative.x + size.x, positionRelative.y + size.y, mousePos.x, mousePos.y)) + { + if(mouseDown && !image_dn.isNull()) + { + renderimage = openGLID_dn; + } + else if(!image_ovr.isNull()) + { + renderimage = openGLID_ovr; + } + } + } + + + + glEnable( GL_TEXTURE_2D ); + glEnable(GL_BLEND);// you enable blending function + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glBindTexture( GL_TEXTURE_2D, renderimage); + glBegin( GL_QUADS ); + glTexCoord2d(0.0,0.0); + glVertex2f( positionRelative.x, positionRelative.y ); + glTexCoord2d( 1.0,0.0 ); + glVertex2f( positionRelative.x + size.x, positionRelative.y ); + glTexCoord2d( 1.0,1.0 ); + glVertex2f( positionRelative.x + size.x, positionRelative.y + size.y ); + glTexCoord2d( 0.0,1.0 ); + glVertex2f( positionRelative.x, positionRelative.y + size.y ); + glEnd(); + glDisable( GL_TEXTURE_2D ); + + if(drawDisabledBox) + { + Draw::box(Box(Vector3(positionRelative.x, positionRelative.y, 0), Vector3(positionRelative.x+size.x, positionRelative.y+size.y, 0)), rd, Color4(0.7F,0.7F,0.7F,0.3F), Color4::clear()); + } +} \ No newline at end of file