summaryrefslogtreecommitdiffstats
path: root/Project/Text.cpp
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2017-01-03 19:03:12 -0200
committerThales1330 <thaleslima.ufu@gmail.com>2017-01-03 19:03:12 -0200
commita1932eec23589ed67d824873b37de3e83a09cd24 (patch)
treedb2bed8e7a9c87ad6115a1b8a6a347cad6753b06 /Project/Text.cpp
parent2c0b51586b3b2243ae0fdcd653139818e4b4e23e (diff)
downloadPSP.git-a1932eec23589ed67d824873b37de3e83a09cd24.tar.gz
PSP.git-a1932eec23589ed67d824873b37de3e83a09cd24.tar.xz
PSP.git-a1932eec23589ed67d824873b37de3e83a09cd24.zip
Text element optimizated, but buggy
Element/parent search buggy
Diffstat (limited to 'Project/Text.cpp')
-rw-r--r--Project/Text.cpp102
1 files changed, 53 insertions, 49 deletions
diff --git a/Project/Text.cpp b/Project/Text.cpp
index 05915f7..e3a5e7e 100644
--- a/Project/Text.cpp
+++ b/Project/Text.cpp
@@ -20,8 +20,8 @@ Text::Text()
Text::Text(wxPoint2DDouble position)
: Element()
{
+ m_position = position;
SetText(m_text);
- SetPosition(position);
}
Text::~Text() {}
@@ -51,26 +51,21 @@ void Text::Draw(wxPoint2DDouble translation, double scale)
}
// Draw text (layer 2)
+ glEnable(GL_TEXTURE_2D);
glColor4d(0.0, 0.0, 0.0, 1.0);
if(!m_isMultlineText) { // Only one line
- wxGLString glString(m_text);
- glString.setFont(wxFont(m_fontSize, wxFONTFAMILY_ROMAN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
- glString.consolidate(&dc);
- glString.bind();
- glString.render(m_position.m_x, m_position.m_y);
+ m_glString->bind();
+ m_glString->render(m_position.m_x, m_position.m_y);
} else { // Multiples lines
- wxGLStringArray glStringArray;
- // Fill the string array.
- for(int i = 0; i < (int)m_multlineText.size(); i++) glStringArray.addString(m_multlineText[i]);
- glStringArray.setFont(wxFont(m_fontSize, wxFONTFAMILY_ROMAN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
- glStringArray.consolidate(&dc);
- glStringArray.bind();
+ m_glStringArray->bind();
// The text will be printed centralized.
- for(int i = 0; i < (int)m_multlineText.size(); i++) {
- glStringArray.get(i).render(m_position.m_x, m_position.m_y - m_height / 2.0 +
- glStringArray.get(i).getheight() * double(i) + glStringArray.get(i).getheight() / 2.0);
+ double lineHeight = m_height / (double)m_numberOfLines;
+ for(int i = 0; i < m_numberOfLines; i++) {
+ m_glStringArray->get(i).render(
+ m_position.m_x, m_position.m_y - m_height / 2.0 + lineHeight / 2.0 + lineHeight * double(i));
}
}
+ glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
@@ -83,46 +78,56 @@ bool Text::Intersects(wxRect2DDouble rect) const
void Text::SetText(wxString text)
{
+ glEnable(GL_TEXTURE_2D);
m_text = text;
+ wxFont font(m_fontSize, wxFONTFAMILY_ROMAN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
- // Creating a glString to get the text size.
- int numberOfLines = m_text.Freq('\n') + 1;
- if(numberOfLines == 1) { // Only one line
- m_isMultlineText = false;
- wxGLString glString(m_text);
- glString.setFont(wxFont(m_fontSize, wxFONTFAMILY_ROMAN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
- wxScreenDC dc;
- glString.consolidate(&dc);
- glString.bind();
+ wxScreenDC dc;
+ if(m_glString) {
+ delete m_glString;
+ m_glString = NULL;
+ }
+ if(m_glStringArray) {
+ delete m_glStringArray;
+ m_glStringArray = NULL;
+ }
- m_width = glString.getWidth();
- m_height = glString.getheight();
+ m_numberOfLines = m_text.Freq('\n') + 1;
+ if(m_numberOfLines == 1) { // Only one line
+ m_isMultlineText = false;
+ m_glString = new wxGLString(m_text);
+ m_glString->setFont(font);
+ m_glString->consolidate(&dc);
+ m_width = m_glString->getWidth();
+ m_height = m_glString->getheight();
} else {
m_isMultlineText = true;
- m_multlineText.clear();
- wxString text = m_text;
- double w = 0.0, h = 0.0;
- for(int i = 0; i < numberOfLines; ++i) {
- wxString nextLine;
- wxString currentLine = text.BeforeFirst('\n', &nextLine);
- text = nextLine;
- m_multlineText.push_back(currentLine);
+ m_glStringArray = new wxGLStringArray();
+ dc.SetFont(font);
- wxGLString glString(currentLine);
- glString.setFont(wxFont(m_fontSize, wxFONTFAMILY_ROMAN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
- wxScreenDC dc;
- glString.consolidate(&dc);
- glString.bind();
+ int w = 0, h = 0;
+ wxString multText = m_text;
+ for(int i = 0; i < m_numberOfLines; ++i) {
+ wxString nextLine;
+ wxString currentLine = multText.BeforeFirst('\n', &nextLine);
+ multText = nextLine;
+ m_glStringArray->addString(currentLine);
- if(w < glString.getWidth()) w = glString.getWidth(); // Get the major width.
- h = glString.getheight();
+ wxSize size = dc.GetTextExtent(currentLine);
+ if(size.GetWidth() > w) w = size.GetWidth();
+ h += size.GetHeight();
}
+
+ m_glStringArray->setFont(font);
+ m_glStringArray->consolidate(&dc);
+
m_width = w;
- m_height = h * (double)numberOfLines;
+ m_height = h;
}
// Update text rectangle.
SetPosition(m_position);
+ glDisable(GL_TEXTURE_2D);
}
void Text::Rotate(bool clockwise)
@@ -149,6 +154,7 @@ void Text::UpdateText(double systemPowerBase)
{
switch(m_elementType) {
case TYPE_NONE:
+ SetText(m_text);
break;
case TYPE_BUS: {
Bus* bus = (Bus*)m_element;
@@ -833,8 +839,7 @@ void Text::UpdateText(double systemPowerBase)
SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
}
case UNIT_VAr: {
- SetText(
- wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " VAr");
+ SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " VAr");
}
case UNIT_kVAr: {
SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
@@ -872,8 +877,7 @@ void Text::UpdateText(double systemPowerBase)
SetText(wxString::FromDouble(reativePower, m_decimalPlaces) + " p.u.");
}
case UNIT_VAr: {
- SetText(
- wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " VAr");
+ SetText(wxString::FromDouble(reativePower * systemPowerBase, m_decimalPlaces) + " VAr");
}
case UNIT_kVAr: {
SetText(wxString::FromDouble(reativePower * systemPowerBase / 1e3, m_decimalPlaces) +
@@ -897,7 +901,7 @@ void Text::UpdateText(double systemPowerBase)
Element* Text::GetCopy()
{
- Text* copy = new Text();
- *copy = *this;
- return copy;
+ Text* copy = new Text();
+ *copy = *this;
+ return copy;
}