void CImage::AdjustGroupSelection(BOOL fSelect) { LPOBJECT lpObject, lpNextObject; // if we are selecting/unselecting we need to make sure all // grouped objects have the same select/unselect state lpNextObject = NULL; while (lpNextObject = GetNextObject(lpNextObject, YES, NO)) { if (lpNextObject->fSelected != fSelect) continue; if (!lpNextObject->wGroupID) continue; lpObject = NULL; while (lpObject = GetNextObject(lpObject, YES, NO)) { if (lpObject->wGroupID == lpNextObject->wGroupID) ObjSelectObject((LPPRIMOBJECT)lpObject, lpNextObject->fSelected); } } // Now just make sure all grouped objects have the same select state lpNextObject = NULL; while (lpNextObject = GetNextObject(lpNextObject, YES, NO)) { if (!lpNextObject->wGroupID) continue; lpObject = lpNextObject; while (lpObject = GetNextObject(lpObject, YES, NO)) { if (lpObject->wGroupID == lpNextObject->wGroupID) ObjSelectObject((LPPRIMOBJECT)lpObject, lpNextObject->fSelected); } } }
void CImage::ChangeSelection(LPOBJECT lpObject, BOOL fSelect, BOOL fExtendedSel) { ASSERT(lpObject != NULL); if (!fExtendedSel && fSelect) ObjDeselectAll(&ObjList); ObjSelectObject((LPPRIMOBJECT)lpObject, fSelect); AdjustGroupSelection(fSelect); SetupMiniViews(NULL, YES); }
void CImage::InvertSelection() { LPOBJECT lpObject; lpObject = GetBase(); while (lpObject = GetNextObject(lpObject, YES, NO)) ObjSelectObject((LPPRIMOBJECT)lpObject, !lpObject->fSelected); SetupMiniViews(NULL, YES); }
BOOL CImage::DuplicateSelObjects() { LPOBJECT lpDupObject; OBJECTLIST DupList; LPOBJECT lpObject; RECT rUpdate; WORD wGroupID, wOldGroupID, wLastGroupID; if (!ImgEditInit( this, ET_OBJECT, UT_DELETEOBJECTS, GetBase() )) return(FALSE); DupList.lpHead = DupList.lpTail = NULL; lpObject = NULL; while (lpObject = GetSelObject(lpObject)) { if (!(lpDupObject = ObjDuplicateObject(lpObject))) { ObjDeleteObjects(&DupList, ST_ALL); return(FALSE); } ObjAddTail(&DupList, (LPPRIMOBJECT)lpDupObject); } wLastGroupID = wGroupID = GetNextGroupID(); lpDupObject = NULL; while (lpDupObject = (LPOBJECT)ObjGetNextObject(&DupList, (LPPRIMOBJECT)lpDupObject, YES)) { if (!lpDupObject->wGroupID || lpDupObject->wGroupID >= wLastGroupID) continue; wOldGroupID = lpDupObject->wGroupID; lpDupObject->wGroupID = wGroupID; lpObject = lpDupObject; while (lpObject = (LPOBJECT)ObjGetNextObject(&DupList, (LPPRIMOBJECT)lpObject, YES)) { if (lpObject->wGroupID == wOldGroupID) lpObject->wGroupID = wGroupID; } ++wGroupID; } RemoveObjectMarquee(this); ObjDeselectAll(&ObjList); while (lpObject = (LPOBJECT)ObjGetNextObject(&DupList, NULL, YES)) { ObjUnlinkObject(&DupList, (LPPRIMOBJECT)lpObject); ObjSelectObject( (LPPRIMOBJECT)lpObject, YES ); // Select the new object ObjAddTail( &ObjList, (LPPRIMOBJECT)lpObject ); // Add to the image's list lpObject->fUndoDeleted = YES; } ImgEditedObject(this, GetBase(), IDS_UNDODUPLICATE, NULL); GetSelObjectRect(&rUpdate, NO); UpdateImage(this, &rUpdate, YES); SetupMiniViews(NULL, NO); return(TRUE); }
void CImage::AddNewObject(LPOBJECT lpObject, BOOL fSetObjRes) { LPOBJECT lpBase = GetBase(); lpObject->dwObjectID = ++dwObjectID; ObjAddTail( &ObjList, (LPPRIMOBJECT)lpObject ); // Add to the image's list ObjDeselectAll(&ObjList); // Deselect anything currently selected ObjSelectObject( (LPPRIMOBJECT)lpObject, YES ); // Select the new object if (lpBase) { if(fSetObjRes) { int res = FrameResolution(ObjGetEditFrame(lpBase)); FrameSetResolution(ObjGetEditFrame(lpObject), res); if (lpObject->lpAlpha) FrameSetResolution(AlphaGetEditFrame(lpObject->lpAlpha), res); } } }
BOOL CImage::SelectObjects(LPOBJECT lpStartObject, LPRECT lpRect, BOOL fSelect, BOOL fBottomUp, BOOL fExcludeBase) { BOOL fHaveRect, fSelected; BOOL fLoop; LPOBJECT lpObject, lpBase; if (lpRect) fHaveRect = lpRect->left < lpRect->right; fLoop = lpStartObject != NULL; lpObject = lpStartObject; fSelected = FALSE; lpBase = GetBase(); while (lpObject = GetNextObject(lpObject, fBottomUp, fLoop)) { if (!fExcludeBase || lpObject != lpBase) { if (!lpRect) { if (fSelect != lpObject->fSelected) { ObjSelectObject((LPPRIMOBJECT)lpObject, fSelect); fSelected = TRUE; } } else if (fHaveRect) { if (lpObject->rObject.left >= lpRect->left && lpObject->rObject.right <= lpRect->right && lpObject->rObject.top >= lpRect->top && lpObject->rObject.bottom <= lpRect->bottom) { if (fSelect != lpObject->fSelected) { ObjSelectObject((LPPRIMOBJECT)lpObject, fSelect); fSelected = TRUE; } } } else { if (AstralPtInRect(&lpObject->rObject, *((LPPOINT)lpRect))) { if (lpObject == lpBase || !lpObject->lpAlpha || IsMasked(lpObject->lpAlpha, lpRect->left-lpObject->rObject.left, lpRect->top-lpObject->rObject.top)) { if (fSelect != lpObject->fSelected) { ObjSelectObject((LPPRIMOBJECT)lpObject, fSelect); fSelected = TRUE; } break; } } } } if (lpObject == lpStartObject) break; } return(fSelected); }