void CImage::ObjEditFreeUndo( LPOBJECT lpObject, BOOL fFreeData, BOOL fFreeAlpha ) { LPALPHA lpAlpha; lpAlpha = lpObject->lpAlpha; if (fFreeData) { PixmapFreeUndo(&lpObject->Pixmap); if (lpObject->fBothDirty && lpAlpha) PixmapFreeUndo(&lpAlpha->Pixmap); lpObject->DataDirty = NO; lpObject->fBothDirty = NO; } if (fFreeAlpha && lpAlpha) { PixmapFreeUndo(&lpAlpha->Pixmap); if (lpObject->fBothDirty) { PixmapFreeUndo(&lpObject->Pixmap); lpObject->DataDirty = NO; } lpObject->AlphaDirty = NO; lpObject->fBothDirty = NO; } if (lpObject->lpUndoAlpha) { MaskClose(lpObject->lpUndoAlpha); lpObject->lpUndoAlpha = NULL; } }
void ObjFreeUp(LPOBJECT lpObject) /************************************************************************/ { if (!lpObject) return; if ( lpObject->ObjectType == OT_FRAME ) { PixmapFree(&lpObject->Pixmap); if (lpObject->lpAlpha) MaskClose(lpObject->lpAlpha); if (lpObject->lpUndoAlpha) MaskClose(lpObject->lpUndoAlpha); if (lpObject->UndoColorMap) FrameDestroyColorMap(lpObject->UndoColorMap); } if (lpObject->lpText) delete lpObject->lpText; if (lpObject->lpUndoText) delete lpObject->lpUndoText; FreeUp((LPTR)lpObject); }
void ObjEditApply(LPIMAGE lpImage, LPOBJECT lpObject, BOOL fApplyData, BOOL fApplyAlpha, BOOL fInitFrame) /***********************************************************************/ { LPALPHA lpAlpha; LPOBJECT lpNext; BOOL fInitingData, fInitingAlpha; if (!fApplyData && !fApplyAlpha) return; lpObject->InitUndoType = 0; fInitingAlpha = fInitFrame && fApplyAlpha; fInitingData = fInitFrame && fApplyData; lpAlpha = lpObject->lpAlpha; if (fApplyData) { if (lpObject->fBothDirty) fApplyAlpha = YES; if (lpObject == ImgGetBase(lpImage)) { ImgPurgeObjects(lpImage); lpNext = lpObject; while (lpNext = ImgGetNextObjectEx(lpImage, lpNext, YES, NO, NO)) lpNext->fUndoDeleted = NO; } if (!fInitingData) PixmapFreeUndo(&lpObject->Pixmap); else PixmapEditApply(&lpObject->Pixmap); lpObject->DataUndoType = 0; lpObject->DataDirty = NO; } if (fApplyAlpha) { if (lpObject->lpUndoAlpha) { MaskClose(lpObject->lpUndoAlpha); lpObject->lpUndoAlpha = NULL; } if (lpAlpha) { if (!fInitingAlpha) PixmapFreeUndo(&lpAlpha->Pixmap); else PixmapEditApply(&lpAlpha->Pixmap); } lpObject->AlphaUndoType = 0; lpObject->AlphaDirty = NO; } lpObject->fBothDirty = NO; }
void ObjEditFree( LPOBJECT lpObject ) /***********************************************************************/ { LPALPHA lpAlpha; lpAlpha = lpObject->lpAlpha; PixmapFree(&lpObject->Pixmap); if (lpAlpha) PixmapFree(&lpAlpha->Pixmap); if (lpObject->lpUndoAlpha) { MaskClose(lpObject->lpUndoAlpha); lpObject->lpUndoAlpha = NULL; } }
static BOOL WriteDIBMask( /************************************************************************/ LPBITMAPINFOHEADER lpInfo, LPSTR lpMaskFile) { BOOL bRet; LPMASK lpMask; // create the mask if ( !(lpMask = MaskCreate( NULL, (int)lpInfo->biWidth, (int)lpInfo->biHeight, ON, YES )) ) return(FALSE); // write out the mask bRet = WriteMask( lpMaskFile, lpMask, FALSE ); MaskClose( lpMask ); return( bRet ); }
void CImage::ObjEditApply(LPOBJECT lpObject, BOOL fApplyData, BOOL fApplyAlpha, BOOL fInitFrame) { LPALPHA lpAlpha; LPOBJECT lpNext; BOOL fInitingData, fInitingAlpha; if (!fApplyData && !fApplyAlpha) return; lpObject->InitUndoType = 0; fInitingAlpha = fInitFrame && fApplyAlpha; fInitingData = fInitFrame && fApplyData; lpAlpha = lpObject->lpAlpha; if (fApplyData) { if (lpObject->fBothDirty) fApplyAlpha = YES; if (lpObject == GetBase()) { PurgeObjects(); lpNext = lpObject; while (lpNext = GetNextObject(lpNext, YES, NO, NO)) lpNext->fUndoDeleted = NO; } if (!fInitingData) PixmapFreeUndo(&lpObject->Pixmap); else PixmapEditApply(&lpObject->Pixmap); if (lpObject->lpUndoText) { delete lpObject->lpUndoText; lpObject->lpUndoText = NULL; } if (lpObject->UndoColorMap) { FrameDestroyColorMap(lpObject->UndoColorMap); lpObject->UndoColorMap = NULL; } lpObject->DataUndoType = 0; lpObject->DataDirty = NO; } if (fApplyAlpha) { if (lpObject->lpUndoAlpha) { MaskClose(lpObject->lpUndoAlpha); lpObject->lpUndoAlpha = NULL; } if (lpAlpha) { if (!fInitingAlpha) PixmapFreeUndo(&lpAlpha->Pixmap); else PixmapEditApply(&lpAlpha->Pixmap); } lpObject->AlphaUndoType = 0; lpObject->AlphaDirty = NO; } lpObject->fBothDirty = NO; }
void CImage::ObjEditUndo(LPOBJECT lpObject, BOOL fUndoData, BOOL fUndoAlpha) { RECT rTemp; BOOL fSelected, Resolution, fDeleted, fBase, bLocked; LPALPHA lpAlpha, lpTemp; LPOBJECT lpNext; int XSize, YSize; int tempDataType; LPCOLORMAP lpColorMap; int GroupID; lpAlpha = lpObject->lpAlpha; fBase = lpObject == GetBase(); if (fUndoData && lpObject->DataDirty) { if (lpObject->DataUndoType & UT_RESOLUTION) Resolution = FrameResolution(lpObject->Pixmap.EditFrame); if (lpObject->DataUndoType & UT_COLORMAP) { if (lpColorMap = FrameGetColorMap(ObjGetEditFrame(lpObject))) lpColorMap = FrameCopyColorMap(lpColorMap); else lpColorMap = NULL; } if (lpObject->DataUndoType & (UT_DATA|UT_NEWDATA)) { PixmapEditUndo(&lpObject->Pixmap); if (fBase) { npix = FrameXSize(ObjGetEditFrame(lpObject)); nlin = FrameYSize(ObjGetEditFrame(lpObject)); if (lpObject->DataUndoType & UT_NEWDATA) { tempDataType = DataType; DataType = UndoDataType; UndoDataType = tempDataType; } } } if (lpObject->DataUndoType & UT_OBJECTRECT) { rTemp = lpObject->rObject; lpObject->rObject = lpObject->rUndoObject; lpObject->rUndoObject = rTemp; } if (lpObject->DataUndoType & UT_RESOLUTION) { FrameSetResolution( lpObject->Pixmap.EditFrame, lpObject->UndoResolution); lpObject->UndoResolution = Resolution; } if (lpObject->DataUndoType & UT_UNDOTEXTDATA) { if (lpObject->lpUndoText) { CTextObject *pTmp = lpObject->lpUndoText; lpObject->lpUndoText = lpObject->lpText; lpObject->lpText = pTmp; } } if (lpObject->DataUndoType & UT_COLORMAP) { if (lpObject->UndoColorMap) { FrameSetColorMap( ObjGetEditFrame(lpObject), lpObject->UndoColorMap); FrameDestroyColorMap(lpObject->UndoColorMap); } lpObject->UndoColorMap = lpColorMap; } if (lpObject->DataUndoType & UT_SELECTION) { fSelected = lpObject->fSelected; lpObject->fSelected = lpObject->fUndoSelected; lpObject->fUndoSelected = fSelected; } if (lpObject->DataUndoType & UT_LOCKOBJECTS) { bLocked = lpObject->bLocked; lpObject->bLocked = lpObject->bUndoLocked; lpObject->bUndoLocked = bLocked; } if (lpObject->DataUndoType & UT_GROUPOBJECTS) { GroupID = lpObject->wGroupID; lpObject->wGroupID = lpObject->UndoGroupID; lpObject->UndoGroupID = GroupID; } if (lpObject->DataUndoType & UT_DELETEOBJECTS) { lpNext = lpObject; while (lpNext = GetNextObject(lpNext, YES, NO, YES)) { if (lpNext->fUndoDeleted || lpNext->fDeleted) { fDeleted = lpNext->fDeleted; lpNext->fDeleted = lpNext->fUndoDeleted; lpNext->fUndoDeleted = fDeleted; } } } if (fBase && lpObject->DataUndoType & UT_MOVEOBJECTS) { lpNext = lpObject; while (lpNext = GetNextObject(lpNext, YES, NO, NO)) { rTemp = lpNext->rObject; lpNext->rObject = lpNext->rUndoObject; lpNext->rUndoObject = rTemp; } } lpObject->DataUndoNotRedo = !lpObject->DataUndoNotRedo; if (!fUndoAlpha) fUndoAlpha = lpObject->fBothDirty; } else if (fUndoAlpha && lpObject->fBothDirty) fUndoAlpha = NO; if (fUndoAlpha && lpObject->AlphaDirty) { if (lpAlpha) { if (lpObject->AlphaUndoType & (UT_ALPHA|UT_NEWALPHA)) { PixmapEditUndo(&lpAlpha->Pixmap); rTemp = lpAlpha->rMask; lpAlpha->rMask = lpAlpha->rUndoMask; lpAlpha->rUndoMask = rTemp; } } if (lpObject->AlphaUndoType & (UT_CREATEMASK|UT_DELETEMASK)) { lpTemp = lpObject->lpAlpha; lpObject->lpAlpha = lpObject->lpUndoAlpha; lpObject->lpUndoAlpha = lpTemp; } lpObject->AlphaUndoNotRedo = !lpObject->AlphaUndoNotRedo; } lpAlpha = lpObject->lpAlpha; // check to make sure the mask is still the same size if (fUndoData && fBase && lpObject->Pixmap.fNewFrame) { // we just undid to a different size frame bag mask delete undo if (lpObject->lpUndoAlpha && !lpObject->fBothDirty) ObjEditApply(lpObject, NO, YES, NO); if (lpAlpha) { XSize = FrameXSize(lpAlpha->Pixmap.EditFrame); YSize = FrameYSize(lpAlpha->Pixmap.EditFrame); if (XSize != FrameXSize(lpObject->Pixmap.EditFrame) || YSize != FrameYSize(lpObject->Pixmap.EditFrame)) { ObjEditInit(lpObject, UT_DELETEMASK); // dont free mask if it was stored for later undo/redo if (!lpObject->lpUndoAlpha) MaskClose(lpObject->lpAlpha); lpObject->fBothDirty = YES; lpObject->AlphaDirty = lpObject->DataDirty; lpObject->lpAlpha = NULL; } } } }