123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- #pragma once
- #include "Common.h"
- #include "util/Point.h"
- #include "util/CubicFuncSpline.h"
- #include "ImageUtils.h"
- NS_BF_BEGIN;
- class ImageData;
- class ImageEffectCtx;
- enum MixType
- {
- IMAGEMIX_INNER,
- IMAGEMIX_OUTER,
- IMAGEMIX_OVER
- };
- class ImageCurvePoint
- {
- public:
- float mX;
- float mY;
- CubicFuncSpline* mSpline;
- bool mIsSplineOwner;
- bool mIsCorner;
- public:
- ImageCurvePoint();
- ~ImageCurvePoint();
- };
- typedef std::vector<ImageCurvePoint> ImageCurvePointVector;
- class ImageCurve
- {
- public:
- String mInterpType;
- ImageCurvePointVector mPoints;
- bool mInitialized;
- public:
- void Init();
- float GetVal(float x);
- bool IsDefault();
- };
- class ImageGradientPoint
- {
- public:
- float mX;
- int mValue;
- };
- typedef std::vector<ImageGradientPoint> ImageGradientPointVector;
- class ImageGradient
- {
- public:
- String mInterpType;
- ImageGradientPointVector mPoints;
- CubicUnitFuncSpline mSpline;
- float mSmoothness; // 0.0 - 1.0
- int mXSize;
- public:
- int GetVal(float x);
- };
- ///
- const int CONTOUR_DATA_SIZE = 4096;
- const int GRADIENT_DATA_SIZE = 4096;
- class PSDLayerInfo;
- class ImageStrokeEffect;
- class ImageEffects;
- class BaseImageEffect
- {
- public:
- double mOpacity;
- int32 mBlendMode;
- uint16* mContourData;
- uint32* mGradientData;
- bool mInitialized;
- public:
- BaseImageEffect();
- virtual ~BaseImageEffect();
- virtual void Init();
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) = 0;
- virtual void Apply(ImageEffectCtx* ctx);
- virtual int GetMixType(); // Default:Interior
- virtual int GetNeededBorderSize();
- virtual bool NeedsOrigBits(ImageEffects* effects);
- };
- class ImageShadowEffect :public BaseImageEffect
- {
- public:
- uint32 mColor;
- bool mUseGlobalLight;
- double mLocalAngle;
- double mDistance;
- double mSpread; // Also 'Choke'
- double mSize;
- ImageCurve mContour;
- bool mAntiAliased;
- double mNoise;
- public:
- virtual void Init();
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData);
- virtual int GetNeededBorderSize();
- };
- class ImageDropShadowEffect : public ImageShadowEffect
- {
- public:
- bool mLayerKnocksOut;
- public:
- virtual int GetMixType() override;
- };
- class ImageInnerShadowEffect : public ImageShadowEffect
- {
- public:
- bool mLayerKnocksOut;
- };
- class ImageGlowEffect : public BaseImageEffect
- {
- public:
- ImageGradient mColorGradient[4];
- bool mHasGradient;
- double mNoise;
-
- int32 mTechnique; // 'SfBL' or 'PrBL'
- double mSize;
-
- ImageCurve mContour;
- double mRange;
- double mJitter;
- bool mAntiAliased;
- public:
- virtual void Init() override;
- virtual void CreateContourAndGradientData();
- virtual int GetNeededBorderSize() override;
- };
- class ImageOuterGlowEffect : public ImageGlowEffect
- {
- public:
- double mSpread;
- public:
- void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- virtual int GetMixType() override;
- };
- class ImageInnerGlowEffect : public ImageGlowEffect
- {
- public:
- double mChoke;
- bool mIsCenter; // Otherwise 'Edge'
- public:
- void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- };
- class ImageFill
- {
- public:
- virtual ~ImageFill() {}
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) = 0;
- };
- class ImageColorFill : public ImageFill
- {
- public:
- uint32 mColor;
- public:
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData);
- };
- class ImagePatternFill : public ImageFill
- {
- public:
- double mPhaseX;
- double mPhaseY;
- bool mLinkWithLayer;
- double mScale;
- String mPatternName;
- public:
- void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData);
- };
- class ImageGradientFill : public ImageFill
- {
- public:
- ImageGradient mColorGradient[4];
- uint32* mGradientData;
- int mStyle; // 'Lnr ',
- bool mReverse;
- bool mAlignWithLayer;
- double mOffsetX;
- double mOffsetY;
- double mAngle;
- double mScale;
- public:
- ImageGradientFill();
- ~ImageGradientFill();
- void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData);
- };
- class ImageBevelEffect : public BaseImageEffect
- {
- public:
- int32 mStyle; // 'InrB'=Inner Bevel, 'OtrB'=Outer Bevel
- int32 mTechnique; // 'SfBL'=Smooth, 'PrBL'=Chisel Hard, 'Slmt'=Chisel Soft
- double mDepth;
- bool mDirectionUp;
- double mSize;
- double mSoften;
- double mLocalAngle;
- bool mUseGlobalLight;
- double mLocalAltitude;
- ImageCurve mGlossContour;
- bool mAntiAliased;
- int32 mHiliteMode;
- uint32 mHiliteColor;
- double mHiliteOpacity;
- int32 mShadowMode;
- uint32 mShadowColor;
- double mShadowOpacity;
- bool mUseContour;
- ImageCurve mBevelContour;
- int32* mBevelContourData;
- double mBevelContourRange;
-
- bool mUseTexture;
- ImagePatternFill mTexture;
- double mTextureDepth;
- bool mTextureInvert;
- uint16* mGlossContourData;
- public:
- ImageBevelEffect();
- ~ImageBevelEffect();
- void Init() override;
- void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- virtual void Apply(ImageEffectCtx* ctx) override;
- virtual int GetMixType() override;
- void Apply(int pass, int style, PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* hiliteImage, ImageData* shadowImage);
- virtual int GetNeededBorderSize() override;
- };
- typedef std::vector<BaseImageEffect*> ImageEffectVector;
- class ImageSatinEffect : public BaseImageEffect
- {
- public:
- uint32 mColor;
- double mAngle;
- double mDistance;
- double mSize;
- ImageCurve mContour;
- bool mAntiAliased;
- bool mInvert;
- public:
- virtual void Init() override;
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- virtual int GetMixType() override; // Default:Interior
- virtual int GetNeededBorderSize() override;
- };
- class ImageColorOverlayEffect : public BaseImageEffect
- {
- public:
- ImageColorFill mColorFill;
- public:
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- };
- class ImageGradientOverlayEffect : public BaseImageEffect
- {
- public:
- ImageGradientFill mGradientFill;
- public:
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- };
- class ImagePatternOverlayEffect : public BaseImageEffect
- {
- public:
- ImagePatternFill mPattern;
- public:
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- };
- class ImageStrokeEffect : public BaseImageEffect
- {
- public:
- double mSize;
- int mPosition;
-
- int32 mFillType;
- ImageGradientFill mGradientFill;
- ImageColorFill mColorFill;
- ImagePatternFill mPatternFill;
- public:
- virtual void Apply(PSDLayerInfo* layerInfo, ImageData* imageData, ImageData* destImageData) override;
- virtual void Apply(ImageEffectCtx* ctx) override;
- virtual int GetMixType() override; // Default:Interior
- virtual int GetNeededBorderSize() override;
- virtual bool NeedsOrigBits(ImageEffects* effects) override;
- };
- ///
- class ImageEffectCtx
- {
- public:
- int mBlendX;
- int mBlendY;
- int mBlendWidth;
- int mBlendHeight;
- PSDLayerInfo* mLayerInfo;
- ImageData* mLayerImage;
- ImageData* mInnerImage;
- ImageData* mOuterImage;
- ImageData* mOrigImage;
- };
- class ImageEffects
- {
- public:
- ImageEffectVector mImageEffectVector;
- ImageData* mSwapImages[2];
- public:
- ImageData* GetDestImage(ImageData* usingImage);
-
- public:
- ImageEffects();
- ~ImageEffects();
- ImageData* FlattenInto(ImageData* dest, PSDLayerInfo* srcLayer, ImageData* srcImage, ImageData* knockoutBottom, ImageData* insideImage);
- void AddEffect(BaseImageEffect* effect);
- };
- NS_BF_END;
|