2015-05-08 16:02:36 +00:00
|
|
|
/*
|
2023-06-23 14:04:32 +03:00
|
|
|
* PROJECT: PAINT for ReactOS
|
|
|
|
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
|
|
|
|
* PURPOSE: Undo and redo functionality
|
2023-06-27 21:22:21 +03:00
|
|
|
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
|
2015-05-08 16:02:36 +00:00
|
|
|
*/
|
|
|
|
|
2017-12-09 13:36:45 +01:00
|
|
|
#pragma once
|
|
|
|
|
2021-12-28 10:44:56 +09:00
|
|
|
/* HISTORYSIZE = number of possible undo-steps + 1 */
|
|
|
|
#define HISTORYSIZE 11
|
|
|
|
|
2015-07-07 11:56:37 +00:00
|
|
|
class ImageModel
|
|
|
|
{
|
2015-07-23 13:11:54 +00:00
|
|
|
public:
|
2015-07-23 07:48:32 +00:00
|
|
|
ImageModel();
|
2023-06-13 23:23:48 +09:00
|
|
|
virtual ~ImageModel();
|
|
|
|
|
|
|
|
HDC GetDC();
|
2023-06-17 21:15:35 +09:00
|
|
|
BOOL CanUndo() const { return m_undoSteps > 0; }
|
|
|
|
BOOL CanRedo() const { return m_redoSteps > 0; }
|
2023-06-13 23:23:48 +09:00
|
|
|
void PushImageForUndo(HBITMAP hbm = NULL);
|
|
|
|
void ResetToPrevious(void);
|
2022-01-30 12:05:23 +09:00
|
|
|
void Undo(BOOL bClearRedo = FALSE);
|
2015-07-07 11:56:37 +00:00
|
|
|
void Redo(void);
|
|
|
|
void ClearHistory(void);
|
|
|
|
void Crop(int nWidth, int nHeight, int nOffsetX = 0, int nOffsetY = 0);
|
2023-06-13 23:23:48 +09:00
|
|
|
void SaveImage(LPCTSTR lpFileName);
|
2021-12-28 09:49:36 +09:00
|
|
|
BOOL IsImageSaved() const;
|
2015-07-07 11:56:37 +00:00
|
|
|
void StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX = 0, int nSkewDegY = 0);
|
2021-12-28 09:49:36 +09:00
|
|
|
int GetWidth() const;
|
|
|
|
int GetHeight() const;
|
2023-06-17 21:15:35 +09:00
|
|
|
HBITMAP CopyBitmap();
|
2015-07-07 11:56:37 +00:00
|
|
|
void InvertColors();
|
2015-07-23 13:52:02 +00:00
|
|
|
void FlipHorizontally();
|
|
|
|
void FlipVertically();
|
|
|
|
void RotateNTimes90Degrees(int iN);
|
2023-06-22 07:57:36 +09:00
|
|
|
void Clamp(POINT& pt) const;
|
2023-06-14 18:51:40 +09:00
|
|
|
void NotifyImageChanged();
|
2023-08-11 20:27:12 +09:00
|
|
|
BOOL IsBlackAndWhite();
|
|
|
|
void PushBlackAndWhite();
|
2023-06-13 23:23:48 +09:00
|
|
|
|
|
|
|
protected:
|
2023-06-17 21:15:35 +09:00
|
|
|
HDC m_hDrawingDC; // The device context for this class
|
|
|
|
int m_currInd; // The current index in m_hBms
|
|
|
|
int m_undoSteps; // The undo-able count
|
|
|
|
int m_redoSteps; // The redo-able count
|
|
|
|
HBITMAP m_hBms[HISTORYSIZE]; // A rotation buffer of HBITMAPs
|
|
|
|
HGDIOBJ m_hbmOld;
|
2015-07-07 11:56:37 +00:00
|
|
|
};
|