예제 #1
0
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;
	}
}
예제 #2
0
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;
}
예제 #3
0
BOOL CImage::ObjEditDiscardUndoCheck( LPOBJECT lpObject,
					BOOL fCheckData, BOOL fCheckAlpha )
{
LPALPHA lpAlpha;
int retc;

if ( !lpObject )
	return(FALSE);
if (!ObjEditUndoDiscardable(lpObject, fCheckData, fCheckAlpha))
	retc = AstralConfirm( IDS_OKTOAPPLY );
else
	retc = IDYES;
if (retc == IDYES)
	{
	lpAlpha = lpObject->lpAlpha;
	if (fCheckData)
		PixmapFreeUndo(&lpObject->Pixmap);
	if (fCheckAlpha && lpAlpha)
 		PixmapFreeUndo(&lpAlpha->Pixmap);
	}
return( retc != IDCANCEL );
}
예제 #4
0
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;
}