summaryrefslogtreecommitdiff
path: root/libs/mTextControl/src/FormattedTextDraw.h
blob: 3e09d4911330a0b0da82dd79cfaa29a88c16fe91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// Feel free to use this code in your own applications.
// The Author does not guarantee anything about this code.
// Author : Yves Maurer
// FormattedTextDraw.h : Declaration of the CFormattedTextDraw

#ifndef __FORMATTEDTEXTDRAW_H_
#define __FORMATTEDTEXTDRAW_H_

#ifndef LY_PER_INCH
#define LY_PER_INCH   1440
#define HOST_BORDER 0
#endif

struct COOKIE
{
	bool isUnicode;
	union
	{
		char *ansi;
		wchar_t *unicode;
	};
	size_t cbSize, cbCount;
};

/////////////////////////////////////////////////////////////////////////////
// CFormattedTextDraw

class CFormattedTextDraw : public ITextHost, public MZeroedObject
{
	HWND           m_hwndParent;
	RECT           m_rcClient;			// Client Rect
	RECT           m_rcViewInset;		// view rect inset
	SIZEL          m_sizelExtent;		// Extent array

	int            nPixelsPerInchX;    // Pixels per logical inch along width
	int            nPixelsPerInchY;    // Pixels per logical inch along height

	CHARFORMAT2W  *m_pCF;
	PARAFORMAT2    m_PF;
	uint32_t       m_dwScrollbar;		// Scroll bar style
	uint32_t       m_dwPropertyBits;	// Property bits
	uint32_t       m_dwMaxLength;
	COOKIE         m_editCookie;

	ITextServices *m_spTextServices;
	ITextDocument *m_spTextDocument;

public:
	CFormattedTextDraw();
	~CFormattedTextDraw();

	HRESULT get_NaturalSize(HDC hdcDraw, long *Width, long *pVal);
	HRESULT Draw(HDC hdcDraw, RECT *prc);
	HRESULT putRTFTextA(char *newVal);
	HRESULT putRTFTextW(wchar_t *newVal);
	HRESULT putTextA(char *newVal);
	HRESULT putTextW(wchar_t *newVal);

	__forceinline ITextServices *getTextService() { return m_spTextServices; };
	__forceinline ITextDocument *getTextDocument() { return m_spTextDocument; };

	__forceinline void setParentWnd(HWND hwnd, RECT rect) { m_hwndParent = hwnd; m_rcClient = rect; }

	// IUnknown
	HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, void __RPC_FAR *__RPC_FAR *ppvObject) override
	{	*ppvObject = nullptr;
		return S_FALSE;
	}

	ULONG STDMETHODCALLTYPE AddRef(void) override
	{	return 0;
	}

	ULONG STDMETHODCALLTYPE Release(void) override
	{	return 0;
	}

	// ITextHost
	HDC      TxGetDC() override;
	INT      TxReleaseDC(HDC hdc) override;
	BOOL     TxShowScrollBar(INT fnBar, BOOL fShow) override;
	BOOL     TxEnableScrollBar(INT fuSBFlags, INT fuArrowflags) override;
	BOOL     TxSetScrollRange(INT fnBar, LONG nMinPos, INT nMaxPos, BOOL fRedraw) override;
	BOOL     TxSetScrollPos(INT fnBar, INT nPos, BOOL fRedraw) override;
	void     TxInvalidateRect(LPCRECT prc, BOOL fMode) override;
	void     TxViewChange(BOOL fUpdate) override;
	BOOL     TxCreateCaret(HBITMAP hbmp, INT xWidth, INT yHeight) override;
	BOOL     TxShowCaret(BOOL fShow) override;
	BOOL     TxSetCaretPos(INT x, INT y) override;
	BOOL     TxSetTimer(UINT idTimer, UINT uTimeout) override;
	void     TxKillTimer(UINT idTimer) override;
	void     TxScrollWindowEx(INT dx, INT dy, LPCRECT lprcScroll, LPCRECT lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate, UINT fuScroll) override;
	void     TxSetCapture(BOOL fCapture) override;
	void     TxSetFocus() override;
	void     TxSetCursor(HCURSOR hcur, BOOL fText) override;
	BOOL     TxScreenToClient(LPPOINT lppt) override;
	BOOL     TxClientToScreen(LPPOINT lppt) override;
	HRESULT	TxActivate(LONG * plOldState) override;
	HRESULT	TxDeactivate(LONG lNewState) override;
	HRESULT	TxGetClientRect(LPRECT prc) override;
	HRESULT	TxGetViewInset(LPRECT prc) override;
	HRESULT  TxGetCharFormat(const CHARFORMATW **ppCF) override;
	HRESULT	TxGetParaFormat(const PARAFORMAT **ppPF) override;
	COLORREF TxGetSysColor(int nIndex) override;
	HRESULT	TxGetBackStyle(TXTBACKSTYLE *pstyle) override;
	HRESULT	TxGetMaxLength(DWORD *plength) override;
	HRESULT	TxGetScrollBars(DWORD *pdwScrollBar) override;
	HRESULT	TxGetPasswordChar(wchar_t *pch) override;
	HRESULT	TxGetAcceleratorPos(LONG *pcp) override;
	HRESULT	TxGetExtent(LPSIZEL lpExtent) override;
	HRESULT  OnTxCharFormatChange(const CHARFORMATW * pcf) override;
	HRESULT	OnTxParaFormatChange(const PARAFORMAT * ppf) override;
	HRESULT	TxGetPropertyBits(DWORD dwMask, DWORD *pdwBits) override;
	HRESULT	TxNotify(DWORD iNotify, void *pv) override;
	HIMC     TxImmGetContext() override;
	void     TxImmReleaseContext(HIMC himc) override;
	HRESULT	TxGetSelectionBarWidth(LONG *lSelBarWidth) override;

	// Custom functions
	HRESULT  CharFormatFromHFONT(CHARFORMAT2W* pCF, HFONT hFont);
	HRESULT  InitDefaultCharFormat();
	HRESULT  InitDefaultParaFormat();
};

void bbCodeParse(CFormattedTextDraw *ts);

#endif //__FORMATTEDTEXTDRAW_H_