Click here to Skip to main content
15,894,405 members
Articles / Desktop Programming / MFC

ImageStone - A Powerful C++ Class Library for Image Manipulation

Rate me:
Please Sign up or sign in to vote.
4.81/5 (250 votes)
6 Dec 2011Zlib3 min read 1.1M   51.5K   405  
An article on a library for image manipulation
/*
 *   Copyright (C) =USTC= Fu Li
 *
 *   Author   :  Fu Li
 *   Create   :  2004-10-5
 *   Home     :  http://www.crazy-bit.com/
 *   Mail     :  crazybitwps@hotmail.com
 *   History  :  
 */
#ifndef __FOO_INTERFACE_COMMAND__2004_10_05__H__
#define __FOO_INTERFACE_COMMAND__2004_10_05__H__

class FCObjCanvas ; // external class

class FCCmdArtPrider ; // interface for FCObjCanvas::Execute
    class FCCmdOnceExecute ; // this command execute once and can't be UNDO/REDO

//=============================================================================
/**
 *  Interface for FCObjCanvas::Execute.
 */
class FCCmdArtPrider
{
public:
    FCCmdArtPrider() : m_bDeleteAfterExecute(false) {}
    virtual ~FCCmdArtPrider() {}
    void SetDeleteFlagAfterExecute (bool bFlag) {m_bDeleteAfterExecute=bFlag;}
    bool IsNeedDeleteAfterExecute() const {return m_bDeleteAfterExecute ? true : false;}

    /// Operation on canvas.
    virtual void Execute (FCObjCanvas& canvas, FCObjProgress* pProgress) =0 ;
    /// Undo.
    virtual void Undo (FCObjCanvas& canvas) =0 ;
    /// Redo.
    virtual void Redo (FCObjCanvas& canvas) =0 ;

private:
    int   m_bDeleteAfterExecute ;
};

//=============================================================================
/**
 *  This command execute once and can't be UNDO/REDO.
 */
class FCCmdOnceExecute : public FCCmdArtPrider
{
    virtual void Undo (FCObjCanvas& canvas) {assert(false);}
    virtual void Redo (FCObjCanvas& canvas) {assert(false);}
public:
    FCCmdOnceExecute() {SetDeleteFlagAfterExecute(true);}
};

//=============================================================================
/**
 *  Composite command.
 */
class FCCmdComposite : public FCCmdArtPrider,
                       private PCL_Interface_Composite<FCCmdArtPrider>
{
protected:
    virtual void Execute (FCObjCanvas& canvas, FCObjProgress* pProgress)
    {
        for (int i=0 ; i < PCL_GetObjectCount() ; i++)
            PCL_GetObject(i)->Execute (canvas, pProgress) ;
    }
    virtual void Undo (FCObjCanvas& canvas)
    {
        for (int i=PCL_GetObjectCount()-1 ; i >= 0 ; i--)
            PCL_GetObject(i)->Undo(canvas) ;
    }
    virtual void Redo (FCObjCanvas& canvas)
    {
        for (int i=0 ; i < PCL_GetObjectCount() ; i++)
            PCL_GetObject(i)->Redo(canvas) ;
    }
public:
    /// Add a command to composite command.
    void PushImgCommand (FCCmdArtPrider* pCmd)
    {
        assert (pCmd) ;
        if (pCmd)
            PCL_PushObject (pCmd) ;
    }
};

//=============================================================================
// inline Implement
//=============================================================================

#endif

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The zlib/libpng License


Written By
Team Leader PhoXo
China China
graduate from University of Science and Technology of China at 2002.

Now I work at www.phoxo.com.

Comments and Discussions