本文整理汇总了C++中vecText类的典型用法代码示例。如果您正苦于以下问题:C++ vecText类的具体用法?C++ vecText怎么用?C++ vecText使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了vecText类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: LineBreakText
void CGUITextLayout::LineBreakText(const vecText &text, vector<CGUIString> &lines)
{
int nMaxLines = (m_maxHeight > 0 && m_font && m_font->GetLineHeight() > 0)?(int)ceilf(m_maxHeight / m_font->GetLineHeight()):-1;
vecText::const_iterator lineStart = text.begin();
vecText::const_iterator pos = text.begin();
while (pos != text.end() && (nMaxLines <= 0 || lines.size() < (size_t)nMaxLines))
{
// Get the current letter in the string
character_t letter = *pos;
// Handle the newline character
if ((letter & 0xffff) == L'\n' )
{ // push back everything up till now
CGUIString string(lineStart, pos, true);
lines.push_back(string);
lineStart = pos + 1;
}
pos++;
}
// handle the last line if non-empty
if (lineStart < text.end() && (nMaxLines <= 0 || lines.size() < (size_t)nMaxLines))
{
CGUIString string(lineStart, text.end(), true);
lines.push_back(string);
}
}
开发者ID:DJMatty,项目名称:xbmc,代码行数:26,代码来源:GUITextLayout.cpp
示例2:
void CGUITextLayout::AppendToUTF32(const CStdStringW &utf16, character_t colStyle, vecText &utf32)
{
// NOTE: Assumes a single line of text
utf32.reserve(utf32.size() + utf16.size());
for (unsigned int i = 0; i < utf16.size(); i++)
utf32.push_back(utf16[i] | colStyle);
}
开发者ID:DJMatty,项目名称:xbmc,代码行数:7,代码来源:GUITextLayout.cpp
示例3: getFeed
void CRssReader::getFeed(vecText &text)
{
text.clear();
// double the spaces at the start of the set
for (int j = 0; j < m_spacesBetweenFeeds; j++)
text.push_back(L' ');
for (unsigned int i = 0; i < m_strFeed.size(); i++)
{
for (int j = 0; j < m_spacesBetweenFeeds; j++)
text.push_back(L' ');
for (unsigned int j = 0; j < m_strFeed[i].size(); j++)
{
character_t letter = m_strFeed[i][j] | ((m_strColors[i][j] - 48) << 16);
text.push_back(letter);
}
}
}
开发者ID:0xheart0,项目名称:xbmc,代码行数:18,代码来源:RssReader.cpp
示例4: DrawScrollingText
void CGUIFont::DrawScrollingText(float x, float y, const vecColors &colors, color_t shadowColor,
const vecText &text, uint32_t alignment, float maxWidth, const CScrollInfo &scrollInfo)
{
if (!m_font) return;
if (!shadowColor) shadowColor = m_shadowColor;
if (!text.size() || ClippedRegionIsEmpty(x, y, maxWidth, alignment))
return; // nothing to render
if (!scrollInfo.m_widthValid)
{
/* Calculate the pixel width of the complete string */
scrollInfo.m_textWidth = GetTextWidth(text);
scrollInfo.m_totalWidth = scrollInfo.m_textWidth + GetTextWidth(scrollInfo.suffix);
scrollInfo.m_widthValid = true;
}
assert(scrollInfo.m_totalWidth != 0);
float textPixelWidth = ROUND(scrollInfo.m_textWidth / g_graphicsContext.GetGUIScaleX());
float suffixPixelWidth = ROUND((scrollInfo.m_totalWidth - scrollInfo.m_textWidth) / g_graphicsContext.GetGUIScaleX());
float offset;
if(scrollInfo.pixelSpeed >= 0)
offset = scrollInfo.pixelPos;
else
offset = scrollInfo.m_totalWidth - scrollInfo.pixelPos;
vecColors renderColors;
for (unsigned int i = 0; i < colors.size(); i++)
renderColors.push_back(g_graphicsContext.MergeAlpha(colors[i] ? colors[i] : m_textColor));
bool scroll = !scrollInfo.waitTime && scrollInfo.pixelSpeed;
if (shadowColor)
{
shadowColor = g_graphicsContext.MergeAlpha(shadowColor);
vecColors shadowColors;
for (unsigned int i = 0; i < renderColors.size(); i++)
shadowColors.push_back((renderColors[i] & 0xff000000) != 0 ? shadowColor : 0);
for (float dx = -offset; dx < maxWidth; dx += scrollInfo.m_totalWidth)
{
m_font->DrawTextInternal(x + dx + 1, y + 1, shadowColors, text, alignment, textPixelWidth, scroll);
m_font->DrawTextInternal(x + dx + scrollInfo.m_textWidth + 1, y + 1, shadowColors, scrollInfo.suffix, alignment, suffixPixelWidth, scroll);
}
}
for (float dx = -offset; dx < maxWidth; dx += scrollInfo.m_totalWidth)
{
m_font->DrawTextInternal(x + dx, y, renderColors, text, alignment, textPixelWidth, scroll);
m_font->DrawTextInternal(x + dx + scrollInfo.m_textWidth, y, renderColors, scrollInfo.suffix, alignment, suffixPixelWidth, scroll);
}
g_graphicsContext.RestoreClipRegion();
}
开发者ID:halotestin,项目名称:xbmc,代码行数:53,代码来源:GUIFont.cpp
示例5: LineBreakText
void CGUITextLayout::LineBreakText(const vecText &text, vector<CGUIString> &lines)
{
bool bUseHeight = (m_maxHeight > 0 && m_font && m_font->GetLineHeight() > 0);
int nMaxLines = bUseHeight?(int)(m_maxHeight / m_font->GetLineHeight()):-1;
if (bUseHeight && nMaxLines == 0) // hack. if height is not enough - force 1 line of text
nMaxLines = 1;
vecText::const_iterator lineStart = text.begin();
vecText::const_iterator pos = text.begin();
while (pos != text.end() && (nMaxLines <= 0 || lines.size() < (size_t)nMaxLines))
{
// Get the current letter in the string
character_t letter = *pos;
// Handle the newline character
if ((letter & 0xffff) == L'\n' )
{ // push back everything up till now
CGUIString string(lineStart, pos, true);
lines.push_back(string);
lineStart = pos + 1;
}
pos++;
}
}
开发者ID:DakaiTV,项目名称:DakaiBoxee,代码行数:24,代码来源:GUITextLayout.cpp
示例6: UpdateScrollInfo
bool CGUIFont::UpdateScrollInfo(const vecText &text, CScrollInfo &scrollInfo)
{
// draw at our scroll position
// we handle the scrolling as follows:
// We scroll on a per-pixel basis (eschewing the use of character indices
// which were also in use previously). The complete string, including suffix,
// is plotted to achieve the desired effect - normally just the one time, but
// if there is a wrap point within the viewport then it will be plotted twice.
// If the string is smaller than the viewport, then it may be plotted even
// more times than that.
//
if (g_application.ScreenSaverDisablesAutoScrolling())
return false;
if (scrollInfo.waitTime)
{
scrollInfo.waitTime--;
return false;
}
if (text.empty())
return false;
CScrollInfo old(scrollInfo);
// move along by the appropriate scroll amount
float scrollAmount = fabs(scrollInfo.GetPixelsPerFrame() * g_graphicsContext.GetGUIScaleX());
if (!scrollInfo.m_widthValid)
{
/* Calculate the pixel width of the complete string */
scrollInfo.m_textWidth = GetTextWidth(text);
scrollInfo.m_totalWidth = scrollInfo.m_textWidth + GetTextWidth(scrollInfo.suffix);
scrollInfo.m_widthValid = true;
}
scrollInfo.pixelPos += scrollAmount;
assert(scrollInfo.m_totalWidth != 0);
while (scrollInfo.pixelPos >= scrollInfo.m_totalWidth)
scrollInfo.pixelPos -= scrollInfo.m_totalWidth;
if (scrollInfo.pixelPos != old.pixelPos)
return true;
else
return false;
}
开发者ID:halotestin,项目名称:xbmc,代码行数:45,代码来源:GUIFont.cpp
示例7: Begin
void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors, const vecText &text, uint32_t alignment, float maxPixelWidth, bool scrolling)
{
Begin();
// save the origin, which is scaled separately
m_originX = x;
m_originY = y;
// Check if we will really need to truncate or justify the text
if ( alignment & XBFONT_TRUNCATED )
{
if ( maxPixelWidth <= 0.0f || GetTextWidthInternal(text.begin(), text.end()) <= maxPixelWidth)
alignment &= ~XBFONT_TRUNCATED;
}
else if ( alignment & XBFONT_JUSTIFIED )
{
if ( maxPixelWidth <= 0.0f )
alignment &= ~XBFONT_JUSTIFIED;
}
// calculate sizing information
float startX = 0;
float startY = (alignment & XBFONT_CENTER_Y) ? -0.5f*m_cellHeight : 0; // vertical centering
if ( alignment & (XBFONT_RIGHT | XBFONT_CENTER_X) )
{
// Get the extent of this line
float w = GetTextWidthInternal( text.begin(), text.end() );
if ( alignment & XBFONT_TRUNCATED && w > maxPixelWidth + 0.5f ) // + 0.5f due to rounding issues
w = maxPixelWidth;
if ( alignment & XBFONT_CENTER_X)
w *= 0.5f;
// Offset this line's starting position
startX -= w;
}
float spacePerLetter = 0; // for justification effects
if ( alignment & XBFONT_JUSTIFIED )
{
// first compute the size of the text to render in both characters and pixels
unsigned int lineChars = 0;
float linePixels = 0;
for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos)
{
Character *ch = GetCharacter(*pos);
if (ch)
{ // spaces have multiple times the justification spacing of normal letters
lineChars += ((*pos & 0xffff) == L' ') ? justification_word_weight : 1;
linePixels += ch->advance;
}
}
if (lineChars > 1)
spacePerLetter = (maxPixelWidth - linePixels) / (lineChars - 1);
}
float cursorX = 0; // current position along the line
for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos)
{
// If starting text on a new line, determine justification effects
// Get the current letter in the CStdString
color_t color = (*pos & 0xff0000) >> 16;
if (color >= colors.size())
color = 0;
color = colors[color];
// grab the next character
Character *ch = GetCharacter(*pos);
if (!ch) continue;
if ( alignment & XBFONT_TRUNCATED )
{
// Check if we will be exceeded the max allowed width
if ( cursorX + ch->advance + 3 * m_ellipsesWidth > maxPixelWidth )
{
// Yup. Let's draw the ellipses, then bail
// Perhaps we should really bail to the next line in this case??
Character *period = GetCharacter(L'.');
if (!period)
break;
for (int i = 0; i < 3; i++)
{
RenderCharacter(startX + cursorX, startY, period, color, !scrolling);
cursorX += period->advance;
}
break;
}
}
else if (maxPixelWidth > 0 && cursorX > maxPixelWidth)
break; // exceeded max allowed width - stop rendering
RenderCharacter(startX + cursorX, startY, ch, color, !scrolling);
if ( alignment & XBFONT_JUSTIFIED )
{
if ((*pos & 0xffff) == L' ')
cursorX += ch->advance + spacePerLetter * justification_word_weight;
else
cursorX += ch->advance + spacePerLetter;
//.........这里部分代码省略.........
开发者ID:artalat,项目名称:xbmc,代码行数:101,代码来源:GUIFontTTF.cpp
示例8: Begin
void CGUIFontTTFBase::DrawTextInternal(float x, float y, const vecColors &colors, const vecText &text, uint32_t alignment, float maxPixelWidth, bool scrolling)
{
Begin();
uint32_t rawAlignment = alignment;
bool dirtyCache;
bool hardwareClipping = g_Windowing.ScissorsCanEffectClipping();
CGUIFontCacheStaticPosition staticPos(x, y);
CGUIFontCacheDynamicPosition dynamicPos;
if (hardwareClipping)
{
dynamicPos = CGUIFontCacheDynamicPosition(g_graphicsContext.ScaleFinalXCoord(x, y),
g_graphicsContext.ScaleFinalYCoord(x, y),
g_graphicsContext.ScaleFinalZCoord(x, y));
}
CVertexBuffer unusedVertexBuffer;
CVertexBuffer &vertexBuffer = hardwareClipping ?
m_dynamicCache.Lookup(dynamicPos,
colors, text,
alignment, maxPixelWidth,
scrolling,
XbmcThreads::SystemClockMillis(),
dirtyCache) :
unusedVertexBuffer;
std::shared_ptr<std::vector<SVertex> > tempVertices = std::make_shared<std::vector<SVertex> >();
std::shared_ptr<std::vector<SVertex> > &vertices = hardwareClipping ?
tempVertices :
static_cast<std::shared_ptr<std::vector<SVertex> >&>(m_staticCache.Lookup(staticPos,
colors, text,
alignment, maxPixelWidth,
scrolling,
XbmcThreads::SystemClockMillis(),
dirtyCache));
if (dirtyCache)
{
// save the origin, which is scaled separately
m_originX = x;
m_originY = y;
// Check if we will really need to truncate or justify the text
if ( alignment & XBFONT_TRUNCATED )
{
if ( maxPixelWidth <= 0.0f || GetTextWidthInternal(text.begin(), text.end()) <= maxPixelWidth)
alignment &= ~XBFONT_TRUNCATED;
}
else if ( alignment & XBFONT_JUSTIFIED )
{
if ( maxPixelWidth <= 0.0f )
alignment &= ~XBFONT_JUSTIFIED;
}
// calculate sizing information
float startX = 0;
float startY = (alignment & XBFONT_CENTER_Y) ? -0.5f*m_cellHeight : 0; // vertical centering
if ( alignment & (XBFONT_RIGHT | XBFONT_CENTER_X) )
{
// Get the extent of this line
float w = GetTextWidthInternal( text.begin(), text.end() );
if ( alignment & XBFONT_TRUNCATED && w > maxPixelWidth + 0.5f ) // + 0.5f due to rounding issues
w = maxPixelWidth;
if ( alignment & XBFONT_CENTER_X)
w *= 0.5f;
// Offset this line's starting position
startX -= w;
}
float spacePerSpaceCharacter = 0; // for justification effects
if ( alignment & XBFONT_JUSTIFIED )
{
// first compute the size of the text to render in both characters and pixels
unsigned int numSpaces = 0;
float linePixels = 0;
for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos)
{
Character *ch = GetCharacter(*pos);
if (ch)
{
if ((*pos & 0xffff) == L' ')
numSpaces += 1;
linePixels += ch->advance;
}
}
if (numSpaces > 0)
spacePerSpaceCharacter = (maxPixelWidth - linePixels) / numSpaces;
}
float cursorX = 0; // current position along the line
for (vecText::const_iterator pos = text.begin(); pos != text.end(); ++pos)
{
// If starting text on a new line, determine justification effects
// Get the current letter in the CStdString
color_t color = (*pos & 0xff0000) >> 16;
if (color >= colors.size())
color = 0;
color = colors[color];
// grab the next character
//.........这里部分代码省略.........
开发者ID:The-Yak,项目名称:boxeebox-xbmc,代码行数:101,代码来源:GUIFontTTF.cpp
示例9: GetFirstText
void CGUITextLayout::GetFirstText(vecText &text) const
{
text.clear();
if (m_lines.size())
text = m_lines[0].m_text;
}
开发者ID:DJMatty,项目名称:xbmc,代码行数:6,代码来源:GUITextLayout.cpp
示例10: ParseText
void CGUITextLayout::ParseText(const CStdStringW &text, uint32_t defaultStyle, color_t defaultColor, vecColors &colors, vecText &parsedText)
{
// run through the string, searching for:
// [B] or [/B] -> toggle bold on and off
// [I] or [/I] -> toggle italics on and off
// [COLOR ffab007f] or [/COLOR] -> toggle color on and off
// [CAPS <option>] or [/CAPS] -> toggle capatilization on and off
uint32_t currentStyle = defaultStyle; // start with the default font's style
color_t currentColor = 0;
colors.push_back(defaultColor);
stack<color_t> colorStack;
colorStack.push(0);
// these aren't independent, but that's probably not too much of an issue
// eg [UPPERCASE]Glah[LOWERCASE]FReD[/LOWERCASE]Georeg[/UPPERCASE] will work (lower case >> upper case)
// but [LOWERCASE]Glah[UPPERCASE]FReD[/UPPERCASE]Georeg[/LOWERCASE] won't
int startPos = 0;
size_t pos = text.Find(L'[');
while (pos != CStdString::npos && pos + 1 < text.size())
{
uint32_t newStyle = 0;
color_t newColor = currentColor;
bool colorTagChange = false;
bool newLine = false;
// have a [ - check if it's an ON or OFF switch
bool on(true);
int endPos = pos++; // finish of string
if (text[pos] == L'/')
{
on = false;
pos++;
}
// check for each type
if (text.Mid(pos,2) == L"B]")
{ // bold - finish the current text block and assign the bold state
pos += 2;
if ((on && text.Find(L"[/B]",pos) >= 0) || // check for a matching end point
(!on && (currentStyle & FONT_STYLE_BOLD))) // or matching start point
newStyle = FONT_STYLE_BOLD;
}
else if (text.Mid(pos,2) == L"I]")
{ // italics
pos += 2;
if ((on && text.Find(L"[/I]",pos) >= 0) || // check for a matching end point
(!on && (currentStyle & FONT_STYLE_ITALICS))) // or matching start point
newStyle = FONT_STYLE_ITALICS;
}
else if (text.Mid(pos,10) == L"UPPERCASE]")
{
pos += 10;
if ((on && text.Find(L"[/UPPERCASE]",pos) >= 0) || // check for a matching end point
(!on && (currentStyle & FONT_STYLE_UPPERCASE))) // or matching start point
newStyle = FONT_STYLE_UPPERCASE;
}
else if (text.Mid(pos,10) == L"LOWERCASE]")
{
pos += 10;
if ((on && text.Find(L"[/LOWERCASE]",pos) >= 0) || // check for a matching end point
(!on && (currentStyle & FONT_STYLE_LOWERCASE))) // or matching start point
newStyle = FONT_STYLE_LOWERCASE;
}
else if (text.Mid(pos,3) == L"CR]" && on)
{
newLine = true;
pos += 3;
}
else if (text.Mid(pos,5) == L"COLOR")
{ // color
size_t finish = text.Find(L']', pos + 5);
if (on && finish != CStdString::npos && (size_t)text.Find(L"[/COLOR]",finish) != CStdString::npos)
{
color_t color = g_colorManager.GetColor(text.Mid(pos + 5, finish - pos - 5));
vecColors::const_iterator it = std::find(colors.begin(), colors.end(), color);
if (it == colors.end())
{ // create new color
if (colors.size() <= 0xFF)
{
newColor = colors.size();
colors.push_back(color);
}
else // we have only 8 bits for color index, fallback to first color if reach max.
newColor = 0;
}
else
// reuse existing color
newColor = it - colors.begin();
colorStack.push(newColor);
colorTagChange = true;
}
else if (!on && finish == pos + 5 && colorStack.size() > 1)
{ // revert to previous color
colorStack.pop();
newColor = colorStack.top();
colorTagChange = true;
}
if (finish != CStdString::npos)
pos = finish + 1;
//.........这里部分代码省略.........
开发者ID:DJMatty,项目名称:xbmc,代码行数:101,代码来源:GUITextLayout.cpp
示例11: GetTextWidth
float CGUIFont::GetTextWidth( const vecText &text )
{
if (!m_font) return 0;
CSingleLock lock(g_graphicsContext);
return m_font->GetTextWidthInternal(text.begin(), text.end()) * g_graphicsContext.GetGUIScaleX();
}
开发者ID:halotestin,项目名称:xbmc,代码行数:6,代码来源:GUIFont.cpp
示例12: ParseText
void CGUITextLayout::ParseText(const CStdStringW &text, uint32_t defaultStyle, vecColors &colors, vecText &parsedText)
{
// run through the string, searching for:
// [B] or [/B] -> toggle bold on and off
// [I] or [/I] -> toggle italics on and off
// [COLOR ffab007f] or [/COLOR] -> toggle color on and off
// [CAPS <option>] or [/CAPS] -> toggle capatilization on and off
// uint32_t currentStyle = defaultStyle; // start with the default font's style
// color_t currentColor = 0;
stack<color_t> colorStack;
colorStack.push(0);
// these aren't independent, but that's probably not too much of an issue
// eg [UPPERCASE]Glah[LOWERCASE]FReD[/LOWERCASE]Georeg[/UPPERCASE] will work (lower case >> upper case)
// but [LOWERCASE]Glah[UPPERCASE]FReD[/UPPERCASE]Georeg[/LOWERCASE] won't
#define FONT_STYLE_UPPERCASE 4
#define FONT_STYLE_LOWERCASE 8
int boldCounter = 0;
int italicsCoutner = 0;
int upperCounter = 0;
int lowerCounter = 0;
color_t color = 0;
int startPos = 0;
size_t pos = text.Find(L'[');
while (pos != CStdString::npos && pos + 1 < text.size())
{
int style = 0;
if (pos - startPos > 0)
{
if (boldCounter)
style |= FONT_STYLE_BOLD;
if (italicsCoutner)
style |= FONT_STYLE_ITALICS;
CStdStringW subText = text.Mid(startPos, pos - startPos);
if (upperCounter)
{
#if defined(_LINUX) && !defined(__APPLE__)
std::transform(subText.begin(), subText.end(), subText.begin(),
(gunichar(*)(gunichar)) g_unichar_toupper);
#else
subText.ToUpper();
#endif
}
if (lowerCounter)
{
#if defined(_LINUX) && !defined(__APPLE__)
std::transform(subText.begin(), subText.end(), subText.begin(),
(gunichar(*)(gunichar)) g_unichar_tolower);
#else
subText.ToLower();
#endif
}
AppendToUTF32(subText, ((style & 3) << 24) | (color << 16), parsedText);
startPos = pos;
}
// have a [ - check if it's an ON or OFF switch
bool ignoreTag = false;
++pos;
bool on = true;
if (text[pos] == L'/')
{
on = false;
pos++;
}
// check for each type
if (text.Mid(pos,2) == L"B]")
{ // bold - finish the current text block and assign the bold state
pos += 2;
on ? ++boldCounter : --boldCounter;
}
else if (text.Mid(pos,2) == L"I]")
{ // italics
pos += 2;
on ? ++italicsCoutner : --italicsCoutner;
}
else if (text.Mid(pos,10) == L"UPPERCASE]")
{
pos += 10;
on ? ++upperCounter : --upperCounter;
}
else if (text.Mid(pos,10) == L"LOWERCASE]")
{
pos += 10;
on ? ++lowerCounter : --lowerCounter;
}
else if (text.Mid(pos,3) == L"CR]" && on)
//.........这里部分代码省略.........
开发者ID:DakaiTV,项目名称:DakaiBoxee,代码行数:101,代码来源:GUITextLayout.cpp
示例13: if
void CGUIFontTTFBase::BuildTextCoordinates(float x, float y, const vecColors &colors, color_t shadowColor,
const vecText &text, uint32_t alignment, float maxPixelWidth, bool scrolling, FontCoordsIndiced& pData)
{
// Check if we will really need to truncate or justify the text
m_originX = x;
m_originY = y;
if ( alignment & XBFONT_TRUNCATED )
{
if ( maxPixelWidth <= 0.0f || GetTextWidthInternal(text.begin(), text.end()) <= maxPixelWidth)
alignment &= ~XBFONT_TRUNCATED;
}
else if ( alignment & XBFONT_JUSTIFIED )
{
if ( maxPixelWidth <= 0.0f )
alignment &= ~XBFONT_JUSTIFIED;
}
// calculate sizing information
float startX = 0;
float startY = (alignment & XBFONT_CENTER_Y) ? -0.5f*(m_cellHeight-2) : 0; // vertical centering
if ( alignment & (XBFONT_RIGHT | XBFONT_CENTER_X) )
{
// Get the extent of this line
float w = GetTextWidthInternal( text.begin(), text.end() );
if ( alignment & XBFONT_TRUNCATED && w > maxPixelWidth )
w = maxPixelWidth;
if ( alignment & XBFONT_CENTER_X)
w *= 0.5f;
// Offset this line's starting position
startX -= w;
}
float spacePerLetter = 0; // for justification effects
#if 0
if ( alignment & XBFONT_JUSTIFIED )
{
// first compute the size of the text to render in both characters and pixels
unsigned int lineChars = 0;
float linePixels = 0;
for (vecText::const_iterator pos = text.begin(); pos != text.end(); pos++)
{
Character *ch = GetCharacter(*pos);
if (ch)
{ // spaces have multiple times the justification spacing of normal letters
lineChars += ((*pos & 0xffff) == L' ') ? justification_word_weight : 1;
linePixels += ch->advance;
}
}
if (lineChars > 1)
spacePerLetter = (maxPixelWidth - linePixels) / (lineChars - 1);
}
#endif
ReloadFace();
#ifdef HAS_HARFBUZZ_NG
int i = 0;
wchar_t strW[text.size()];
for (vecText::const_iterator pos = text.begin(); pos != text.end(); pos++)
{
wchar_t letter = (wchar_t)((*pos) & 0xffff);
strW[i] = letter;
i++;
}
hb_buffer_t *hb_buffer = hb_buffer_create(text.size());
hb_buffer_set_unicode_funcs(hb_buffer, hb_glib_get_unicode_funcs());
hb_buffer_add_utf32(hb_buffer, (const uint32_t*) strW, text.size(), 0, text.size());
hb_buffer_set_direction(hb_buffer, HB_DIRECTION_LTR);
hb_shape (hb_font, hb_buffer, NULL, 0);
unsigned int glyph_info_len;
hb_glyph_info_t *hb_glyph = hb_buffer_get_glyph_infos (hb_buffer, &glyph_info_len);
hb_glyph_position_t *hb_position = hb_buffer_get_glyph_positions (hb_buffer, &glyph_info_len);
#else /* HAS_HARFBUZZ_NG */
FT_Vector delta;
Character* previousCh = NULL;
#endif
float cursorX = 0; // current position along the line
for (vecText::const_iterator pos = text.begin(); pos != text.end(); pos++)
{
// If starting text on a new line, determine justification effects
// Get the current letter in the CStdString
color_t color = (*pos & 0xff0000) >> 16;
if (color >= colors.size())
color = 0;
color = colors[color];
// grab the next character
Character *ch = GetCharacter(*pos);
if (!ch) continue;
if ( alignment & XBFONT_TRUNCATED )
//.........这里部分代码省略.........
开发者ID:sd-eblana,项目名称:bawx,代码行数:101,代码来源:GUIFontTTF.cpp
注:本文中的vecText类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论