resize of scrollbar in sparrowshell

This commit is contained in:
Lendemor 2016-07-23 20:21:48 +02:00
parent 5a5de75c8d
commit 7ff6bef30b
7 changed files with 63 additions and 15 deletions

3
.gitignore vendored
View File

@ -1,2 +1,5 @@
build*
*.user
data/*.jpg
data/*.mtl
data/*.obj

View File

@ -106,7 +106,7 @@ void Engine::setScene(SceneTree *scene)
m_scene = scene;
m_renderer->setScene(m_scene);
m_renderer->resizeGL(m_window->getSize().x, m_window->getSize().y);
// scene->addObject(scene->getRootObject(), m_sparrowshell);
scene->addObject(scene->getRootObject(), m_sparrowshell);
}
void Engine::outputShell(std::string str)

View File

@ -5,10 +5,12 @@
#include "scenetree.h"
#include "mesh.h"
#include "phongmaterial.h"
#include "tools/utils.h"
const unsigned int SparrowShell::BUFFER_MAX_LENGTH = 50;
const unsigned int SparrowShell::BUFFER_DISPLAYED_NUMBER = 10;
const unsigned int SparrowShell::SCROLLBAR_PIXEL_WIDTH = 10;
bool test = true;
SparrowShell::SparrowShell(sf::Window* window, Input* input): m_window(window),m_input(input),m_position(glm::ivec2(0,0))
{
@ -17,7 +19,7 @@ SparrowShell::SparrowShell(sf::Window* window, Input* input): m_window(window),m
Mesh* mesh = new Mesh();
mesh->addRectangle2D(m_position,m_dimension);
PhongMaterial *mat = new PhongMaterial();
mat->diffuse = glm::vec3(0,0.5,0.5);
mat->diffuse = glm::vec3(0.1,0.1,0.1);
mesh->setMaterial(mat);
mesh->setDepth(-0.5);
mesh->initGL();
@ -31,6 +33,8 @@ void SparrowShell::out(std::string s)
if (m_buffer.size() == BUFFER_MAX_LENGTH)
m_buffer.pop_back();
m_buffer.push_front(s);
if (m_buffer.size() > BUFFER_DISPLAYED_NUMBER)
m_resizeScrollBar = true;
}
void SparrowShell::scrollUp(){
@ -55,13 +59,14 @@ SparrowShell::ScrollBar::ScrollBar(SparrowShell* shell):m_shell(shell){
m_position = glm::ivec2(m_shell->m_dimension.x - SparrowShell::SCROLLBAR_PIXEL_WIDTH,0);
m_dimension = glm::ivec2(SparrowShell::SCROLLBAR_PIXEL_WIDTH,m_shell->m_dimension.y);
Mesh* mesh = new Mesh();
mesh->addRectangle2D(m_position,m_dimension);
mesh->addRectangle2D(glm::vec2(0),m_dimension);
PhongMaterial *mat = new PhongMaterial();
mat->diffuse = glm::vec3(1,0,0);
mat->diffuse = glm::vec3(0,0,0.5);
mesh->setDepth(-0.4);
mesh->setMaterial(mat);
mesh->initGL();
m_mesh = new MeshNode(mesh);
utils::setPosition2D(m_mesh,m_position);
m_shell->addChild(m_mesh);
}
@ -69,10 +74,14 @@ void SparrowShell::ScrollBar::update(){
m_position.y = m_shell->m_position.y;
m_dimension.y = m_shell->m_dimension.y;
if (m_shell->m_buffer.size() > BUFFER_DISPLAYED_NUMBER){
float cran = ((float)m_shell->m_dimension.y/(float)m_shell->m_buffer.size());
int indexCursor = m_shell->m_buffer.size()-(m_shell->m_index+SCROLLBAR_PIXEL_WIDTH);
m_position.y += (int)(cran * indexCursor);
m_dimension.y = (int)(cran * BUFFER_DISPLAYED_NUMBER);
float cran = ((float)m_shell->m_dimension.y/(float)m_shell->m_buffer.size());
int indexCursor = m_shell->m_buffer.size()-(m_shell->m_index+BUFFER_DISPLAYED_NUMBER);
glm::ivec2 new_pos((int)m_position.x, (int) cran * indexCursor);
if (m_shell->m_resizeScrollBar){
glm::ivec2 new_dim(m_dimension.x,(int)(cran * BUFFER_DISPLAYED_NUMBER));
utils::resize2D(m_mesh,m_dimension,new_dim);
m_shell->m_resizeScrollBar = false;
}
utils::setPosition2D(m_mesh,new_pos);
}

View File

@ -41,7 +41,7 @@ private:
sf::Window* m_window;
Input* m_input;
int m_index = 0;
bool m_resizeScrollBar = false;
glm::ivec2 m_position;
glm::ivec2 m_dimension;

View File

@ -14,6 +14,7 @@
#include <tools/loader.h>
#include <tools/font.h>
#include <tools/utils.h>
#include <sparrowshell.h>
@ -27,14 +28,16 @@ int main(){
/* Exemple creation mesh 2D
*
*/
Mesh* mesh = new Mesh();
mesh->addRectangle2D(50,50,100,100);
mesh->addRectangle2D(180, 400,5,5);
PhongMaterial *mat = new PhongMaterial();
mat->diffuse = glm::vec3(1, 0.5, 0);
mesh->setMaterial(mat);
mesh->setDepth(1);
mesh->initGL();
*/
scene.addObject(scene.getRootObject(),new MeshNode(mesh));
/* */
/* Exemple ajout d'un objet a la scene
*
@ -54,11 +57,14 @@ int main(){
MeshNode* mnode/* = new MeshNode(fonte_des_neiges->getTextMesh("Hello World!"));
scene.addObject(scene.getRootObject(),mnode)*/;
mnode = new MeshNode(fonte_des_neiges->getTextMesh("WOW", glm::vec3(0.5, 0.7, 0.2)));
mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(70, 30, 0)), 0.4f, glm::vec3(0, 0, 1)));
// mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(70, 30, 0)), 0.4f, glm::vec3(0, 0, 1)));
utils::setPosition2D(mnode,glm::vec2(180, 400));
scene.addObject(scene.getRootObject(),mnode);
mnode = new MeshNode(fonte_des_neiges->getTextMesh("Such Text", glm::vec3(0.7, 0.4, 0.2)));
/* mnode = new MeshNode(fonte_des_neiges->getTextMesh("Such Text", glm::vec3(0.7, 0.4, 0.2)));
mnode->setTransform(glm::rotate(glm::translate(glm::mat4(), glm::vec3(200, 170, 0)), -0.5f, glm::vec3(0, 0, 1)));
scene.addObject(scene.getRootObject(),mnode);
@ -70,6 +76,13 @@ int main(){
mnode->setTransform(glm::translate(glm::mat4(), glm::vec3(400, 250, 0)));
mnode->m_movement = glm::translate(glm::rotate(glm::translate(glm::mat4(), glm::vec3(580, 280, 0)), 0.03f, glm::vec3(0, 0, 1)), glm::vec3(-580, -280, 0));
scene.addObject(scene.getRootObject(),mnode);
*/
engine.outputShell("Hello World!");
engine.outputShell("Starting test :");
for(int i = 0; i < 15; i++){
engine.outputShell(std::to_string(i));
}
engine.setScene(&scene);
engine.start();

View File

@ -1,4 +1,5 @@
#include "utils.h"
#include "scenetree.h"
std::vector<std::string> utils::split(const std::string &line, char sep){
std::vector<std::string> tokens;
@ -10,3 +11,20 @@ std::vector<std::string> utils::split(const std::string &line, char sep){
tokens.push_back(line.substr(start));
return tokens;
}
void utils::setPosition2D(MeshNode *mnode, glm::vec2 pos){
glm::mat4 tr = mnode->getTransform();
glm::vec3 vpos(pos.x,pos.y,0);
tr = glm::translate(tr,vpos - glm::vec3(tr[3]));
mnode->setTransform(tr);
}
void utils::resize2D(MeshNode *mnode, glm::vec2 dim, glm::vec2 new_dim){
glm::mat4 tr = mnode->getTransform();
glm::vec3 pos(tr[3]);
glm::vec2 ratio = new_dim / dim;
tr = glm::scale(tr, glm::vec3(1,ratio.y,1));
glm::vec3 new_pos(tr[3]);
tr = glm::translate(tr,pos-new_pos);
mnode->setTransform(tr);
}

View File

@ -3,10 +3,15 @@
#include <vector>
#include <string>
#include <glm/glm.hpp>
class MeshNode;
namespace utils
{
std::vector<std::string> split(const std::string &line, char sep);
void setPosition2D(MeshNode*, glm::vec2);
void resize2D(MeshNode*, glm::vec2, glm::vec2);
}
#endif // UTILS_H