VN Textbox can now be any size
This commit is contained in:
@@ -1,130 +1,134 @@
|
||||
// Copyright (c) 2022 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "UIBorder.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
UIBorder::UIBorder(UICanvas &canvas) : UIComponent(canvas) {
|
||||
this->mesh.createBuffers(QUAD_VERTICE_COUNT * 9, QUAD_INDICE_COUNT * 9);
|
||||
|
||||
this->texture = new Texture();
|
||||
this->texture->setSize(3, 3);
|
||||
struct Color pixels[9] = {
|
||||
COLOR_WHITE, COLOR_RED, COLOR_BLUE,
|
||||
COLOR_GREEN, COLOR_MAGENTA, COLOR_BLACK,
|
||||
COLOR_CORNFLOWER_BLUE, COLOR_WHITE, COLOR_MAGENTA
|
||||
};
|
||||
this->texture->buffer(pixels);
|
||||
|
||||
this->updatePositions();
|
||||
}
|
||||
|
||||
void UIBorder::updatePositions() {
|
||||
UIComponent::updatePositions();
|
||||
|
||||
glm::vec2 oneThird = this->uv1 / 3.0f;
|
||||
glm::vec2 overallDimensions = glm::vec2(this->getWidth(), this->getHeight());
|
||||
glm::vec2 innerDimensions = overallDimensions - (this->edgeDimensions * 2.0f);
|
||||
|
||||
// Top Left.
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(0, 0),
|
||||
this->uv0,
|
||||
edgeDimensions,
|
||||
this->uv0 + oneThird,
|
||||
0, 0
|
||||
);
|
||||
|
||||
// Top Center
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(edgeDimensions.x, 0),
|
||||
this->uv0 + glm::vec2(oneThird.x, 0),
|
||||
glm::vec2(edgeDimensions.x + innerDimensions.x, edgeDimensions.y),
|
||||
this->uv0 + glm::vec2(oneThird.x * 2.0f, oneThird.y),
|
||||
QUAD_VERTICE_COUNT, QUAD_INDICE_COUNT
|
||||
);
|
||||
|
||||
// Top Right
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(edgeDimensions.x + innerDimensions.x, 0),
|
||||
this->uv0 + glm::vec2(oneThird.x * 2.0f, 0),
|
||||
glm::vec2(overallDimensions.x, edgeDimensions.y),
|
||||
glm::vec2(this->uv1.x, this->uv0.y + oneThird.y),
|
||||
QUAD_VERTICE_COUNT * 2, QUAD_INDICE_COUNT * 2
|
||||
);
|
||||
|
||||
// Middle Left
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(0, edgeDimensions.y),
|
||||
this->uv0 + glm::vec2(0, oneThird.y),
|
||||
glm::vec2(edgeDimensions.x, edgeDimensions.y + innerDimensions.y),
|
||||
this->uv0 + glm::vec2(oneThird.x, oneThird.y * 2.0f),
|
||||
QUAD_VERTICE_COUNT * 3, QUAD_INDICE_COUNT * 3
|
||||
);
|
||||
|
||||
// Center
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
edgeDimensions,
|
||||
this->uv0 + oneThird,
|
||||
edgeDimensions + innerDimensions,
|
||||
this->uv0 + (oneThird * 2.0f),
|
||||
QUAD_VERTICE_COUNT * 4, QUAD_INDICE_COUNT * 4
|
||||
);
|
||||
|
||||
// Middle Right
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
edgeDimensions + glm::vec2(innerDimensions.x, 0),
|
||||
this->uv0 + glm::vec2(oneThird.x * 2.0f, oneThird.y),
|
||||
edgeDimensions + innerDimensions + glm::vec2(edgeDimensions.x, 0),
|
||||
this->uv1 - glm::vec2(0.0f, oneThird.y),
|
||||
QUAD_VERTICE_COUNT * 5, QUAD_INDICE_COUNT * 5
|
||||
);
|
||||
|
||||
// Bottom Left
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(0.0f, edgeDimensions.y + innerDimensions.y),
|
||||
this->uv0 + glm::vec2(0.0f, uv1.y - oneThird.y),
|
||||
glm::vec2(edgeDimensions.x, overallDimensions.y),
|
||||
this->uv1 - glm::vec2(oneThird.x * 2.0f, 0.0f),
|
||||
QUAD_VERTICE_COUNT * 6, QUAD_INDICE_COUNT * 6
|
||||
);
|
||||
|
||||
// Bottom Center
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
edgeDimensions + glm::vec2(0.0f, innerDimensions.y),
|
||||
this->uv1 - oneThird,
|
||||
overallDimensions - glm::vec2(edgeDimensions.x, 0.0f),
|
||||
this->uv1 - glm::vec2(oneThird.x, 0.0f),
|
||||
QUAD_VERTICE_COUNT * 7, QUAD_INDICE_COUNT * 7
|
||||
);
|
||||
|
||||
// Bottom Right
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
overallDimensions - edgeDimensions,
|
||||
this->uv1 - oneThird,
|
||||
overallDimensions,
|
||||
this->uv1,
|
||||
QUAD_VERTICE_COUNT * 8, QUAD_INDICE_COUNT * 8
|
||||
);
|
||||
}
|
||||
|
||||
void UIBorder::drawSelf(UIShader &shader, glm::mat4 transform) {
|
||||
if(this->texture == nullptr) return;
|
||||
|
||||
shader.setUIColor(COLOR_WHITE);
|
||||
shader.setUIModel(transform);
|
||||
shader.setUITexture(this->texture);
|
||||
this->mesh.draw(MESH_DRAW_MODE_TRIANGLES, 0, -1);
|
||||
}
|
||||
|
||||
void UIBorder::setBorderSize(glm::vec2 borderSize) {
|
||||
this->edgeDimensions = borderSize;
|
||||
this->updatePositions();
|
||||
}
|
||||
|
||||
glm::vec2 UIBorder::getBorderSize() {
|
||||
return this->edgeDimensions;
|
||||
// Copyright (c) 2022 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "UIBorder.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
UIBorder::UIBorder(UICanvas &canvas) : UIComponent(canvas) {
|
||||
this->mesh.createBuffers(QUAD_VERTICE_COUNT * 9, QUAD_INDICE_COUNT * 9);
|
||||
|
||||
this->texture = new Texture();
|
||||
this->texture->setSize(3, 3);
|
||||
struct Color pixels[9] = {
|
||||
COLOR_WHITE, COLOR_RED, COLOR_BLUE,
|
||||
COLOR_GREEN, COLOR_MAGENTA, COLOR_BLACK,
|
||||
COLOR_CORNFLOWER_BLUE, COLOR_WHITE, COLOR_MAGENTA
|
||||
};
|
||||
this->texture->buffer(pixels);
|
||||
|
||||
this->updatePositions();
|
||||
}
|
||||
|
||||
void UIBorder::updatePositions() {
|
||||
UIComponent::updatePositions();
|
||||
|
||||
glm::vec2 oneThird = this->uv1 / 3.0f;
|
||||
glm::vec2 overallDimensions = glm::vec2(this->getWidth(), this->getHeight());
|
||||
glm::vec2 innerDimensions = overallDimensions - (this->edgeDimensions * 2.0f);
|
||||
|
||||
// Top Left.
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(0, 0),
|
||||
this->uv0,
|
||||
edgeDimensions,
|
||||
this->uv0 + oneThird,
|
||||
0, 0
|
||||
);
|
||||
|
||||
// Top Center
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(edgeDimensions.x, 0),
|
||||
this->uv0 + glm::vec2(oneThird.x, 0),
|
||||
glm::vec2(edgeDimensions.x + innerDimensions.x, edgeDimensions.y),
|
||||
this->uv0 + glm::vec2(oneThird.x * 2.0f, oneThird.y),
|
||||
QUAD_VERTICE_COUNT, QUAD_INDICE_COUNT
|
||||
);
|
||||
|
||||
// Top Right
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(edgeDimensions.x + innerDimensions.x, 0),
|
||||
this->uv0 + glm::vec2(oneThird.x * 2.0f, 0),
|
||||
glm::vec2(overallDimensions.x, edgeDimensions.y),
|
||||
glm::vec2(this->uv1.x, this->uv0.y + oneThird.y),
|
||||
QUAD_VERTICE_COUNT * 2, QUAD_INDICE_COUNT * 2
|
||||
);
|
||||
|
||||
// Middle Left
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(0, edgeDimensions.y),
|
||||
this->uv0 + glm::vec2(0, oneThird.y),
|
||||
glm::vec2(edgeDimensions.x, edgeDimensions.y + innerDimensions.y),
|
||||
this->uv0 + glm::vec2(oneThird.x, oneThird.y * 2.0f),
|
||||
QUAD_VERTICE_COUNT * 3, QUAD_INDICE_COUNT * 3
|
||||
);
|
||||
|
||||
// Center
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
edgeDimensions,
|
||||
this->uv0 + oneThird,
|
||||
edgeDimensions + innerDimensions,
|
||||
this->uv0 + (oneThird * 2.0f),
|
||||
QUAD_VERTICE_COUNT * 4, QUAD_INDICE_COUNT * 4
|
||||
);
|
||||
|
||||
// Middle Right
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
edgeDimensions + glm::vec2(innerDimensions.x, 0),
|
||||
this->uv0 + glm::vec2(oneThird.x * 2.0f, oneThird.y),
|
||||
edgeDimensions + innerDimensions + glm::vec2(edgeDimensions.x, 0),
|
||||
this->uv1 - glm::vec2(0.0f, oneThird.y),
|
||||
QUAD_VERTICE_COUNT * 5, QUAD_INDICE_COUNT * 5
|
||||
);
|
||||
|
||||
// Bottom Left
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
glm::vec2(0.0f, edgeDimensions.y + innerDimensions.y),
|
||||
this->uv0 + glm::vec2(0.0f, uv1.y - oneThird.y),
|
||||
glm::vec2(edgeDimensions.x, overallDimensions.y),
|
||||
this->uv1 - glm::vec2(oneThird.x * 2.0f, 0.0f),
|
||||
QUAD_VERTICE_COUNT * 6, QUAD_INDICE_COUNT * 6
|
||||
);
|
||||
|
||||
// Bottom Center
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
edgeDimensions + glm::vec2(0.0f, innerDimensions.y),
|
||||
this->uv1 - oneThird,
|
||||
overallDimensions - glm::vec2(edgeDimensions.x, 0.0f),
|
||||
this->uv1 - glm::vec2(oneThird.x, 0.0f),
|
||||
QUAD_VERTICE_COUNT * 7, QUAD_INDICE_COUNT * 7
|
||||
);
|
||||
|
||||
// Bottom Right
|
||||
QuadMesh::bufferQuadMesh(&this->mesh,
|
||||
overallDimensions - edgeDimensions,
|
||||
this->uv1 - oneThird,
|
||||
overallDimensions,
|
||||
this->uv1,
|
||||
QUAD_VERTICE_COUNT * 8, QUAD_INDICE_COUNT * 8
|
||||
);
|
||||
}
|
||||
|
||||
void UIBorder::drawSelf(UIShader &shader, glm::mat4 transform) {
|
||||
if(this->texture == nullptr) return;
|
||||
|
||||
shader.setUIColor(COLOR_WHITE);
|
||||
shader.setUIModel(transform);
|
||||
shader.setUITexture(this->texture);
|
||||
this->mesh.draw(MESH_DRAW_MODE_TRIANGLES, 0, -1);
|
||||
}
|
||||
|
||||
void UIBorder::setBorderSize(glm::vec2 borderSize) {
|
||||
this->edgeDimensions = borderSize;
|
||||
this->updatePositions();
|
||||
}
|
||||
|
||||
glm::vec2 UIBorder::getInnerSize() {
|
||||
return glm::vec2(this->getWidth(), this->getHeight()) - this->edgeDimensions;
|
||||
}
|
||||
|
||||
glm::vec2 UIBorder::getBorderSize() {
|
||||
return this->edgeDimensions;
|
||||
}
|
Reference in New Issue
Block a user