todo: find positioning bug

This commit is contained in:
Lendemor 2017-02-20 15:37:37 +01:00
parent d8c4505ed8
commit 4dfed2e701
10 changed files with 111 additions and 56 deletions

View File

@ -14,6 +14,10 @@ void GraphicalNode::setSceneTree(SceneTree *tree){
m_scene = tree; m_scene = tree;
} }
void GraphicalNode::resetTransform(){
setTransform(glm::mat4());
}
// tools // tools
void GraphicalNode::moveTo(const glm::vec3 &position) void GraphicalNode::moveTo(const glm::vec3 &position)
{ {
@ -111,6 +115,8 @@ void GraphicalNode::setParentVisible(bool visible)
void GraphicalNode::updateVisibility(bool visible) void GraphicalNode::updateVisibility(bool visible)
{ {
if(!m_scene)
return;
if(visible) if(visible)
m_scene->addToIndex(this); m_scene->addToIndex(this);
else else

View File

@ -50,6 +50,7 @@ public:
const glm::mat4& getTransform() { return m_transform; } const glm::mat4& getTransform() { return m_transform; }
void setParentTransform(const glm::mat4 &transform); void setParentTransform(const glm::mat4 &transform);
const glm::mat4& getParentTransform() { return m_parentTransform; } const glm::mat4& getParentTransform() { return m_parentTransform; }
void resetTransform();
// visibility methods // visibility methods
bool isVisible(){return m_parentVisible && m_visible;} bool isVisible(){return m_parentVisible && m_visible;}

View File

@ -1,5 +1,8 @@
#include "backgroundnode.h" #include "backgroundnode.h"
#include "engine.h"
#include "scene/scenetree.h"
#include "glm/vec2.hpp" #include "glm/vec2.hpp"
#include "glm/vec3.hpp" #include "glm/vec3.hpp"
@ -9,7 +12,9 @@
BackGroundNode::BackGroundNode(glm::vec2 dimension, glm::vec3 color, float opacity,float depth): BackGroundNode::BackGroundNode(glm::vec2 dimension, glm::vec3 color, float opacity,float depth):
m_dimension(dimension), m_dimension(dimension),
m_color(color), m_color(color),
m_opacity(opacity) m_color_updated(false),
m_opacity(opacity),
m_opacity_updated(false)
{ {
Mesh* mesh = new Mesh(); Mesh* mesh = new Mesh();
mesh->addRectangle2D(glm::vec2(0),dimension); mesh->addRectangle2D(glm::vec2(0),dimension);
@ -19,7 +24,8 @@ BackGroundNode::BackGroundNode(glm::vec2 dimension, glm::vec3 color, float opaci
mesh->setMaterial(mat); mesh->setMaterial(mat);
mesh->setDepth(depth); mesh->setDepth(depth);
mesh->initGL(); mesh->initGL();
m_mesh = new MeshNode(mesh,false); m_mesh = new MeshNode(mesh);
addChild(m_mesh);
} }
void BackGroundNode::update(){ void BackGroundNode::update(){

View File

@ -5,7 +5,10 @@
#include "SparrowRenderer/mesh.h" #include "SparrowRenderer/mesh.h"
#include "SparrowRenderer/phongmaterial.h" #include "SparrowRenderer/phongmaterial.h"
LabelNode::LabelNode(){ LabelNode::LabelNode():
m_string(""),
m_color(glm::vec3(1,1,1))
{
Font* font = RESOURCE_GET(Font,"shellfont"); Font* font = RESOURCE_GET(Font,"shellfont");
m_text = font->getTextNode(m_string,m_color,32); m_text = font->getTextNode(m_string,m_color,32);
addChild(m_text); addChild(m_text);
@ -23,7 +26,10 @@ void LabelNode::setColor(glm::vec3 color){
} }
glm::vec2 LabelNode::getDimension(){ glm::vec2 LabelNode::getDimension(){
if(m_text)
return m_text->getDimension(); return m_text->getDimension();
else
return glm::vec2(0,0);
} }
bool LabelNode::wasUpdated(){ bool LabelNode::wasUpdated(){

View File

@ -7,9 +7,9 @@
class LabelNode : public GUINode class LabelNode : public GUINode
{ {
TextNode* m_text; TextNode* m_text;
glm::vec3 m_color;
std::string m_string; std::string m_string;
bool m_string_updated; bool m_string_updated;
glm::vec3 m_color;
bool m_color_updated; bool m_color_updated;
bool m_was_updated; bool m_was_updated;

View File

@ -1,57 +1,86 @@
#include "scrollbarnode.h" #include "scrollbarnode.h"
#include <iostream>
#include "scene/meshnode.h" #include "scene/meshnode.h"
#include "SparrowRenderer/mesh.h" #include "SparrowRenderer/mesh.h"
#include "SparrowRenderer/phongmaterial.h" #include "SparrowRenderer/phongmaterial.h"
#include "sparrowshell/sparrowshell.h" #include "sparrowshell/sparrowshell.h"
ScrollBarNode::ScrollBarNode(glm::vec2 dimension): ScrollBarNode::ScrollBarNode(glm::vec2 dimension, glm::vec3 bar_color):
m_dimension(dimension), m_dimension(dimension),
m_bar_position(glm::vec2(0)), m_bar_position(glm::vec2(0)),
m_bar_dimension(glm::vec2(0)) m_bar_dimension(m_dimension),
m_bar_color(bar_color),
m_bar_color_updated(false),
m_bar_resized(false),
m_bar_moved(false)
{ {
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 = m_bar_color;
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_bar = new MeshNode(mesh,false); m_bar = new MeshNode(mesh);
addChild(m_bar); addChild(m_bar);
} }
void ScrollBarNode::update() void ScrollBarNode::update()
{ {
GUINode::update(); GUINode::update();
if(m_barResized) if(m_bar_resized)
{ {
m_bar->resize2D(m_bar_dimension,m_last_bar_dimension); if(m_total_size > m_bar_size){
m_barResized = false; m_bar->resetTransform();
m_bar_dimension.y = m_dimension.y * ((float)m_bar_size / (float)m_total_size);
m_bar->resize2D(m_dimension,m_bar_dimension);
m_bar_resized = false;
} }
if(m_barMoved) }
if(m_bar_moved)
{ {
m_bar_position = glm::vec2(0,(m_dimension.y /m_total_size) * m_index_position);
std::cout<< "Pos vec: " << m_bar_position.x << " " << m_bar_position.y << std::endl;
m_bar->moveTo2D(m_bar_position); m_bar->moveTo2D(m_bar_position);
m_barMoved = false; glm::mat4 m = m_bar->getTransform();
glm::vec2 v = glm::vec2(m[3].x,m[3].y);
std::cout << "Pos tr : " << v.x << " " << v.y << std::endl;
m_bar_moved = false;
} }
} if(m_bar_color_updated)
void ScrollBarNode::moveBar(glm::vec2 position)
{ {
m_bar_position = position; PhongMaterial* mat = (PhongMaterial*) m_bar->getGeometryNode()->mesh->getMaterial();
m_barMoved = true; mat->diffuse = m_bar_color;
m_bar_color_updated = false;
} }
void ScrollBarNode::resizeBar(glm::vec2 dimension)
{
m_last_bar_dimension = m_bar_dimension;
m_bar_dimension = dimension;
m_barResized = true;
} }
glm::vec2 ScrollBarNode::getDimension() glm::vec2 ScrollBarNode::getDimension()
{ {
return m_dimension; return m_dimension;
} }
void ScrollBarNode::setBarColor(glm::vec3 color)
{
m_bar_color = color;
m_bar_color_updated = true;
}
void ScrollBarNode::setIndex(int index){
m_index_position = index;
m_bar_moved = true;
}
void ScrollBarNode::setBarSize(int size){
m_bar_size = size;
m_bar_resized = true;
}
void ScrollBarNode::setSize(int total){
m_total_size = total;
m_bar_resized = true;
}

View File

@ -10,17 +10,27 @@ class ScrollBarNode : public GUINode
protected: protected:
glm::vec2 m_dimension; glm::vec2 m_dimension;
glm::vec2 m_bar_position; glm::vec2 m_bar_position;
int m_index_position;
int m_bar_size;
int m_total_size;
glm::vec2 m_bar_dimension; glm::vec2 m_bar_dimension;
glm::vec2 m_last_bar_dimension; glm::vec2 m_last_bar_dimension;
glm::vec3 m_bar_color;
bool m_bar_color_updated;
MeshNode* m_bar; MeshNode* m_bar;
bool m_barResized; bool m_bar_resized;
bool m_barMoved; bool m_bar_moved;
public: public:
ScrollBarNode(glm::vec2 dimension); ScrollBarNode(glm::vec2 dimension,glm::vec3 bar_color);
void update(); void update();
glm::vec2 getDimension(); glm::vec2 getDimension();
void moveBar(glm::vec2 position); void moveBar(float position);
void resizeBar(glm::vec2 dimension); void resizeBar(glm::vec2 dimension);
void setBarColor(glm::vec3 color);
void setPercent(float percent);
void setIndex(int index);
void setBarSize(int size);
void setSize(int total);
}; };
#endif // SCROLLBARNODE_H #endif // SCROLLBARNODE_H

View File

@ -12,10 +12,12 @@ ShellScrollBar::ShellScrollBar(SparrowShell *shell):
glm::vec2( glm::vec2(
SparrowShell::SCROLLBAR_PIXEL_WIDTH, SparrowShell::SCROLLBAR_PIXEL_WIDTH,
SparrowShell::DEFAULT_FONT_SIZE*SparrowShell::BUFFER_DISPLAYED_LINES SparrowShell::DEFAULT_FONT_SIZE*SparrowShell::BUFFER_DISPLAYED_LINES
) ),
glm::vec3(0,0,0.5)
), ),
m_shell(shell) m_shell(shell)
{ {
setBarSize(SparrowShell::BUFFER_DISPLAYED_LINES);
// MeshNode(nullptr,false); // MeshNode(nullptr,false);
// m_position = glm::vec2(m_shell->getDimension().x-SparrowShell::SCROLLBAR_PIXEL_WIDTH,0); // m_position = glm::vec2(m_shell->getDimension().x-SparrowShell::SCROLLBAR_PIXEL_WIDTH,0);
// m_max_height = ; // m_max_height = ;
@ -34,19 +36,15 @@ ShellScrollBar::ShellScrollBar(SparrowShell *shell):
// m_geometry.mesh = mesh; // m_geometry.mesh = mesh;
} }
void ShellScrollBar::update(){ void ShellScrollBar::update()
ScrollBarNode::update(); {
int size = m_shell->getBuffer()->size();
float cran = (m_dimension.y/(float)size);
int indexCursor = m_shell->getIndex();
if (m_shell->isBufferResized()){ if (m_shell->isBufferResized()){
resizeBar(glm::vec2(m_dimension.x,(int)(cran * SparrowShell::BUFFER_DISPLAYED_LINES))); setSize(m_shell->getBuffer()->size());
// resize2D(m_dimension,new_dim);
} }
if (m_shell->indexMoved()) if (m_shell->indexMoved())
{ {
m_bar_position.y = cran * indexCursor; setIndex(m_shell->getIndex());
moveBar(m_bar_position);
} }
ScrollBarNode::update();
} }

View File

@ -37,8 +37,11 @@ SparrowShell::SparrowShell(sf::Window* window):
//Create mesh for background //Create mesh for background
m_background = new BackGroundNode(m_dimension,glm::vec3(0.1,0.1,0.1),0.75,SHELL_DEPTH); m_background = new BackGroundNode(m_dimension,glm::vec3(0.1,0.1,0.1),0.75,SHELL_DEPTH);
m_background->setVisible(false);
//Create mesh for scrollbar //Create mesh for scrollbar
m_scrollbar = new ShellScrollBar(this); m_scrollbar = new ShellScrollBar(this);
m_scrollbar->setVisible(false);
m_scrollbar->moveTo2D(glm::vec2(m_dimension.x-SCROLLBAR_PIXEL_WIDTH,0));
m_script = new ScriptNode(); m_script = new ScriptNode();
@ -49,9 +52,9 @@ SparrowShell::SparrowShell(sf::Window* window):
this->addChild(m_background); this->addChild(m_background);
this->addChild(m_buffer); this->addChild(m_buffer);
this->addChild(m_input_node);
this->addChild(m_scrollbar); this->addChild(m_scrollbar);
this->addChild(m_script); this->addChild(m_script);
this->addChild(m_input_node);
} }
SparrowShell::InputCallBack::InputCallBack(SparrowShell* shell,TextInputNode* textinput): SparrowShell::InputCallBack::InputCallBack(SparrowShell* shell,TextInputNode* textinput):
@ -80,9 +83,9 @@ void SparrowShell::out(std::string str,glm::vec3 color)
tnode->setDepth(SHELL_DEPTH+1); tnode->setDepth(SHELL_DEPTH+1);
m_buffer->push(tnode); m_buffer->push(tnode);
scrollDown(); scrollDown();
std::cout << "size: " << m_buffer->size() << std::endl;
if (m_buffer->size() > SparrowShell::BUFFER_DISPLAYED_LINES) if (m_buffer->size() > SparrowShell::BUFFER_DISPLAYED_LINES)
m_resizeBuffer = true; m_resizeBuffer = true;
// getEngine().getScene()->updateShaders();
} }
void SparrowShell::scrollUp() void SparrowShell::scrollUp()
@ -131,20 +134,8 @@ void SparrowShell::toggleShell()
void SparrowShell::update() void SparrowShell::update()
{ {
m_resizeBuffer = false;
m_indexMoved = false;
if(m_shellEnabled){ if(m_shellEnabled){
auto input = getEngine().getInput(); auto input = getEngine().getInput();
// for(auto action : input->getActions()){
/* if (action == m_move_cursor_left){
if (m_input_cursor_pos > 0)
moveCursorLeft();
}
else if(action == m_move_cursor_right){
if(m_input_cursor_pos < m_input_string.length())
moveCursorRight();
}*/
// }
int scroll = input->getDeltaVerticalScroll(); int scroll = input->getDeltaVerticalScroll();
if(scroll < 0) if(scroll < 0)
scrollDown(); scrollDown();
@ -152,4 +143,7 @@ void SparrowShell::update()
scrollUp(); scrollUp();
} }
GUINode::update(); GUINode::update();
m_resizeBuffer = false;
m_indexMoved = false;
} }

View File

@ -388,6 +388,11 @@ int main(){
engine.getShell()->out("Hello World!"); engine.getShell()->out("Hello World!");
engine.getShell()->out("Starting test :"); engine.getShell()->out("Starting test :");
// engine.getScene()->updateShaders();
// BackGroundNode* bgrn = new BackGroundNode(glm::vec2(10),glm::vec3(1.,1.,1.),1,1);
// engine.getScene()->getRootObject()->addChild(bgrn);
// preparing shaders and launching the engine // preparing shaders and launching the engine
engine.getScene()->updateShaders(); engine.getScene()->updateShaders();
engine.start(); engine.start();