本文整理汇总了C++中Text::GetColors方法的典型用法代码示例。如果您正苦于以下问题:C++ Text::GetColors方法的具体用法?C++ Text::GetColors怎么用?C++ Text::GetColors使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Text
的用法示例。
在下文中一共展示了Text::GetColors方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: while
size_t
TerminalDisplay::WriteWrappedElement(const Text& Element, size_t TextOffset,
size_t WriteOffset, size_t Requested) {
size_t Start = TextOffset;
size_t Remaining = Requested;
size_t Available = Element.length() - Start;
if (Requested == (size_t) -1) {
Requested = Available;
}
if (Available > 0) {
if (Available < Remaining) {
Remaining = Available;
}
while (Remaining > 0) {
size_t numThisLine = Remaining;
// How much can this line hold?
size_t numToEOL = GetWidth() - ((Start + WriteOffset) % GetWidth());
if (!numToEOL) {
MoveDown();
++fWritePos.fLine;
MoveFront();
fWritePos.fCol = 0;
numToEOL = GetWidth();
}
if (numThisLine > numToEOL) {
numThisLine = numToEOL;
}
if (GetContext()->GetColorizer()) {
// We only write same-color chunks; how long is it?
const std::vector<char>& Colors = Element.GetColors();
char ThisColor = Colors[Start];
size_t numSameColor = 1;
while (numSameColor < numThisLine
&& ThisColor == Colors[Start + numSameColor])
++numSameColor;
numThisLine = numSameColor;
if (ThisColor != fPrevColor) {
Color C;
GetContext()->GetColorizer()->GetColor(ThisColor, C);
SetColor(ThisColor, C);
fPrevColor = ThisColor;
}
}
WriteRawString(Element.GetText().c_str() + Start, numThisLine);
fWritePos = IndexToPos(PosToIndex(fWritePos) + numThisLine);
if (numThisLine == numToEOL) {
ActOnEOL();
}
Start += numThisLine;
Remaining -= numThisLine;
}
}
if (Requested == Available) {
size_t VisL = fWriteLen / GetWidth();
size_t Wrote = WriteOffset + TextOffset + Requested;
size_t WroteL = Wrote / GetWidth();
size_t NumToEOL = GetWidth() - (Wrote % GetWidth());
if (fWriteLen > Wrote && NumToEOL > 0) {
// Wrote less and not at EOL
EraseToRight();
}
if (WroteL < VisL) {
Pos prevWC = GetCursor();
MoveFront();
fWritePos.fCol = 0;
for (size_t l = WroteL + 1; l <= VisL; ++l) {
MoveDown();
++fWritePos.fLine;
EraseToRight();
}
Move(prevWC);
}
}
return Remaining;
}