本文整理汇总了C++中TextureManager::getSurface方法的典型用法代码示例。如果您正苦于以下问题:C++ TextureManager::getSurface方法的具体用法?C++ TextureManager::getSurface怎么用?C++ TextureManager::getSurface使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TextureManager
的用法示例。
在下文中一共展示了TextureManager::getSurface方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SDL_CreateRGBSurface
TextBox::TextBox(int x, int y, const Color &textColor, const std::string &text,
FontName fontName, TextureManager &textureManager)
: Surface(x, y, 1, 1)
{
this->fontName = fontName;
// Split "text" into lines of text.
this->textLines = [&text]()
{
auto temp = std::vector<std::string>();
// Add one empty string to start.
temp.push_back(std::string());
const char newLine = '\n';
int textLineIndex = 0;
for (auto &c : text)
{
if (c != newLine)
{
// std::string has push_back! Yay! Intuition + 1.
temp.at(textLineIndex).push_back(c);
}
else
{
temp.push_back(std::string());
textLineIndex++;
}
}
return temp;
}();
// Calculate the proper dimensions of the text box.
// No need for a "FontSurface" type... just do the heavy lifting in this class.
auto font = Font(fontName);
int upperCharWidth = font.getUpperCharacterWidth();
int upperCharHeight = font.getUpperCharacterHeight();
int lowerCharWidth = font.getLowerCharacterWidth();
int lowerCharHeight = font.getLowerCharacterHeight();
const int newWidth = [](const std::vector<std::string> &lines,
int upperCharWidth, int lowerCharWidth)
{
// Find longest line (in pixels) out of all lines.
int longestLength = 0;
for (auto &line : lines)
{
// Sum of all character lengths in the current line.
int linePixels = 0;
for (auto &c : line)
{
linePixels += islower(c) ? lowerCharWidth : upperCharWidth;
}
// Check against the current longest line.
if (linePixels > longestLength)
{
longestLength = linePixels;
}
}
// In pixels.
return longestLength;
}(this->textLines, upperCharWidth, lowerCharWidth);
const int newHeight = static_cast<int>(this->textLines.size()) * upperCharHeight;
// Resize the surface with the proper dimensions for fitting all the text.
SDL_FreeSurface(this->surface);
this->surface = [](int width, int height, int colorBits)
{
return SDL_CreateRGBSurface(0, width, height, colorBits, 0, 0, 0, 0);
}(newWidth, newHeight, Surface::DEFAULT_BPP);
// Make this surface transparent.
this->setTransparentColor(Color::Transparent);
this->fill(Color::Transparent);
// Blit each character surface in at the right spot.
auto point = Int2();
auto fontSurface = textureManager.getSurface(font.getFontTextureName());
int upperCharOffsetWidth = font.getUpperCharacterOffsetWidth();
int upperCharOffsetHeight = font.getUpperCharacterOffsetHeight();
int lowerCharOffsetWidth = font.getLowerCharacterOffsetWidth();
int lowerCharOffsetHeight = font.getLowerCharacterOffsetHeight();
for (auto &line : this->textLines)
{
for (auto &c : line)
{
int width = islower(c) ? lowerCharWidth : upperCharWidth;
int height = islower(c) ? lowerCharHeight : upperCharHeight;
auto letterSurface = [&]()
{
auto cellPosition = Font::getCharacterCell(c);
int offsetWidth = islower(c) ? lowerCharOffsetWidth : upperCharOffsetWidth;
int offsetHeight = islower(c) ? lowerCharOffsetHeight : upperCharOffsetHeight;
// Make a copy surface of the font character.
auto pixelPosition = Int2(
//.........这里部分代码省略.........