本文整理汇总了C++中Vec::IterStart方法的典型用法代码示例。如果您正苦于以下问题:C++ Vec::IterStart方法的具体用法?C++ Vec::IterStart怎么用?C++ Vec::IterStart使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vec
的用法示例。
在下文中一共展示了Vec::IterStart方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: PaintWindowsInZOrder
// Paint windows in z-order by first collecting the windows
// and then painting consecutive layers with the same z-order,
// starting with the lowest z-order.
// We don't sort because we want to preserve the order of
// containment of windows with the same z-order and non-stable
// sort could change it.
static void PaintWindowsInZOrder(Graphics *g, Control *c)
{
Vec<CtrlAndOffset> toPaint;
WndFilter wndFilter;
CtrlAndOffset * coff;
Pen debugPen(Color(255, 0, 0), 1);
CollectWindowsBreathFirst(c, 0, 0, &wndFilter, &toPaint);
size_t paintedCount = 0;
int16 lastPaintedZOrder = INT16_MIN;
for (;;) {
// find which z-order should we paint now
int16 minUnpaintedZOrder = INT16_MAX;
for (coff = toPaint.IterStart(); coff; coff = toPaint.IterNext()) {
int16 zOrder = coff->c->zOrder;
if ((zOrder > lastPaintedZOrder) && (zOrder < minUnpaintedZOrder))
minUnpaintedZOrder = zOrder;
}
for (coff = toPaint.IterStart(); coff; coff = toPaint.IterNext()) {
if (minUnpaintedZOrder == coff->c->zOrder) {
coff->c->Paint(g, coff->offX, coff->offY);
if (IsDebugPaint()) {
Rect bbox(coff->offX, coff->offY, coff->c->pos.Width, coff->c->pos.Height);
g->DrawRectangle(&debugPen, bbox);
}
++paintedCount;
}
}
if (paintedCount == toPaint.Count())
return;
CrashIf(paintedCount > toPaint.Count());
lastPaintedZOrder = minUnpaintedZOrder;
}
}
示例2: SetYPos
// TODO: if elements are of different sizes (e.g. texts using different fonts)
// we should align them according to the baseline (which we would first need to
// record for each element)
static void SetYPos(Vec<DrawInstr>& instr, float y)
{
for (DrawInstr *i = instr.IterStart(); i; i = instr.IterNext()) {
if (IsVisibleDrawInstr(i))
i->bbox.Y = y;
}
}
示例3: scope
PageDestination *MobiEngineImpl::GetNamedDest(const WCHAR *name)
{
int filePos = _wtoi(name);
if (filePos < 0 || 0 == filePos && *name != '0')
return NULL;
int pageNo;
for (pageNo = 1; pageNo < PageCount(); pageNo++) {
if (pages->At(pageNo)->reparseIdx > filePos)
break;
}
CrashIf(pageNo < 1 || pageNo > PageCount());
size_t htmlLen;
char *start = doc->GetBookHtmlData(htmlLen);
if ((size_t)filePos > htmlLen)
return NULL;
ScopedCritSec scope(&pagesAccess);
Vec<DrawInstr> *pageInstrs = GetHtmlPage(pageNo);
// link to the bottom of the page, if filePos points
// beyond the last visible DrawInstr of a page
float currY = (float)pageRect.dy;
for (DrawInstr *i = pageInstrs->IterStart(); i; i = pageInstrs->IterNext()) {
if ((InstrString == i->type || InstrRtlString == i->type) &&
i->str.s >= start && i->str.s <= start + htmlLen &&
i->str.s - start >= filePos) {
currY = i->bbox.Y;
break;
}
}
RectD rect(0, currY + pageBorder, pageRect.dx, 10);
rect.Inflate(-pageBorder, 0);
return new SimpleDest2(pageNo, rect);
}
示例4: FixFontSizeForResolution
void EbookEngine::FixFontSizeForResolution(HDC hDC)
{
int dpi = GetDeviceCaps(hDC, LOGPIXELSY);
if (dpi == currFontDpi)
return;
ScopedCritSec scope(&pagesAccess);
float dpiFactor = 1.0f * currFontDpi / dpi;
Graphics g(hDC);
LOGFONTW lfw;
for (int pageNo = 1; pageNo <= PageCount(); pageNo++) {
Vec<DrawInstr> *pageInstrs = GetHtmlPage(pageNo);
for (DrawInstr *i = pageInstrs->IterStart(); i; i = pageInstrs->IterNext()) {
if (InstrSetFont == i->type) {
Status ok = i->font->GetLogFontW(&g, &lfw);
if (Ok == ok) {
REAL newSize = i->font->GetSize() * dpiFactor;
FontStyle newStyle = (FontStyle)i->font->GetStyle();
i->font = mui::GetCachedFont(lfw.lfFaceName, newSize, newStyle);
}
}
}
}
currFontDpi = dpi;
}
示例5: FinishLoadingCbz
bool CbxEngineImpl::FinishLoadingCbz()
{
fileExt = L".cbz";
Vec<const WCHAR *> allFileNames;
for (size_t idx = 0; idx < cbzFile->GetFileCount(); idx++) {
const WCHAR *fileName = cbzFile->GetFileName(idx);
// bail, if we accidentally try to load an XPS file
if (fileName && str::StartsWith(fileName, L"_rels/.rels"))
return false;
if (fileName && ImageEngine::IsSupportedFile(fileName) &&
// OS X occasionally leaves metadata with image extensions
!str::StartsWith(path::GetBaseName(fileName), L".")) {
allFileNames.Append(fileName);
}
else {
allFileNames.Append(NULL);
}
}
assert(allFileNames.Count() == cbzFile->GetFileCount());
ScopedMem<char> metadata(cbzFile->GetFileData(L"ComicInfo.xml"));
if (metadata)
ParseComicInfoXml(metadata);
metadata.Set(cbzFile->GetComment());
if (metadata)
json::Parse(metadata, this);
Vec<const WCHAR *> pageFileNames;
for (const WCHAR **fn = allFileNames.IterStart(); fn; fn = allFileNames.IterNext()) {
if (*fn)
pageFileNames.Append(*fn);
}
pageFileNames.Sort(cmpAscii);
for (const WCHAR **fn = pageFileNames.IterStart(); fn; fn = pageFileNames.IterNext()) {
fileIdxs.Append(allFileNames.Find(*fn));
}
assert(pageFileNames.Count() == fileIdxs.Count());
if (fileIdxs.Count() == 0)
return false;
pages.AppendBlanks(fileIdxs.Count());
mediaboxes.AppendBlanks(fileIdxs.Count());
return true;
}
示例6: Arrange
void VerticalLayout::Arrange(const Rect finalRect)
{
DirectionalLayoutData * e;
SizeInfo * si;
Vec<SizeInfo> sizes;
for (e = els.IterStart(); e; e = els.IterNext()) {
SizeInfo sizeInfo = { e->desiredSize.Height, e->sizeLayoutAxis, 0, 0 };
sizes.Append(sizeInfo);
}
RedistributeSizes(sizes.LendData(), sizes.Count(), finalRect.Height);
for (e = els.IterStart(), si = sizes.IterStart(); e; e = els.IterNext(), si = sizes.IterNext()) {
int dx = CalcScaledClippedSize(finalRect.Width, e->sizeNonLayoutAxis, e->desiredSize.Width);
int x = e->alignNonLayoutAxis.CalcOffset(dx, finalRect.Width);
e->element->Arrange(Rect(x, si->finalPos, dx, si->finalSize));
}
}
示例7: Font
Font *GetFont(const WCHAR *name, float size, FontStyle style) {
Entry f = { (WCHAR *)name, size, style, NULL };
for (Entry *e = cache.IterStart(); e; e = cache.IterNext()) {
if (f == *e)
return e->font;
}
f.font = ::new Font(name, size, style);
if (!f.font) {
// fall back to the default font, if a desired font can't be created
f.font = ::new Font(L"Times New Roman", size, style);
if (!f.font) {
if (cache.Count() > 0)
return cache.At(0).font;
return NULL;
}
}
f.name = str::Dup(f.name);
cache.Append(f);
return f.font;
}
示例8: free
~FontCache() {
for (Entry *e = cache.IterStart(); e; e = cache.IterNext()) {
free(e->name);
::delete e->font;
}
}