Index: gui/imgui/button-imgui.cpp
===================================================================
--- gui/imgui/button-imgui.cpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
+++ gui/imgui/button-imgui.cpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
@@ -0,0 +1,31 @@
+#include "button-imgui.hpp"
+
+#include "../IMGUI/imgui.h"
+#include "../IMGUI/imgui_internal.h" // For CalcItemSize
+
+ButtonImGui::ButtonImGui(string label) {
+   this->label = label;
+
+   calculateSize();
+}
+
+ButtonImGui::~ButtonImGui() {
+}
+
+bool ButtonImGui::draw(int offset) {
+   ImGui::InvisibleButton("", ImVec2(offset, 18));
+   ImGui::SameLine();
+
+   //ImGui::SetCursorPos(int x, int y);
+   return ImGui::Button(label.c_str());
+}
+
+void ButtonImGui::calculateSize() {
+   vec2 labelSize = ImGui::CalcTextSize(label.c_str());
+   ImGuiStyle& style = ImGui::GetStyle();
+
+   vec2 size = ImGui::CalcItemSize(vec2(0, 0), labelSize.x + style.FramePadding.x * 2.0f, labelSize.y + style.FramePadding.y * 2.0f);
+
+   width = size.x;
+   height = size.y;
+}
Index: gui/imgui/button-imgui.hpp
===================================================================
--- gui/imgui/button-imgui.hpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
+++ gui/imgui/button-imgui.hpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
@@ -0,0 +1,27 @@
+#ifndef _BUTTON_IMGUI_H
+#define _BUTTON_IMGUI_H
+
+#include <string>
+
+#include <glm/glm.hpp>
+
+#include "ui-widget.hpp"
+
+using namespace glm;
+using namespace std;
+
+class ButtonImGui : public UIWidget {
+   public:
+      ButtonImGui(string label);
+      virtual ~ButtonImGui();
+
+      bool draw(int offset);
+
+   protected:
+      void calculateSize();
+
+   private:
+      string label;
+};
+
+#endif // _BUTTON_IMGUI_H
Index: gui/imgui/ui-wdget.cpp
===================================================================
--- gui/imgui/ui-wdget.cpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
+++ gui/imgui/ui-wdget.cpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
@@ -0,0 +1,12 @@
+#include "ui-widget.hpp"
+
+UIWidget::~UIWidget() {
+}
+
+int UIWidget::getWidth() {
+   return width;
+}
+
+int UIWidget::getHeight() {
+   return height;
+}
Index: gui/imgui/ui-widget.hpp
===================================================================
--- gui/imgui/ui-widget.hpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
+++ gui/imgui/ui-widget.hpp	(revision 301c90acc8bb0ab81d5a848b74956cc61b6b1299)
@@ -0,0 +1,23 @@
+#ifndef _WIDGET_H
+#define _WIDGET_H
+
+#include <glm/glm.hpp>
+
+using namespace glm;
+
+class UIWidget {
+   public:
+      virtual ~UIWidget();
+
+      int getWidth();
+      int getHeight();
+
+      virtual bool draw(int offset) = 0;
+
+   protected:
+      virtual void calculateSize() = 0;
+
+      int width, height;
+};
+
+#endif // _WIDGET_H
