resize of scrollbar in sparrowshell
This commit is contained in:
parent
5a5de75c8d
commit
7ff6bef30b
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,5 @@
|
||||
build*
|
||||
*.user
|
||||
data/*.jpg
|
||||
data/*.mtl
|
||||
data/*.obj
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user