/// Returns the size required by a call to RenderText if it were to be done now. Vector2f TextFont::CalculateRenderSizeUnits(Text & text) { if (text.Length() < 1) { return Vector2f(scale[0], scale[1]); } // Set starting variables. NewText(text); // Go up to and include the NULL-sign! for (int i = 0; i < text.ArraySize(); ++i) { currentCharIndex = i; currentChar = text.c_str()[i]; if (currentChar == '\0') { EndText(); break; } nextChar = text.c_str()[i + 1]; if (EvaluateSpecialChar()) continue; StartChar(); // RenderChar(); EndChar(); lastChar = currentChar; } return Vector2f (maxRowSizeX, AbsoluteValue(pivotPoint.y)); }
static void set_param(row r, const Text& val, int index) { #if defined(_UNICODE) || defined(UNICODE) int nResult = sqlite3_bind_text16(r, index + 1, val.c_str(), -1, SQLITE_TRANSIENT); #else int nResult = sqlite3_bind_text(r, index + 1, val.c_str(), -1, SQLITE_TRANSIENT); #endif assert(SQLITE_OK == nResult); }
/// Renders text ^^ void TextFont::RenderText(Text & text, GraphicsState & graphicsState) { // Set starting variables. NewText(text); /// One color for all text? this->SetColor(text.color); /// Save old shader! Shader * oldShader = ActiveShader(); // Load shader, set default uniform values, etc. if (!PrepareForRender()) return; /// Sort the carets in order to render selected text properly. int min, max; if (text.caretPosition < text.previousCaretPosition) { min = text.caretPosition; max = text.previousCaretPosition; } else { max = text.caretPosition; min = text.previousCaretPosition; } bool shouldRenderCaret = Timer::GetCurrentTimeMs() % 1000 > 500; if (text.Length() == 0 && shouldRenderCaret) RenderChar('|'); for (i = 0; i < text.Length(); ++i) { if (text.caretPosition == i && shouldRenderCaret) { RenderChar('|'); } currentCharIndex = i; currentChar = text.c_str()[i]; if (currentChar == 0) break; nextChar = text.c_str()[i + 1]; if (EvaluateSpecialChar()) continue; StartChar(); // Move in. RenderChar(currentChar); // Render /// If we are between the 2 active carets, render the region the char covers over with a white quad ? if (text.previousCaretPosition != -1 && i >= min && i < max) { RenderSelection(currentChar); } EndChar(); // Move out. lastChar = currentChar; } // Caret at the end? if (text.caretPosition >= text.Length() && shouldRenderCaret) { RenderChar('|'); } OnEndRender(graphicsState); /// Revert to old shader! ShadeMan.SetActiveShader(oldShader); }