start implementing general scrollbar

This commit is contained in:
Lendemor 2017-02-16 17:35:00 +01:00
parent 8d3b0b527c
commit 0fbf5bc0b6
7 changed files with 118 additions and 29 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -88,7 +88,7 @@ void TextInputNode::update()
{ {
if(m_text_mesh){ if(m_text_mesh){
this->removeChild(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); m_text_mesh = shellfont->getTextNode(m_text,m_text_color,m_font_size,false);
if(m_text_mesh){ if(m_text_mesh){

View File

@ -8,12 +8,12 @@
#include "SparrowRenderer/Version.h" #include "SparrowRenderer/Version.h"
#include "SparrowSerializer/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() ScriptNode::ScriptNode()
{ {
LUASETFUN(print); LUA_SET_FUN(print);
LUASETFUN(version); LUA_SET_FUN(version);
} }
void ScriptNode::update(){ void ScriptNode::update(){

View File

@ -8,39 +8,45 @@
ShellScrollBar::ShellScrollBar(SparrowShell *shell): 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); // MeshNode(nullptr,false);
m_max_height = SparrowShell::DEFAULT_FONT_SIZE*SparrowShell::BUFFER_DISPLAYED_LINES; // m_position = glm::vec2(m_shell->getDimension().x-SparrowShell::SCROLLBAR_PIXEL_WIDTH,0);
m_dimension = glm::vec2(SparrowShell::SCROLLBAR_PIXEL_WIDTH, m_max_height); // m_max_height = ;
moveTo2D(m_position); // 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); // mesh->addRectangle2D(glm::vec2(0),m_dimension);
PhongMaterial* mat = new PhongMaterial(); // PhongMaterial* mat = new PhongMaterial();
mat->diffuse = glm::vec3(0,0,0.5); // mat->diffuse = glm::vec3(0,0,0.5);
mat->m_opacity = 0.8; // mat->m_opacity = 0.8;
mesh->setMaterial(mat); // mesh->setMaterial(mat);
mesh->setDepth(SparrowShell::SHELL_DEPTH+1); // mesh->setDepth(SparrowShell::SHELL_DEPTH+1);
mesh->initGL(); // mesh->initGL();
m_geometry.mesh = mesh; // m_geometry.mesh = mesh;
} }
void ShellScrollBar::update(){ void ShellScrollBar::update(){
MeshNode::update(); ScrollBarNode::update();
int size = m_shell->getBuffer()->size(); 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(); int indexCursor = m_shell->getIndex();
if (m_shell->isBufferResized()){ if (m_shell->isBufferResized()){
glm::ivec2 new_dim(m_dimension.x,(int)(cran * SparrowShell::BUFFER_DISPLAYED_LINES)); resizeBar(glm::vec2(m_dimension.x,(int)(cran * SparrowShell::BUFFER_DISPLAYED_LINES)));
resize2D(m_dimension,new_dim); // resize2D(m_dimension,new_dim);
m_dimension = new_dim;
} }
if (m_shell->indexMoved()) if (m_shell->indexMoved())
{ {
m_position.y = cran * indexCursor; m_bar_position.y = cran * indexCursor;
moveTo2D(m_position); moveBar(m_bar_position);
} }
} }

View File

@ -2,16 +2,15 @@
#define SHELLSCROLLBAR_H #define SHELLSCROLLBAR_H
#include "glm/vec2.hpp" #include "glm/vec2.hpp"
#include "scene/meshnode.h" #include "scene/gui/scrollbarnode.h"
class SparrowShell; class SparrowShell;
class ShellScrollBar : public MeshNode class ShellScrollBar : public ScrollBarNode
{ {
SparrowShell* m_shell; SparrowShell* m_shell;
float m_max_height; // float m_max_height;
glm::ivec2 m_position; glm::ivec2 m_position;
glm::ivec2 m_dimension;
glm::vec3 m_color; glm::vec3 m_color;
public: public:

View File

@ -244,6 +244,7 @@ public:
void exec(){ void exec(){
m_demo->initScene(); m_demo->initScene();
m_engine->getShell()->out("button!");
m_engine->setScene(m_demo->getScene()); m_engine->setScene(m_demo->getScene());
m_engine->getInput()->setCurrentContext("default"); m_engine->getInput()->setCurrentContext("default");
m_engine->getInput()->setMouseGrabbed(true); m_engine->getInput()->setMouseGrabbed(true);