BOOL NodeSimpleShape::IsNearControlHandle(DocCoord Coord, INT32* CoordNum) { #if !defined(EXCLUDE_FROM_RALPH) // Find the blob manager BlobManager* pBlobMgr = GetApplication()->GetBlobManager(); if (pBlobMgr==NULL) return FALSE; // Find out about the size of a blob DocRect BlobRect; pBlobMgr->GetBlobRect(Coord, &BlobRect); // Check to see if it is near any of the blobs for (INT32 i=0; i<4; i++) { // Check for collision with the control points if (BlobRect.ContainsCoord(Parallel[i])) { // Tell them which control point it waas over *CoordNum = i; // we have used that click up, so tell the world return TRUE; } } #endif // was not over any of the control points return FALSE; }
DocRect NodeSimpleShape::GetBlobBoundingRect() { #if !defined(EXCLUDE_FROM_RALPH) // Find the Shapes bounding rectangle DocRect Rect = GetBoundingRect(); // Find the blob manager BlobManager* pBlobMgr = GetApplication()->GetBlobManager(); // And if we can find the current view, add on the size of a selection blob if (pBlobMgr!= NULL) { // Wee need to add in each of the blobs. there is a blob on each corner // of the parallelogram DocRect BlobSize; pBlobMgr->GetBlobRect(Parallel[0], &BlobSize); Rect = Rect.Union(BlobSize); // Next corner of the parallelogram pBlobMgr->GetBlobRect(Parallel[1], &BlobSize); Rect = Rect.Union(BlobSize); // and the next pBlobMgr->GetBlobRect(Parallel[2], &BlobSize); Rect = Rect.Union(BlobSize); // and the last one pBlobMgr->GetBlobRect(Parallel[3], &BlobSize); Rect = Rect.Union(BlobSize); } // Make sure we include the Bounds of our children IncludeChildrensBoundingRects(&Rect); // return the rectangle with the blobs included return Rect; #else return DocRect(0,0,0,0); #endif }
DocRect NodeEllipse::GetBlobBoundingRect() { #if !defined(EXCLUDE_FROM_RALPH) // Find the paths bounding rectangle DocRect ShapeRect = GetBoundingRect(); DocRect Rect(Parallel[0], Parallel[0]); Rect.IncludePoint(Parallel[1]); Rect.IncludePoint(Parallel[2]); Rect.IncludePoint(Parallel[3]); // Find the blob manager BlobManager* pBlobMgr = GetApplication()->GetBlobManager(); // Get a rect to put the extra rectangle on DocRect BlobRect; // Get the rect round a blob in the corner of the ellipse and add it to the total DocCoord Corner = Rect.HighCorner(); pBlobMgr->GetBlobRect(Corner, &BlobRect); Rect = Rect.Union(BlobRect); // and the same with the other corner Corner = Rect.LowCorner(); pBlobMgr->GetBlobRect(Corner, &BlobRect); Rect = Rect.Union(BlobRect); // and union it with the rect of the shape or things like Linewidth get in the way Rect = Rect.Union(ShapeRect); // Make sure we include the Bounds of our children IncludeChildrensBoundingRects(&Rect); // return the rectangle with the blobs included return Rect; #else return DocRect(0,0,0,0); #endif }
void LiveEffectsTool::OnMouseMove(DocCoord Coord, Spread* pSpread, ClickModifiers mods) { // Stub out this function if the tool isn't wanted #ifndef NO_ADVANCED_TOOLS // We are interested in any selected paths that the cursor is over // we will also be needing the current docview SelRange* Selected = GetApplication()->FindSelection(); Node* pNode = Selected->FindFirst(); // Check to see if the selection is on the same spread as the mouse if (pNode!=NULL) { // Get the spread and return if it is different from the one with the cursor Spread* pNodeSpread = pNode->FindParentSpread(); if (pNodeSpread!=pSpread) return; } // Find the Blob manager, so we can find out how big a rect to use BlobManager* pBlobMgr = GetApplication()->GetBlobManager(); if (pBlobMgr==NULL) return; // Find the Rect round the mouse pos that counts as a hit DocRect BlobRect; pBlobMgr->GetBlobRect(Coord, &BlobRect); // Work out the square of the distance that we will count as 'close' to the line INT32 Range = BlobRect.Width() / 2; Range *= Range; // // loop through the selection // while (pNode!=NULL) // { // // Now find the next selected node // pNode = Selected->FindNext(pNode); // } // We did not find anything good, so set the cursor to the normal one ChangeCursor(pNormalCursor); // And set the status bar text StatusMsg.Load(_R(IDS_LIVEEFFECTSTART), Tool::GetModuleID(GetID())); GetApplication()->UpdateStatusBarText(&StatusMsg); #endif // NO_ADVANCED_TOOLS }