本文整理汇总了C++中DocRect::Translate方法的典型用法代码示例。如果您正苦于以下问题:C++ DocRect::Translate方法的具体用法?C++ DocRect::Translate怎么用?C++ DocRect::Translate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DocRect
的用法示例。
在下文中一共展示了DocRect::Translate方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: IsNudgeOK
BOOL OpNudge::IsNudgeOK(BOOL dx,BOOL dy)
{
// Get the selection
SelRange* pSel = GetApplication()->FindSelection();
ERROR2IF(pSel == NULL,FALSE,"Awooga, NULL sel range");
// Find out the bounding rectangle of the selection
DocRect BoundingRect = pSel->GetBoundingRect();
// Find out the Pasteboard rect
DocRect PasteRect;
Spread* pSpread = pOurDoc->GetSelectedSpread();
if (pSpread==NULL)
PasteRect = BoundingRect;
else
{
// Try to make the pasteboard grow if necessary to include the new object position
// This is very quick if the pasteboard is large enough already.
pSpread->ExpandPasteboardToInclude(BoundingRect);
// And re-read the bounding rectangle of the selection, as the pasteboard resize may have
// caused the origin of our entire coordinate space to have moved! Argh!
BoundingRect = pSel->GetBoundingRect();
// BoundingRect.Translate(dx,dy);
// This is in Document Coords, so we need to convert it
PasteRect = pSpread->GetPasteboardRect();
pSpread->DocCoordToSpreadCoord(&PasteRect);
}
// Assume the nudge will be OK.
BOOL NudgeOK = TRUE;
if (PasteRect.ContainsRect(BoundingRect))
{
// Untranslated bounds fit inside pasteboard rect, so we must complain if the bounds
// do not fit *after* translation
// Translate the bounds by the nudge values
BoundingRect.Translate(dx,dy);
// Do the translated bounds still fit entirely in the pasteboard rect?
NudgeOK = PasteRect.ContainsRect(BoundingRect);
}
else
{
// The original bounds overlap the pasteboard rect, so we must complain if the user
// nudges the bounds completely out of sight
if (PasteRect.IsIntersectedWith(BoundingRect))
{
// The original bounds intersect with the pasteboard rect
BoundingRect.Translate(dx,dy);
// Only allow the nudge if the translated bounds still overlap with the spread.
NudgeOK = PasteRect.IsIntersectedWith(BoundingRect);
}
}
// If the nudge is OK, we may need to scroll the DocView?
/* Jim, 12/9/96 - removed this because we don't want to scroll to show opn nudges
if (NudgeOK)
{
DocCoord Coord(0,0);
// If nudging left or right, pick the min or max X coord
if (dx != 0)
{
if (dx < 0)
Coord.x = BoundingRect.lox;
else
Coord.x = BoundingRect.hix;
}
// If nudging up or down, pick the max or min Y coord
if (dy != 0)
{
if (dy < 0)
Coord.y = BoundingRect.loy;
else
Coord.y = BoundingRect.hiy;
}
// If we have picked a coord, ensure that this coord is visible in the selected spread
// of the selected DocView
if (Coord != DocCoord(0,0))
{
DocView* pDocView = DocView::GetSelected();
if (pDocView != NULL)
pDocView->ScrollToShow(&Coord);
}
}
*/
return NudgeOK;
}
示例2: SetBitmap
BOOL BitmapExportDocument::SetBitmap(KernelBitmap* pBitmap)
{
TRACEUSER( "Gerry", _T("BitmapExportDocument::SetBitmap()\n"));
ERROR2IF(pBitmap == NULL, FALSE, "NULL bitmap passed to SetBitmap()\n");
ERROR2IF(pBitmapNode == NULL, FALSE, "pBitmapNode is NULL in SetBitmap()\n");
// Attach the bitmap to our node
//
// Note: Neville 18/9/97
// If the bitmap is a lone bitmap i.e. not attached to any document, then we
// must attach it properly to this document so that it gets cleaned out
// rather than memory leaking. If not, then we are just temporarily using
// the bitmap and so everything should be ok. We need to work in the following
// situations:-
// - Selecting multiple bitmaps in the bitmap gallery and saving as animated GIF.
// Here we are passed a list of bitmaps which are already in use in the source
// document.
// - Making a new clipart index for bitmaps. Here we are passed a brand spanking
// new bitmap which is not on any lists. This used to memory leak.
BitmapList* pBmpList = pBitmap->GetParentBitmapList();
if (pBmpList != NULL)
{
// This will memory leak a kernel bitmap each time if it is not on a parent
// document list. You will also end up with a KernelBitmap which contains
// a deleted ActualBitmap pointer, which is very bad!
pBitmapNode->GetBitmapRef()->SetBitmap(pBitmap);
}
else
{
// This is the same technique that the BaseBitmapFilter uses and so must be correct!
pBitmapNode->GetBitmapRef()->Attach(pBitmap, this);
if (pBitmapNode->GetBitmap() != pBitmap)
{
// It didn't use the bitmap we gave it, so we can delete it
delete pBitmap;
}
}
BitmapInfo Info;
pBitmapNode->GetBitmap()->ActualBitmap->GetInfo(&Info);
// Calculate the rectangle for this bitmap
// We make it as large as possible (within the ExportRect)
// without changing the aspect ration
INT32 RectWidth = ExportRect.Width();
INT32 RectHeight = ExportRect.Height();
double xScale = (double) RectWidth / (double) Info.RecommendedWidth;
double yScale = (double) RectHeight / (double) Info.RecommendedHeight;
DocRect BitmapRect;
BitmapRect.lo.x = 0;
BitmapRect.lo.y = 0;
if (xScale < yScale)
{
// Bitmap will be full width
BitmapRect.hi.x = RectWidth;
BitmapRect.hi.y = (INT32) ((double) Info.RecommendedHeight * xScale);
// Center the bitmap vertically in the rectangle
BitmapRect.Translate(0, (RectHeight - BitmapRect.Height()) / 2);
}
else
{
// Bitmap will be full height
BitmapRect.hi.x = (INT32) ((double) Info.RecommendedWidth * yScale);
BitmapRect.hi.y = RectHeight;
// Center the bitmap horizontally in the rectangle
BitmapRect.Translate((RectWidth - BitmapRect.Width()) / 2, 0);
}
// Delete the node's path
// Because CreateShape inserts a rectangle at the beginning of the path
pBitmapNode->InkPath.DeleteFromElement(0);
// And create the shape
pBitmapNode->CreateShape(BitmapRect);
return(TRUE);
}
示例3: ProcessToken
//.........这里部分代码省略.........
DocColour StartColour, EndColour;
if(!PopColour(&EndColour) ||
!PopColour(&StartColour))
goto EPSError;
// discard the fill type thingy - we can only do colours
if(!DiscardFillSubType())
goto EPSError;
// OK, now a few coords
DocCoord Centre;
double Angle;
DocRect BBox;
if(!Stack.PopCoordPair(&BBox.hi) ||
!Stack.PopCoordPair(&BBox.lo) ||
!Stack.Pop(&Angle) ||
!Stack.PopCoordPair(&Centre))
goto EPSError;
// munge the angle a little and get it into radians
Angle += 225;
Angle = (Angle * (2 * PI)) / 360;
// see if we can get a more accurate BBox
if(pPath != 0)
{
BBox = pPath->GetBoundingRect();
Centre.x = BBox.lo.x + (BBox.Width() / 2);
Centre.y = BBox.lo.y + (BBox.Height() / 2);
}
// OK, we've got all the stuff we need to do some niceness on it
BBox.Translate(0 - Centre.x, 0 - Centre.y);
DocCoord StartPoint, EndPoint;
StartPoint.x = Centre.x + (INT32)(((double)BBox.lo.x * cos(Angle)) - ((double)BBox.lo.y * sin(Angle)));
StartPoint.y = Centre.y + (INT32)(((double)BBox.lo.x * sin(Angle)) + ((double)BBox.lo.y * cos(Angle)));
EndPoint.x = Centre.x + (INT32)(((double)BBox.hi.x * cos(Angle)) - ((double)BBox.hi.y * sin(Angle)));
EndPoint.y = Centre.y + (INT32)(((double)BBox.hi.x * sin(Angle)) + ((double)BBox.hi.y * cos(Angle)));
// store current fill attribute
SaveCurrentFill();
// set the fill
if(!SetLinearFill(StartColour, EndColour, StartPoint, EndPoint))
goto NoMemory;
// say we're doing a grad fill
DoingGradFill = TRUE;
HadhToken = FALSE; // absorb this
}
break;
case EPSC_radfill:
{
// get the colours
DocColour StartColour, EndColour;
if(!PopColour(&StartColour) ||
!PopColour(&EndColour))
goto EPSError;
// get the radius and centre coordinate
DocCoord Centre;
INT32 Radius;