mirror of
https://github.com/glest/glest-source.git
synced 2025-02-25 20:22:31 +01:00
- bugfix for rendering labels (now properly lines up with other controls)
This commit is contained in:
parent
75e73ec85d
commit
5d0eea51e3
@ -251,6 +251,13 @@ void GraphicComponent::resetFade(){
|
||||
const int GraphicLabel::defH= 20;
|
||||
const int GraphicLabel::defW= 70;
|
||||
|
||||
GraphicLabel::GraphicLabel() {
|
||||
centered = false;
|
||||
wordWrap = false;
|
||||
centeredW = -1;
|
||||
centeredH = 1;
|
||||
}
|
||||
|
||||
void GraphicLabel::init(int x, int y, int w, int h, bool centered, Vec3f textColor, bool wordWrap) {
|
||||
GraphicComponent::init(x, y, w, h);
|
||||
this->centered= centered;
|
||||
@ -258,6 +265,22 @@ void GraphicLabel::init(int x, int y, int w, int h, bool centered, Vec3f textCol
|
||||
this->wordWrap = wordWrap;
|
||||
}
|
||||
|
||||
bool GraphicLabel::getCenteredW() const {
|
||||
bool result = (centered || centeredW == 1);
|
||||
return result;
|
||||
}
|
||||
void GraphicLabel::setCenteredW(bool centered) {
|
||||
centeredW = (centered ? 1 : 0);
|
||||
}
|
||||
|
||||
bool GraphicLabel::getCenteredH() const {
|
||||
bool result = (centered || centeredH == 1);
|
||||
return result;
|
||||
}
|
||||
void GraphicLabel::setCenteredH(bool centered) {
|
||||
centeredH = (centered ? 1 : 0);
|
||||
}
|
||||
|
||||
// =====================================================
|
||||
// class GraphicButton
|
||||
// =====================================================
|
||||
|
@ -125,11 +125,22 @@ private:
|
||||
Vec3f textColor;
|
||||
bool wordWrap;
|
||||
|
||||
int centeredW;
|
||||
int centeredH;
|
||||
|
||||
public:
|
||||
GraphicLabel();
|
||||
void init(int x, int y, int w=defW, int h=defH, bool centered= false, Vec3f textColor=Vec3f(1.f, 1.f, 1.f), bool wordWrap=false);
|
||||
|
||||
bool getCentered() const {return centered;}
|
||||
void setCentered(bool centered) {this->centered= centered;}
|
||||
|
||||
bool getCenteredW() const;
|
||||
void setCenteredW(bool centered);
|
||||
|
||||
bool getCenteredH() const;
|
||||
void setCenteredH(bool centered);
|
||||
|
||||
Vec3f getTextColor() const {return textColor;}
|
||||
void setTextColor(Vec3f color) {this->textColor= color;}
|
||||
|
||||
|
@ -1655,9 +1655,11 @@ void Renderer::renderTextBoundingBox3D(const string &text, Font3D *font, float a
|
||||
getCentered3DPos(text, font, pos, w, h, centeredW, centeredH);
|
||||
}
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer3D,font);
|
||||
//textRenderer3D->begin(font);
|
||||
textRenderer3D->render(text, pos.x, pos.y);
|
||||
textRenderer3D->end();
|
||||
//textRenderer3D->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glPopAttrib();
|
||||
@ -1671,9 +1673,11 @@ void Renderer::renderText3D(const string &text, Font3D *font, float alpha, int x
|
||||
Vec2i pos= Vec2i(x, y);
|
||||
//Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
//textRenderer3D->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer3D,font);
|
||||
textRenderer3D->render(text, pos.x, pos.y, centered);
|
||||
textRenderer3D->end();
|
||||
//textRenderer3D->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glPopAttrib();
|
||||
@ -1686,9 +1690,11 @@ void Renderer::renderText(const string &text, Font2D *font, float alpha, int x,
|
||||
|
||||
Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer->begin(font);
|
||||
//textRenderer->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer,font);
|
||||
textRenderer->render(text, pos.x, pos.y);
|
||||
textRenderer->end();
|
||||
//textRenderer->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
@ -1725,7 +1731,7 @@ Vec2f Renderer::getCentered3DPos(const string &text, Font3D *font, Vec2f &pos, i
|
||||
//pos.y += (lineHeight / 2);
|
||||
}
|
||||
else if(lineHeight > h) {
|
||||
//printf("line %d, lineHeight [%f] h [%d] text [%s]\n",__LINE__,lineHeight,h,text.c_str());
|
||||
printf("line %d, lineHeight [%f] h [%d] text [%s]\n",__LINE__,lineHeight,h,text.c_str());
|
||||
|
||||
#ifdef USE_STREFLOP
|
||||
pos.y += (streflop::ceil((float)lineHeight - (float)h));
|
||||
@ -1748,9 +1754,11 @@ void Renderer::renderTextBoundingBox3D(const string &text, Font3D *font, const V
|
||||
getCentered3DPos(text, font, pos, w, h,centeredW,centeredH);
|
||||
}
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
//textRenderer3D->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer3D,font);
|
||||
textRenderer3D->render(text, pos.x, pos.y);
|
||||
textRenderer3D->end();
|
||||
//textRenderer3D->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
@ -1762,9 +1770,11 @@ void Renderer::renderText3D(const string &text, Font3D *font, const Vec3f &color
|
||||
Vec2i pos= Vec2i(x, y);
|
||||
//Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
//textRenderer3D->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer3D,font);
|
||||
textRenderer3D->render(text, pos.x, pos.y, centered);
|
||||
textRenderer3D->end();
|
||||
//textRenderer3D->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
@ -1775,9 +1785,11 @@ void Renderer::renderText(const string &text, Font2D *font, const Vec3f &color,
|
||||
|
||||
Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer->begin(font);
|
||||
//textRenderer->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer,font);
|
||||
textRenderer->render(text, pos.x, pos.y);
|
||||
textRenderer->end();
|
||||
//textRenderer->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
@ -1794,9 +1806,11 @@ void Renderer::renderTextBoundingBox3D(const string &text, Font3D *font, const V
|
||||
getCentered3DPos(text, font, pos, w, h,centeredW,centeredH);
|
||||
}
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
//textRenderer3D->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer3D,font);
|
||||
textRenderer3D->render(text, pos.x, pos.y);
|
||||
textRenderer3D->end();
|
||||
//textRenderer3D->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glPopAttrib();
|
||||
@ -1810,9 +1824,11 @@ void Renderer::renderText3D(const string &text, Font3D *font, const Vec4f &color
|
||||
Vec2i pos= Vec2i(x, y);
|
||||
//Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
//textRenderer3D->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer3D,font);
|
||||
textRenderer3D->render(text, pos.x, pos.y, centered);
|
||||
textRenderer3D->end();
|
||||
//textRenderer3D->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glPopAttrib();
|
||||
@ -1825,9 +1841,11 @@ void Renderer::renderText(const string &text, Font2D *font, const Vec4f &color,
|
||||
|
||||
Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer->begin(font);
|
||||
//textRenderer->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer,font);
|
||||
textRenderer->render(text, pos.x, pos.y);
|
||||
textRenderer->end();
|
||||
//textRenderer->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
@ -1841,7 +1859,8 @@ void Renderer::renderTextShadow3D(const string &text, Font3D *font,const Vec4f &
|
||||
|
||||
Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer3D->begin(font);
|
||||
//textRenderer3D->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer3D,font);
|
||||
if(color.w < 0.5) {
|
||||
glColor3f(0.0f, 0.0f, 0.0f);
|
||||
|
||||
@ -1850,7 +1869,8 @@ void Renderer::renderTextShadow3D(const string &text, Font3D *font,const Vec4f &
|
||||
glColor3f(color.x,color.y,color.z);
|
||||
|
||||
textRenderer3D->render(text, pos.x, pos.y);
|
||||
textRenderer3D->end();
|
||||
//textRenderer3D->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
@ -1864,7 +1884,8 @@ void Renderer::renderTextShadow(const string &text, Font2D *font,const Vec4f &co
|
||||
|
||||
Vec2i pos= centered? computeCenteredPos(text, font, x, y): Vec2i(x, y);
|
||||
|
||||
textRenderer->begin(font);
|
||||
//textRenderer->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer,font);
|
||||
if(color.w < 0.5) {
|
||||
glColor3f(0.0f, 0.0f, 0.0f);
|
||||
|
||||
@ -1873,7 +1894,8 @@ void Renderer::renderTextShadow(const string &text, Font2D *font,const Vec4f &co
|
||||
glColor3f(color.x,color.y,color.z);
|
||||
|
||||
textRenderer->render(text, pos.x, pos.y);
|
||||
textRenderer->end();
|
||||
//textRenderer->end();
|
||||
safeTextRender.end();
|
||||
|
||||
glPopAttrib();
|
||||
}
|
||||
@ -1932,10 +1954,11 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
|
||||
if(renderText3DEnabled == true) {
|
||||
//renderText3D(lines[i], label->getFont3D(), (*color), textPos.x, textPos.y, label->getCentered());
|
||||
//printf("Text Render3D [%s] font3d [%p]\n",lines[i].c_str(),label->getFont3D());
|
||||
|
||||
renderTextBoundingBox3D(lines[i], label->getFont3D(), (*color), x, y, w, h, label->getCentered(),label->getCentered());
|
||||
//printf("Label render C\n");
|
||||
renderTextBoundingBox3D(lines[i], label->getFont3D(), (*color), x, y, w, h, label->getCenteredW(),label->getCenteredH());
|
||||
}
|
||||
else {
|
||||
//printf("Label render D\n");
|
||||
renderText(lines[i], label->getFont(), (*color), textPos.x, textPos.y, label->getCentered());
|
||||
}
|
||||
}
|
||||
@ -1943,10 +1966,11 @@ void Renderer::renderLabel(GraphicLabel *label,const Vec4f *color) {
|
||||
if(renderText3DEnabled == true) {
|
||||
//renderText3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||
//printf("Text Render3D [%s] font3d [%p]\n",lines[i].c_str(),label->getFont3D());
|
||||
|
||||
renderTextBoundingBox3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), x, y, w, h, label->getCentered(),label->getCentered());
|
||||
//printf("Label render E\n");
|
||||
renderTextBoundingBox3D(lines[i], label->getFont3D(), GraphicComponent::getFade(), x, y, w, h, label->getCenteredW(),label->getCenteredH());
|
||||
}
|
||||
else {
|
||||
//printf("Label render F\n");
|
||||
renderText(lines[i], label->getFont(), GraphicComponent::getFade(), textPos.x, textPos.y, label->getCentered());
|
||||
}
|
||||
}
|
||||
@ -5991,14 +6015,16 @@ void Renderer::renderProgressBar(int size, int x, int y, Font2D *font, int custo
|
||||
//text
|
||||
glColor3fv(defColor.ptr());
|
||||
|
||||
textRenderer->begin(font);
|
||||
//textRenderer->begin(font);
|
||||
TextRendererSafeWrapper safeTextRender(textRenderer,font);
|
||||
if(centeredText == true) {
|
||||
textRenderer->render(renderText.c_str(), x + maxSize / 2, y, centeredText);
|
||||
}
|
||||
else {
|
||||
textRenderer->render(renderText.c_str(), x, y, centeredText);
|
||||
}
|
||||
textRenderer->end();
|
||||
//textRenderer->end();
|
||||
safeTextRender.end();
|
||||
}
|
||||
|
||||
|
||||
|
@ -19,6 +19,7 @@ namespace Shared { namespace Graphics { namespace Gl {
|
||||
|
||||
class Font2DGl;
|
||||
class Font3DGl;
|
||||
class TextRenderer2DGl;
|
||||
class TextRenderer3DGl;
|
||||
|
||||
// =====================================================
|
||||
@ -64,6 +65,46 @@ public:
|
||||
virtual void end();
|
||||
};
|
||||
|
||||
|
||||
|
||||
class TextRendererSafeWrapper {
|
||||
protected:
|
||||
TextRenderer *renderer;
|
||||
Font *font;
|
||||
bool mustEnd;
|
||||
|
||||
public:
|
||||
|
||||
TextRendererSafeWrapper(TextRenderer *renderer,Font *font) {
|
||||
mustEnd = false;
|
||||
this->renderer = renderer;
|
||||
this->font = font;
|
||||
begin();
|
||||
}
|
||||
~TextRendererSafeWrapper() {
|
||||
end();
|
||||
}
|
||||
|
||||
void begin() {
|
||||
if(this->renderer != NULL) {
|
||||
if(dynamic_cast<TextRenderer2DGl *>(renderer) != NULL) {
|
||||
dynamic_cast<TextRenderer2DGl *>(renderer)->begin(dynamic_cast<Font2D *>(this->font));
|
||||
mustEnd = true;
|
||||
}
|
||||
if(dynamic_cast<TextRenderer3DGl *>(renderer) != NULL) {
|
||||
mustEnd = true;
|
||||
dynamic_cast<TextRenderer3DGl *>(renderer)->begin(dynamic_cast<Font3D *>(this->font));
|
||||
}
|
||||
}
|
||||
}
|
||||
void end() {
|
||||
if(this->renderer != NULL && mustEnd == true) {
|
||||
this->renderer->end();
|
||||
mustEnd = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
}}}//end namespace
|
||||
|
||||
#endif
|
||||
|
@ -404,22 +404,26 @@ void TextRenderer3DGl::render(const string &text, float x, float y, bool center
|
||||
}
|
||||
|
||||
void TextRenderer3DGl::specialFTGLErrorCheckWorkaround(string text) {
|
||||
GLenum error = glGetError();
|
||||
if(error) {
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\nIn [%s::%s Line: %d] error = %d for text [%s]\n\n",__FILE__,__FUNCTION__,__LINE__,error,text.c_str());
|
||||
|
||||
if(currentFTGLErrorCount > 0) {
|
||||
printf("\n**FTGL Error = %d [%s] for text [%s] currentFTGLErrorCount = %d\n\n",error,gluErrorString(error),text.c_str(),currentFTGLErrorCount);
|
||||
fflush(stdout);
|
||||
for(GLenum error = glGetError(); error != GL_NO_ERROR; error = glGetError()) {
|
||||
//error = glGetError();
|
||||
//if(error) {
|
||||
if(SystemFlags::VERBOSE_MODE_ENABLED) printf("\n\nIn [%s::%s Line: %d] error = %d for text [%s]\n\n",__FILE__,__FUNCTION__,__LINE__,error,text.c_str());
|
||||
|
||||
assertGlWithErrorNumber(error);
|
||||
if(currentFTGLErrorCount > 0) {
|
||||
printf("\n**FTGL Error = %d [%s] for text [%s] currentFTGLErrorCount = %d\n\n",error,gluErrorString(error),text.c_str(),currentFTGLErrorCount);
|
||||
fflush(stdout);
|
||||
|
||||
assertGlWithErrorNumber(error);
|
||||
}
|
||||
else {
|
||||
printf("\n**FTGL #2 Error = %d [%s] for text [%s] currentFTGLErrorCount = %d\n\n",error,gluErrorString(error),text.c_str(),currentFTGLErrorCount);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
currentFTGLErrorCount++;
|
||||
}
|
||||
else {
|
||||
//printf("\n**FTGL #2 Error = %d for text [%s] currentFTGLErrorCount = %d\n\n",error,text.c_str(),currentFTGLErrorCount);
|
||||
}
|
||||
|
||||
currentFTGLErrorCount++;
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
void TextRenderer3DGl::internalRender(const string &text, float x, float y, bool centered, Vec3f *color) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user