mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2025-07-26 18:32:27 -04:00
add GLTextPanel, initial work on nested coordinate systems
This commit is contained in:
parent
b28c8dbc3e
commit
48308145b7
@ -233,6 +233,21 @@ void GLPanel::draw(CubicVR::mat4 transform_in, GLPanel *parent) {
|
|||||||
}
|
}
|
||||||
// if (coord == GLPANEL_Y_UP) {
|
// if (coord == GLPANEL_Y_UP) {
|
||||||
// }
|
// }
|
||||||
|
} else if (parent->coord != coord) {
|
||||||
|
if (parent->coord == GLPANEL_Y_DOWN_ZERO_ONE && coord == GLPANEL_Y_UP_ZERO_ONE) {
|
||||||
|
mCoord *= mat4::translate(0.0f, 1.0f, 0.0f) * mat4::scale(1.0f, -1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
if (parent->coord == GLPANEL_Y_UP_ZERO_ONE && coord == GLPANEL_Y_DOWN_ZERO_ONE) {
|
||||||
|
mCoord *= mat4::translate(0.0f, -1.0f, 0.0f) * mat4::scale(1.0f, -1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
// if (coord == GLPANEL_Y_UP_ZERO_ONE) {
|
||||||
|
// mCoord = mat4::translate(-1.0f, -1.0f, 0.0f) * mat4::scale(2.0f, 2.0f, 2.0f);
|
||||||
|
// }
|
||||||
|
// if (coord == GLPANEL_Y_DOWN) {
|
||||||
|
// mCoord = mat4::scale(2.0f, 2.0f, 2.0f);
|
||||||
|
// }
|
||||||
|
// if (coord == GLPANEL_Y_UP) {
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute local transform
|
// compute local transform
|
||||||
@ -248,24 +263,24 @@ void GLPanel::draw(CubicVR::mat4 transform_in, GLPanel *parent) {
|
|||||||
vec4 vmax_t = mat4::vec4_multiply(vec4(max, max, 0, 1), transform);
|
vec4 vmax_t = mat4::vec4_multiply(vec4(max, max, 0, 1), transform);
|
||||||
|
|
||||||
// screen dimensions
|
// screen dimensions
|
||||||
vec2 vmin((vmin_t.x>vmax_t.x)?vmax_t.x:vmin_t.x, (vmin_t.y>vmax_t.y)?vmax_t.y:vmin_t.y);
|
vmin = vec2((vmin_t.x > vmax_t.x)?vmax_t.x:vmin_t.x, (vmin_t.y > vmax_t.y)?vmax_t.y:vmin_t.y);
|
||||||
vec2 vmax((vmin_t.x>vmax_t.x)?vmin_t.x:vmax_t.x, (vmin_t.y>vmax_t.y)?vmin_t.y:vmax_t.y);
|
vmax = vec2((vmin_t.x > vmax_t.x)?vmin_t.x:vmax_t.x, (vmin_t.y > vmax_t.y)?vmin_t.y:vmax_t.y);
|
||||||
|
|
||||||
// unit dimensions
|
// unit dimensions
|
||||||
vec2 umin = (vmin * 0.5) + vec2(1,1);
|
umin = (vmin * 0.5) + vec2(1,1);
|
||||||
vec2 umax = (vmax * 0.5) + vec2(1,1);
|
umax = (vmax * 0.5) + vec2(1,1);
|
||||||
|
|
||||||
vec2 ucenter = (umin + umax) * 0.5;
|
ucenter = vec2((umin + umax) * 0.5);
|
||||||
|
|
||||||
// pixel dimensions
|
// pixel dimensions
|
||||||
vec2 pdim((umax.x - umin.x) * view[0], (umax.y - umin.y) * view[1]);
|
pdim = vec2((umax.x - umin.x) * view[0], (umax.y - umin.y) * view[1]);
|
||||||
vec2 pvec((vmax.x-vmin.x) / pdim.x, (vmax.y-vmin.y) / pdim.y);
|
pvec = vec2((vmax.x - vmin.x) / pdim.x, (vmax.y - vmin.y) / pdim.y);
|
||||||
|
|
||||||
std::cout << umin << " :: " << ucenter << " :: " << pdim << " :: " << pvec << std::endl;
|
std::cout << umin << " :: " << ucenter << " :: " << pdim << " :: " << pvec << std::endl;
|
||||||
|
|
||||||
if (marginPx.left || marginPx.right || marginPx.top || marginPx.bottom) {
|
if (marginPx.left || marginPx.right || marginPx.top || marginPx.bottom) {
|
||||||
localTransform *= mat4::translate(marginPx.left*pvec.x/size[0], marginPx.top*pvec.y/size[1], 0) *
|
localTransform *= mat4::translate(marginPx.left * pvec.x / size[0], marginPx.top * pvec.y / size[1], 0) *
|
||||||
mat4::scale(1.0-(marginPx.left+marginPx.right)*pvec.x/size[0], 1.0-(marginPx.top+marginPx.bottom)*pvec.y/size[1], 0);
|
mat4::scale(1.0 - (marginPx.left + marginPx.right) * pvec.x / size[0], 1.0 - (marginPx.top + marginPx.bottom) * pvec.y / size[1], 0);
|
||||||
transform = transform_in * localTransform;
|
transform = transform_in * localTransform;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,6 +345,23 @@ void GLPanel::draw(CubicVR::mat4 transform_in, GLPanel *parent) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GLTextPanel::GLTextPanel() : GLPanel() {
|
||||||
|
coord = GLPANEL_Y_UP_ZERO_ONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLTextPanel::drawPanelContents() {
|
||||||
|
glColor4f(1, 1, 1, 1.0);
|
||||||
|
GLFont::getFont(GLFont::GLFONT_SIZE48).drawString(textVal, mid, mid, 48, GLFont::GLFONT_ALIGN_CENTER, GLFont::GLFONT_ALIGN_CENTER, (int)pdim.x*2, (int)pdim.y*2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLTextPanel::setText(std::string text) {
|
||||||
|
textVal = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string GLTextPanel::getText() {
|
||||||
|
return textVal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void GLTestPanel::drawPanelContents() {
|
void GLTestPanel::drawPanelContents() {
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "GLExt.h"
|
#include "GLExt.h"
|
||||||
|
#include "GLFont.h"
|
||||||
#include "ColorTheme.h"
|
#include "ColorTheme.h"
|
||||||
#include "cubic_math.h"
|
#include "cubic_math.h"
|
||||||
|
|
||||||
@ -47,6 +48,12 @@ public:
|
|||||||
CubicVR::mat4 transform;
|
CubicVR::mat4 transform;
|
||||||
CubicVR::mat4 localTransform;
|
CubicVR::mat4 localTransform;
|
||||||
float min, mid, max;
|
float min, mid, max;
|
||||||
|
// screen dimensions
|
||||||
|
CubicVR::vec2 vmin, vmax;
|
||||||
|
// unit dimensions
|
||||||
|
CubicVR::vec2 umin, umax, ucenter;
|
||||||
|
// pixel dimensions
|
||||||
|
CubicVR::vec2 pdim, pvec;
|
||||||
|
|
||||||
std::vector<GLPanel *> children;
|
std::vector<GLPanel *> children;
|
||||||
|
|
||||||
@ -76,6 +83,17 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class GLTextPanel : public GLPanel {
|
||||||
|
private:
|
||||||
|
std::string textVal;
|
||||||
|
public:
|
||||||
|
GLTextPanel();
|
||||||
|
|
||||||
|
void drawPanelContents();
|
||||||
|
void setText(std::string text);
|
||||||
|
std::string getText();
|
||||||
|
};
|
||||||
|
|
||||||
class GLTestPanel : public GLPanel {
|
class GLTestPanel : public GLPanel {
|
||||||
public:
|
public:
|
||||||
GLTestPanel() : GLPanel() {
|
GLTestPanel() : GLPanel() {
|
||||||
|
@ -26,6 +26,10 @@ PrimaryGLContext(canvas, sharedContext) {
|
|||||||
testChildPanel2.setBorderColor(RGB(1.0,0.0,0.0));
|
testChildPanel2.setBorderColor(RGB(1.0,0.0,0.0));
|
||||||
testChildPanel2.setBorderPx(1);
|
testChildPanel2.setBorderPx(1);
|
||||||
|
|
||||||
|
testText1.setText("Testing 123..");
|
||||||
|
testText1.setFill(GLPanel::GLPANEL_FILL_NONE);
|
||||||
|
testChildPanel2.addChild(&testText1);
|
||||||
|
|
||||||
testPanel.addChild(&testChildPanel);
|
testPanel.addChild(&testChildPanel);
|
||||||
testPanel.addChild(&testChildPanel2);
|
testPanel.addChild(&testChildPanel2);
|
||||||
}
|
}
|
||||||
|
@ -17,4 +17,5 @@ private:
|
|||||||
GLPanel testPanel;
|
GLPanel testPanel;
|
||||||
GLTestPanel testChildPanel;
|
GLTestPanel testChildPanel;
|
||||||
GLPanel testChildPanel2;
|
GLPanel testChildPanel2;
|
||||||
|
GLTextPanel testText1;
|
||||||
};
|
};
|
||||||
|
@ -397,16 +397,20 @@ float GLFont::getStringWidth(std::string str, float size, float viewAspect) {
|
|||||||
return width;
|
return width;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLFont::drawString(std::string str, float xpos, float ypos, int pxHeight, Align hAlign, Align vAlign) {
|
void GLFont::drawString(std::string str, float xpos, float ypos, int pxHeight, Align hAlign, Align vAlign, int vpx, int vpy) {
|
||||||
|
|
||||||
GLint vp[4];
|
|
||||||
|
|
||||||
pxHeight *= 2;
|
pxHeight *= 2;
|
||||||
|
|
||||||
glGetIntegerv( GL_VIEWPORT, vp);
|
if (!vpx || !vpy) {
|
||||||
|
GLint vp[4];
|
||||||
|
glGetIntegerv( GL_VIEWPORT, vp);
|
||||||
|
vpx = vp[2];
|
||||||
|
vpy = vp[3];
|
||||||
|
}
|
||||||
|
|
||||||
float size = (float) pxHeight / (float) vp[3];
|
float size = (float) pxHeight / (float) vpy;
|
||||||
float viewAspect = (float) vp[2] / (float) vp[3];
|
float viewAspect = (float) vpx / (float) vpy;
|
||||||
float msgWidth = getStringWidth(str, size, viewAspect);
|
float msgWidth = getStringWidth(str, size, viewAspect);
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
@ -66,7 +66,7 @@ public:
|
|||||||
bool isLoaded();
|
bool isLoaded();
|
||||||
|
|
||||||
float getStringWidth(std::string str, float size, float viewAspect);
|
float getStringWidth(std::string str, float size, float viewAspect);
|
||||||
void drawString(std::string str, float xpos, float ypos, int pxHeight, Align hAlign = GLFONT_ALIGN_LEFT, Align vAlign = GLFONT_ALIGN_TOP);
|
void drawString(std::string str, float xpos, float ypos, int pxHeight, Align hAlign = GLFONT_ALIGN_LEFT, Align vAlign = GLFONT_ALIGN_TOP, int vpx=0, int vpy=0);
|
||||||
|
|
||||||
static GLFont fonts[GLFONT_MAX];
|
static GLFont fonts[GLFONT_MAX];
|
||||||
static GLFont &getFont(GLFontSize esize);
|
static GLFont &getFont(GLFontSize esize);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user