Files
2024-05-18 23:53:26 +08:00

135 lines
4.8 KiB
C++

#ifndef _SAPGRAPHIC_H_
#define _SAPGRAPHIC_H_
// SapGraphic.h : header file
//
#include "SapClassBasicDef.h"
//
// SapGraphic class declaration
//
class SAPCLASSBASIC_CLASS SapGraphic : public SapManager
{
public:
// Drawing modes
typedef int DrawMode;
enum _DrawMode
{
ModeReplace = CORGRAPHIC_VAL_OPM_REP,
ModeAnd = CORGRAPHIC_VAL_OPM_AND,
ModeOr = CORGRAPHIC_VAL_OPM_OR,
ModeXor = CORGRAPHIC_VAL_OPM_XOR
};
// Text alignment
typedef int TextAlign;
enum _TextAlign
{
TextLeft = CORGRAPHIC_VAL_TEXTALIGN_L,
TextCenter = CORGRAPHIC_VAL_TEXTALIGN_C,
TextRight = CORGRAPHIC_VAL_TEXTALIGN_R
};
public:
// Constructor/Destructor
SapGraphic(SapLocation loc = SapLocation::ServerSystem);
SapGraphic(const SapGraphic &graph);
virtual ~SapGraphic();
SapGraphic &operator=(const SapGraphic &graph);
// Module create/destroy
virtual BOOL Create();
virtual BOOL Destroy();
// Access to implementation
CORHANDLE GetHandle() const { return m_hGraphic; }
SapLocation GetLocation() const { return m_Location; }
DrawMode GetDrawMode() const { return m_DrawMode; }
BOOL GetTransparency() const { return m_IsTransparent; }
SapData GetColor() const { return m_Color; }
SapData GetBackColor() const { return m_BackColor; }
TextAlign GetTextAlign() const { return m_TextAlign; }
BOOL SetLocation(SapLocation location);
virtual BOOL SetDrawMode(DrawMode drawMode);
virtual BOOL SetTransparency(BOOL isTransparent);
virtual BOOL SetColor(SapData color);
virtual BOOL SetBackColor(SapData backColor);
virtual BOOL SetTextAlign(TextAlign textAlign);
virtual BOOL SetBatchMode(BOOL batchMode, SapView *pView);
virtual BOOL IsCapabilityValid(int cap);
virtual BOOL GetCapability(int cap, void *pValue);
virtual BOOL IsParameterValid(int param);
virtual BOOL GetParameter(int param, void *pValue);
virtual BOOL SetParameter(int param, int value);
virtual BOOL SetParameter(int param, void *pValue);
// Drawing methods
BOOL Circle(SapBuffer *pBuffer, int x, int y, int radius, BOOL fill = FALSE);
BOOL Circle(SapView *pView, int x, int y, int radius, BOOL fill = FALSE);
BOOL Clear(SapBuffer *pBuffer);
BOOL Clear(SapView *pView);
BOOL Dot(SapBuffer *pBuffer, int x, int y);
BOOL Dot(SapView *pView, int x, int y);
BOOL Ellipse(SapBuffer *pBuffer, int x, int y, int xRadius, int yRadius, BOOL fill = FALSE);
BOOL Ellipse(SapView *pView, int x, int y, int xRadius, int yRadius, BOOL fill = FALSE);
BOOL Line(SapBuffer *pBuffer, int x1, int y1, int x2, int y2);
BOOL Line(SapView *pView, int x1, int y1, int x2, int y2);
BOOL Rectangle(SapBuffer *pBuffer, int x1, int y1, int x2, int y2, BOOL fill = FALSE);
BOOL Rectangle(SapView *pView, int x1, int y1, int x2, int y2, BOOL fill = FALSE);
BOOL Text(SapBuffer *pBuffer, int x, int y, const char *text);
BOOL Text(SapView *pView, int x, int y, const char *text);
BOOL Flush(SapView *pView, int x1 = 0, int y1 = 0, int x2 = -1, int y2 = -1);
protected:
// Utility methods
void Construct(SapLocation loc, DrawMode drawMode, SapData color, SapData backColor, TextAlign textAlign);
BOOL EnableBatchMode(SapView *pView);
BOOL DisableBatchMode();
BOOL InitSapDrawing(SapView *pView);
BOOL InitGDIDrawing(SapView *pView, BOOL fill);
BOOL InitGDITextDrawing(SapView *pView);
BOOL EndGDIDrawing(SapView *pView);
HDC GetDrawingDC() { return m_BatchMode ? m_hBatchDC : m_hDC; }
protected:
SapLocation m_Location;
CORGRAPHIC m_hGraphic;
// Parameters
DrawMode m_DrawMode; // Drawing mode between foreground color and destination
BOOL m_IsTransparent; // TRUE if transparent drawing (background remains unchanged)
SapData m_Color; // Foreground drawing color
SapData m_BackColor; // Background drawing color
TextAlign m_TextAlign; // Text alignment
BOOL m_IsNewColor; // TRUE when foreground color value has changed
// Windows GDI objects used for drawing on the image overlay
HFONT m_hFont;
HGDIOBJ m_hOldFont; // Initial font for device context
HBRUSH m_hBrush;
HGDIOBJ m_hOldBrush; // Initial brush for device context
HPEN m_hPen;
HGDIOBJ m_hOldPen; // Initial pen for device context
HDC m_hDC;
// Management of batch (buffered) drawing in the image overlay
BOOL m_BatchMode; // TRUE if batch drawing is active
SapView *m_pBatchView; // View object to which batch drawing applies
HDC m_hBatchDC; // Memory device context for drawing
HBITMAP m_hBatchBitmap; // Bitmap to draw into
HGDIOBJ m_hOldBatchBitmap; // Initial bitmap for batch device context
// Buffer used for non-primary VGA overlay drawing
CORBUFFER m_hBuffer;
};
#endif // _SAPGRAPHIC_H_