本文整理汇总了C++中RectI类的典型用法代码示例。如果您正苦于以下问题:C++ RectI类的具体用法?C++ RectI怎么用?C++ RectI使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了RectI类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getBounds
void GuiRiverEditorCtrl::_drawRiverControlNodes( River *river, const ColorI &color )
{
if ( !River::smShowSpline )
return;
RectI bounds = getBounds();
GFXDrawUtil *drawer = GFX->getDrawUtil();
bool isSelected = ( river == mSelRiver );
bool isHighlighted = ( river == mHoverRiver );
for ( U32 i = 0; i < river->mNodes.size(); i++ )
{
if ( false && isSelected && mSelNode == i )
continue;
const Point3F &wpos = river->mNodes[i].point;
Point3F spos;
project( wpos, &spos );
if ( spos.z > 1.0f )
continue;
Point2I posi;
posi.x = spos.x;
posi.y = spos.y;
if ( !bounds.pointInRect( posi ) )
continue;
ColorI theColor = color;
Point2I nodeHalfSize = mNodeHalfSize;
if ( isHighlighted && mHoverNode == i )
{
//theColor = mHoverNodeColor;
nodeHalfSize += Point2I(2,2);
}
if ( isSelected )
{
if ( mSelNode == i )
{
theColor.set(0,0,255);
}
else if ( i == 0 )
{
theColor.set(0,255,0);
}
else if ( i == river->mNodes.size() - 1 )
{
theColor.set(255,0,0);
}
}
drawer->drawRectFill( posi - nodeHalfSize, posi + nodeHalfSize, theColor );
}
}
示例2: onRender
void GuiTabBookCtrl::onRender(Point2I offset, const RectI &updateRect)
{
RectI tabRect = mTabRect;
tabRect.point += offset;
RectI pageRect = mPageRect;
pageRect.point += offset;
// We're so nice we'll store the old modulation before we clear it for our rendering! :)
ColorI oldModulation;
GFX->getDrawUtil()->getBitmapModulation( &oldModulation );
// Wipe it out
GFX->getDrawUtil()->clearBitmapModulation();
Parent::onRender(offset, updateRect);
// Clip to tab area
RectI savedClipRect = GFX->getClipRect();
RectI clippedTabRect = tabRect;
clippedTabRect.intersect( savedClipRect );
GFX->setClipRect( clippedTabRect );
// Render our tabs
renderTabs( offset, tabRect );
// Restore Rect.
GFX->setClipRect( savedClipRect );
// Restore old modulation
GFX->getDrawUtil()->setBitmapModulation( oldModulation );
}
示例3: ScaleTo
void Actor::ScaleTo( const RectI &rect, StretchType st )
{
// width and height of rectangle
float rect_width = (float) rect.GetWidth();
float rect_height = (float) rect.GetHeight();
if( rect_width < 0 ) SetRotationY( 180 );
if( rect_height < 0 ) SetRotationX( 180 );
// center of the rectangle
float rect_cx = rect.left + rect_width/2;
float rect_cy = rect.top + rect_height/2;
// zoom fActor needed to scale the Actor to fill the rectangle
float fNewZoomX = fabsf(rect_width / m_size.x);
float fNewZoomY = fabsf(rect_height / m_size.y);
float fNewZoom = 0.f;
switch( st )
{
case cover:
fNewZoom = fNewZoomX>fNewZoomY ? fNewZoomX : fNewZoomY; // use larger zoom
break;
case fit_inside:
fNewZoom = fNewZoomX>fNewZoomY ? fNewZoomY : fNewZoomX; // use smaller zoom
break;
}
SetXY( rect_cx, rect_cy );
SetZoom( fNewZoom );
}
示例4: pointInRect
static bool pointInRect(int x, int y, RectI r)
{
if (x >= r.left() && x <= r.right() && y >= r.top() && y <= r.bottom())
return(true);
else
return(false);
}
示例5: DrawProperties
static void DrawProperties(HWND hwnd, HDC hdc)
{
PropertiesLayout *layoutData = FindPropertyWindowByHwnd(hwnd);
ScopedFont fontLeftTxt(GetSimpleFont(hdc, LEFT_TXT_FONT, LEFT_TXT_FONT_SIZE));
ScopedFont fontRightTxt(GetSimpleFont(hdc, RIGHT_TXT_FONT, RIGHT_TXT_FONT_SIZE));
HGDIOBJ origFont = SelectObject(hdc, fontLeftTxt); /* Just to remember the orig font */
SetBkMode(hdc, TRANSPARENT);
ClientRect rcClient(hwnd);
FillRect(hdc, &rcClient.ToRECT(), gBrushAboutBg);
SetTextColor(hdc, WIN_COL_BLACK);
/* render text on the left*/
SelectObject(hdc, fontLeftTxt);
for (size_t i = 0; i < layoutData->Count(); i++) {
PropertyEl *el = layoutData->At(i);
DrawText(hdc, el->leftTxt, -1, &el->leftPos.ToRECT(), DT_RIGHT | DT_NOPREFIX);
}
/* render text on the right */
SelectObject(hdc, fontRightTxt);
for (size_t i = 0; i < layoutData->Count(); i++) {
PropertyEl *el = layoutData->At(i);
RectI rc = el->rightPos;
if (rc.x + rc.dx > rcClient.x + rcClient.dx - PROPERTIES_RECT_PADDING)
rc.dx = rcClient.x + rcClient.dx - PROPERTIES_RECT_PADDING - rc.x;
DrawText(hdc, el->rightTxt, -1, &rc.ToRECT(), DT_LEFT | DT_PATH_ELLIPSIS | DT_NOPREFIX);
}
SelectObject(hdc, origFont);
}
示例6: getGui
void
ViewerTab::setInfoBarAndViewerResolution(const RectI& rect, const RectD& canonicalRect, double par, int texIndex)
{
std::string formatName, infoBarName;
Gui* gui = getGui();
if (!gui) {
return;
}
GuiAppInstancePtr app = gui->getApp();
if (!app) {
return;
}
if (!app->getProject()->getFormatNameFromRect(rect, par, &formatName)) {
formatName = makeUpFormatName(rect, par);
infoBarName = formatName;
} else {
// If the format has a name, for the info bar also add the resolution
std::stringstream ss;
ss << formatName;
ss << ' ';
ss << rect.width();
ss << 'x';
ss << rect.height();
infoBarName = ss.str();
}
_imp->infoWidget[texIndex]->setResolution(QString::fromUtf8(infoBarName.c_str()));
_imp->viewer->setFormat(formatName, canonicalRect, par, texIndex);
}
示例7: AssertCrash
Vec<SelectionOnPage>* SelectionOnPage::FromRectangle(DisplayModel* dm, RectI rect) {
Vec<SelectionOnPage>* sel = new Vec<SelectionOnPage>();
for (int pageNo = dm->GetEngine()->PageCount(); pageNo >= 1; --pageNo) {
PageInfo* pageInfo = dm->GetPageInfo(pageNo);
AssertCrash(!pageInfo || 0.0 == pageInfo->visibleRatio || pageInfo->shown);
if (!pageInfo || !pageInfo->shown)
continue;
RectI intersect = rect.Intersect(pageInfo->pageOnScreen);
if (intersect.IsEmpty())
continue;
/* selection intersects with a page <pageNo> on the screen */
RectD isectD = dm->CvtFromScreen(intersect, pageNo);
sel->Append(SelectionOnPage(pageNo, &isectD));
}
sel->Reverse();
if (sel->size() == 0) {
delete sel;
return nullptr;
}
return sel;
}
示例8: OnPaint
static LRESULT OnPaint(HWND hwnd)
{
ClientRect rect(hwnd);
DoubleBuffer buffer(hwnd, rect);
HDC hdc = buffer.GetDC();
HBRUSH brushBg = CreateSolidBrush(COL_WINDOW_BG);
HBRUSH brushWhite = GetStockBrush(WHITE_BRUSH);
FillRect(hdc, &rect.ToRECT(), brushBg);
PreviewBase *preview = (PreviewBase *)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (preview && preview->renderer) {
int pageNo = GetScrollPos(hwnd, SB_VERT);
RectD page = preview->renderer->GetPageRect(pageNo);
if (!page.IsEmpty()) {
rect.Inflate(-PREVIEW_MARGIN, -PREVIEW_MARGIN);
float zoom = (float)min(rect.dx / page.dx, rect.dy / page.dy) - 0.001f;
RectI onScreen = RectD(rect.x, rect.y, page.dx * zoom, page.dy * zoom).Round();
onScreen.Offset((rect.dx - onScreen.dx) / 2, (rect.dy - onScreen.dy) / 2);
FillRect(hdc, &onScreen.ToRECT(), brushWhite);
preview->renderer->Render(hdc, onScreen, pageNo, zoom);
}
}
DeleteObject(brushBg);
DeleteObject(brushWhite);
PAINTSTRUCT ps;
buffer.Flush(BeginPaint(hwnd, &ps));
EndPaint(hwnd, &ps);
return 0;
}
示例9: WinUtilTest
static void WinUtilTest()
{
ScopedCom comScope;
{
char *string = "abcde";
size_t stringSize = 5, len;
ScopedComPtr<IStream> stream(CreateStreamFromData(string, stringSize));
assert(stream);
char *data = (char *)GetDataFromStream(stream, &len);
assert(data && stringSize == len && str::Eq(data, string));
free(data);
}
{
WCHAR *string = L"abcde";
size_t stringSize = 10, len;
ScopedComPtr<IStream> stream(CreateStreamFromData(string, stringSize));
assert(stream);
WCHAR *data = (WCHAR *)GetDataFromStream(stream, &len);
assert(data && stringSize == len && str::Eq(data, string));
free(data);
}
{
RectI oneScreen = GetFullscreenRect(NULL);
RectI allScreens = GetVirtualScreenRect();
assert(allScreens.Intersect(oneScreen) == oneScreen);
}
}
示例10: NotificationWndOnPaint
static void NotificationWndOnPaint(HWND hwnd, NotificationWnd *wnd)
{
PAINTSTRUCT ps;
HDC hdcWnd = BeginPaint(hwnd, &ps);
ClientRect rect(hwnd);
DoubleBuffer buffer(hwnd, rect);
HDC hdc = buffer.GetDC();
HFONT oldfnt = SelectFont(hdc, wnd->font);
RECT rTmp = rect.ToRECT();
DrawFrameControl(hdc, &rTmp, DFC_BUTTON, DFCS_BUTTONPUSH);
if (wnd->highlight) {
SetBkMode(hdc, OPAQUE);
SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
}
else {
SetBkMode(hdc, TRANSPARENT);
SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
}
rect.Inflate(-PADDING, -PADDING);
RectI rectMsg = rect;
if (wnd->hasProgress)
rectMsg.dy -= PROGRESS_HEIGHT + PADDING / 2;
if (wnd->hasCancel)
rectMsg.dx -= 20;
ScopedMem<WCHAR> text(win::GetText(hwnd));
rTmp = rectMsg.ToRECT();
DrawText(hdc, text, -1, &rTmp, DT_SINGLELINE | DT_NOPREFIX);
if (wnd->hasCancel) {
rTmp = GetCancelRect(hwnd).ToRECT();
DrawFrameControl(hdc, &rTmp, DFC_CAPTION, DFCS_CAPTIONCLOSE | DFCS_FLAT);
}
if (wnd->hasProgress) {
rect.dx = wnd->progressWidth;
rect.y += rectMsg.dy + PADDING / 2;
rect.dy = PROGRESS_HEIGHT;
PaintRect(hdc, rect);
rect.x += 2;
rect.dx = (wnd->progressWidth - 3) * wnd->progress / 100;
rect.y += 2;
rect.dy -= 3;
HBRUSH brush = GetStockBrush(BLACK_BRUSH);
rTmp = rect.ToRECT();
FillRect(hdc, &rTmp, brush);
DeleteObject(brush);
}
SelectFont(hdc, oldfnt);
buffer.Flush(hdcWnd);
EndPaint(hwnd, &ps);
}
示例11: renderFilledBorder
void renderFilledBorder( const RectI &bounds, const ColorI &borderColor, const ColorI &fillColor, U32 thickness )
{
RectI fillBounds = bounds;
fillBounds.inset( thickness, thickness );
GFX->getDrawUtil()->drawRectFill( bounds, borderColor );
GFX->getDrawUtil()->drawRectFill( fillBounds, fillColor );
}
示例12: renderFilledBorder
void renderFilledBorder( const RectI &bounds, const ColorI &borderColor, const ColorI &fillColor )
{
RectI fillBounds = bounds;
fillBounds.inset( 1, 1 );
GFX->getDrawUtil()->drawRect( bounds, borderColor );
GFX->getDrawUtil()->drawRectFill( fillBounds, fillColor );
}
示例13: RectI
void GuiTextListCtrl::onRenderCell(Point2I offset, Point2I cell, bool selected, bool mouseOver)
{
if ( mList[cell.y].active )
{
if (selected || (mProfile->mMouseOverSelected && mouseOver))
{
RectI highlightRect = RectI(offset.x, offset.y, mCellSize.x, mCellSize.y);
highlightRect.inset( 0, -1 );
renderFilledBorder( highlightRect, mProfile->mBorderColorHL, mProfile->mFillColorHL);
GFX->getDrawUtil()->setBitmapModulation(mProfile->mFontColorHL);
}
else
GFX->getDrawUtil()->setBitmapModulation(mouseOver ? mProfile->mFontColorHL : mProfile->mFontColor);
}
else
GFX->getDrawUtil()->setBitmapModulation( mProfile->mFontColorNA );
const char *text = mList[cell.y].text;
for(U32 index = 0; index < mColumnOffsets.size(); index++)
{
const char *nextCol = dStrchr(text, '\t');
if(mColumnOffsets[index] >= 0)
{
dsize_t slen;
if(nextCol)
slen = nextCol - text;
else
slen = dStrlen(text);
Point2I pos(offset.x + 4 + mColumnOffsets[index], offset.y);
RectI saveClipRect;
bool clipped = false;
if(mClipColumnText && (index != (mColumnOffsets.size() - 1)))
{
saveClipRect = GFX->getClipRect();
RectI clipRect(pos, Point2I(mColumnOffsets[index+1] - mColumnOffsets[index] - 4, mCellSize.y));
if(clipRect.intersect(saveClipRect))
{
clipped = true;
GFX->setClipRect( clipRect );
}
}
GFX->getDrawUtil()->drawTextN(mFont, pos, text, slen, mProfile->mFontColors);
if(clipped)
GFX->setClipRect( saveClipRect );
}
if(!nextCol)
break;
text = nextCol+1;
}
}
示例14: assert
UINT RenderCache::Paint(HDC hdc, RectI bounds, DisplayModel *dm, int pageNo,
PageInfo *pageInfo, bool *renderOutOfDateCue)
{
assert(pageInfo->shown && 0.0 != pageInfo->visibleRatio);
int rotation = dm->Rotation();
float zoom = dm->ZoomReal();
USHORT targetRes = GetTileRes(dm, pageNo);
USHORT maxRes = GetMaxTileRes(dm, pageNo, rotation);
if (maxRes < targetRes)
maxRes = targetRes;
Vec<TilePosition> queue;
queue.Append(TilePosition(0, 0, 0));
UINT renderDelayMin = RENDER_DELAY_UNDEFINED;
bool neededScaling = false;
while (queue.Count() > 0) {
TilePosition tile = queue.At(0);
queue.RemoveAt(0);
RectI tileOnScreen = GetTileOnScreen(dm->engine, pageNo, rotation, zoom, tile, pageInfo->pageOnScreen);
tileOnScreen = pageInfo->pageOnScreen.Intersect(tileOnScreen);
RectI isect = bounds.Intersect(tileOnScreen);
if (isect.IsEmpty())
continue;
bool isTargetRes = tile.res == targetRes;
UINT renderDelay = PaintTile(hdc, isect, dm, pageNo, tile, tileOnScreen, isTargetRes,
renderOutOfDateCue, isTargetRes ? &neededScaling : NULL);
if (!(isTargetRes && 0 == renderDelay) && tile.res < maxRes) {
queue.Append(TilePosition(tile.res + 1, tile.row * 2, tile.col * 2));
queue.Append(TilePosition(tile.res + 1, tile.row * 2, tile.col * 2 + 1));
queue.Append(TilePosition(tile.res + 1, tile.row * 2 + 1, tile.col * 2));
queue.Append(TilePosition(tile.res + 1, tile.row * 2 + 1, tile.col * 2 + 1));
}
if (isTargetRes && renderDelay > 0)
neededScaling = true;
renderDelayMin = min(renderDelay, renderDelayMin);
// paint tiles from left to right from top to bottom
if (tile.res > 0 && queue.Count() > 0 && tile.res < queue.At(0).res)
queue.Sort(cmpTilePosition);
}
#ifdef CONSERVE_MEMORY
if (!neededScaling) {
if (renderOutOfDateCue)
*renderOutOfDateCue = false;
// free tiles with different resolution
TilePosition tile(targetRes, (USHORT)-1, 0);
FreePage(dm, pageNo, &tile);
}
FreeNotVisible();
#endif
return renderDelayMin;
}
示例15: Render
void Render(HDC hdc, RectI target, int pageNo, float zoom) {
ScopedCritSec scope(&currAccess);
if (currBmp && currPage == pageNo && currSize == target.Size())
currBmp->StretchDIBits(hdc, target);
else if (!thread) {
reqPage = pageNo;
reqZoom = zoom;
reqSize = target.Size();
thread = CreateThread(NULL, 0, RenderThread, this, 0, 0);
}
}