diff --git a/src/scene/gui/scrollbarnode.cpp b/src/scene/gui/scrollbarnode.cpp new file mode 100644 index 0000000..7afa632 --- /dev/null +++ b/src/scene/gui/scrollbarnode.cpp @@ -0,0 +1,57 @@ +#include "scrollbarnode.h" + +#include "scene/meshnode.h" + +#include "SparrowRenderer/mesh.h" +#include "SparrowRenderer/phongmaterial.h" +#include "sparrowshell/sparrowshell.h" + +ScrollBarNode::ScrollBarNode(glm::vec2 dimension): + m_dimension(dimension), + m_bar_position(glm::vec2(0)), + m_bar_dimension(glm::vec2(0)) +{ + Mesh* mesh = new Mesh(); + mesh->addRectangle2D(glm::vec2(0),m_dimension); + PhongMaterial* mat = new PhongMaterial(); + mat->diffuse = glm::vec3(0,0,0.5); + mat->m_opacity = 0.8; + mesh->setMaterial(mat); + mesh->setDepth(SparrowShell::SHELL_DEPTH+1); + mesh->initGL(); + m_bar = new MeshNode(mesh,false); + addChild(m_bar); +} + +void ScrollBarNode::update() +{ + GUINode::update(); + if(m_barResized) + { + m_bar->resize2D(m_bar_dimension,m_last_bar_dimension); + m_barResized = false; + } + if(m_barMoved) + { + m_bar->moveTo2D(m_bar_position); + m_barMoved = false; + } +} + +void ScrollBarNode::moveBar(glm::vec2 position) +{ + m_bar_position = position; + m_barMoved = true; +} + +void ScrollBarNode::resizeBar(glm::vec2 dimension) +{ + m_last_bar_dimension = m_bar_dimension; + m_bar_dimension = dimension; + m_barResized = true; +} + +glm::vec2 ScrollBarNode::getDimension() +{ + return m_dimension; +} diff --git a/src/scene/gui/scrollbarnode.h b/src/scene/gui/scrollbarnode.h new file mode 100644 index 0000000..cd668f5 --- /dev/null +++ b/src/scene/gui/scrollbarnode.h @@ -0,0 +1,26 @@ +#ifndef SCROLLBARNODE_H +#define SCROLLBARNODE_H + +#include "scene/gui/guinode.h" + +class MeshNode; + +class ScrollBarNode : public GUINode +{ +protected: + glm::vec2 m_dimension; + glm::vec2 m_bar_position; + glm::vec2 m_bar_dimension; + glm::vec2 m_last_bar_dimension; + MeshNode* m_bar; + bool m_barResized; + bool m_barMoved; +public: + ScrollBarNode(glm::vec2 dimension); + void update(); + glm::vec2 getDimension(); + void moveBar(glm::vec2 position); + void resizeBar(glm::vec2 dimension); +}; + +#endif // SCROLLBARNODE_H diff --git a/src/scene/gui/textinputnode.cpp b/src/scene/gui/textinputnode.cpp index c839b36..1aa7601 100644 --- a/src/scene/gui/textinputnode.cpp +++ b/src/scene/gui/textinputnode.cpp @@ -88,7 +88,7 @@ void TextInputNode::update() { if(m_text_mesh){ this->removeChild(m_text_mesh); - delete(m_text_mesh); +// delete(m_text_mesh); } m_text_mesh = shellfont->getTextNode(m_text,m_text_color,m_font_size,false); if(m_text_mesh){ diff --git a/src/sparrowshell/scriptnode.cpp b/src/sparrowshell/scriptnode.cpp index f6b88e8..bebf2a2 100644 --- a/src/sparrowshell/scriptnode.cpp +++ b/src/sparrowshell/scriptnode.cpp @@ -8,12 +8,12 @@ #include "SparrowRenderer/Version.h" #include "SparrowSerializer/Version.h" -#define LUASETFUN(var) m_script.set_function(#var,&ScriptNode::var,this) +#define LUA_SET_FUN(var) m_script.set_function(#var,&ScriptNode::var,this) ScriptNode::ScriptNode() { - LUASETFUN(print); - LUASETFUN(version); + LUA_SET_FUN(print); + LUA_SET_FUN(version); } void ScriptNode::update(){ diff --git a/src/sparrowshell/shellscrollbar.cpp b/src/sparrowshell/shellscrollbar.cpp index 3381a22..3c1750e 100644 --- a/src/sparrowshell/shellscrollbar.cpp +++ b/src/sparrowshell/shellscrollbar.cpp @@ -8,39 +8,45 @@ ShellScrollBar::ShellScrollBar(SparrowShell *shell): - MeshNode(nullptr,false), m_shell(shell) + ScrollBarNode( + glm::vec2( + SparrowShell::SCROLLBAR_PIXEL_WIDTH, + SparrowShell::DEFAULT_FONT_SIZE*SparrowShell::BUFFER_DISPLAYED_LINES + ) + ), + m_shell(shell) { - m_position = glm::vec2(m_shell->getDimension().x-SparrowShell::SCROLLBAR_PIXEL_WIDTH,0); - m_max_height = SparrowShell::DEFAULT_FONT_SIZE*SparrowShell::BUFFER_DISPLAYED_LINES; - m_dimension = glm::vec2(SparrowShell::SCROLLBAR_PIXEL_WIDTH, m_max_height); - moveTo2D(m_position); +// MeshNode(nullptr,false); +// m_position = glm::vec2(m_shell->getDimension().x-SparrowShell::SCROLLBAR_PIXEL_WIDTH,0); +// m_max_height = ; +// m_dimension = glm::vec2(SparrowShell::SCROLLBAR_PIXEL_WIDTH, m_max_height); +// moveTo2D(m_position); - Mesh* mesh = new Mesh(); +// Mesh* mesh = new Mesh(); - mesh->addRectangle2D(glm::vec2(0),m_dimension); - PhongMaterial* mat = new PhongMaterial(); - mat->diffuse = glm::vec3(0,0,0.5); - mat->m_opacity = 0.8; - mesh->setMaterial(mat); - mesh->setDepth(SparrowShell::SHELL_DEPTH+1); - mesh->initGL(); - m_geometry.mesh = mesh; +// mesh->addRectangle2D(glm::vec2(0),m_dimension); +// PhongMaterial* mat = new PhongMaterial(); +// mat->diffuse = glm::vec3(0,0,0.5); +// mat->m_opacity = 0.8; +// mesh->setMaterial(mat); +// mesh->setDepth(SparrowShell::SHELL_DEPTH+1); +// mesh->initGL(); +// m_geometry.mesh = mesh; } void ShellScrollBar::update(){ - MeshNode::update(); + ScrollBarNode::update(); int size = m_shell->getBuffer()->size(); - float cran = (m_max_height/(float)size); + float cran = (m_dimension.y/(float)size); int indexCursor = m_shell->getIndex(); if (m_shell->isBufferResized()){ - glm::ivec2 new_dim(m_dimension.x,(int)(cran * SparrowShell::BUFFER_DISPLAYED_LINES)); - resize2D(m_dimension,new_dim); - m_dimension = new_dim; + resizeBar(glm::vec2(m_dimension.x,(int)(cran * SparrowShell::BUFFER_DISPLAYED_LINES))); +// resize2D(m_dimension,new_dim); } if (m_shell->indexMoved()) { - m_position.y = cran * indexCursor; - moveTo2D(m_position); + m_bar_position.y = cran * indexCursor; + moveBar(m_bar_position); } } diff --git a/src/sparrowshell/shellscrollbar.h b/src/sparrowshell/shellscrollbar.h index d57e439..11935bd 100644 --- a/src/sparrowshell/shellscrollbar.h +++ b/src/sparrowshell/shellscrollbar.h @@ -2,16 +2,15 @@ #define SHELLSCROLLBAR_H #include "glm/vec2.hpp" -#include "scene/meshnode.h" +#include "scene/gui/scrollbarnode.h" class SparrowShell; -class ShellScrollBar : public MeshNode +class ShellScrollBar : public ScrollBarNode { SparrowShell* m_shell; - float m_max_height; +// float m_max_height; glm::ivec2 m_position; - glm::ivec2 m_dimension; glm::vec3 m_color; public: diff --git a/src/test/main.cpp b/src/test/main.cpp index c06c758..42a01a3 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -244,6 +244,7 @@ public: void exec(){ m_demo->initScene(); + m_engine->getShell()->out("button!"); m_engine->setScene(m_demo->getScene()); m_engine->getInput()->setCurrentContext("default"); m_engine->getInput()->setMouseGrabbed(true);