diff options
author | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-05-15 10:38:20 +0000 |
---|---|---|
committer | Vadim Dashevskiy <watcherhd@gmail.com> | 2012-05-15 10:38:20 +0000 |
commit | 48540940b6c28bb4378abfeb500ec45a625b37b6 (patch) | |
tree | 2ef294c0763e802f91d868bdef4229b6868527de /plugins/mTextControl/src/FormattedTextDraw.h | |
parent | 5c350913f011e119127baeb32a6aedeb4f0d33bc (diff) |
initial commit
git-svn-id: http://svn.miranda-ng.org/main/trunk@2 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/mTextControl/src/FormattedTextDraw.h')
-rw-r--r-- | plugins/mTextControl/src/FormattedTextDraw.h | 193 |
1 files changed, 193 insertions, 0 deletions
diff --git a/plugins/mTextControl/src/FormattedTextDraw.h b/plugins/mTextControl/src/FormattedTextDraw.h new file mode 100644 index 0000000000..06a939c160 --- /dev/null +++ b/plugins/mTextControl/src/FormattedTextDraw.h @@ -0,0 +1,193 @@ +// 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_
+
+// be sure to link this project with riched20.lib
+#ifndef LY_PER_INCH
+#define LY_PER_INCH 1440
+#define HOST_BORDER 0
+#endif
+
+typedef struct tagCOOKIE
+{
+ bool isUnicode;
+ union
+ {
+ char *ansi;
+ WCHAR *unicode;
+ };
+ DWORD dwSize;
+ DWORD dwCount;
+} COOKIE, *PCOOKIE;
+
+extern HRESULT (WINAPI *MyCreateTextServices)(IUnknown *punkOuter, ITextHost *pITextHost, IUnknown **ppUnk);
+
+/////////////////////////////////////////////////////////////////////////////
+// IFormatttedTextDraw
+interface IFormattedTextDraw
+{
+public:
+ virtual ~IFormattedTextDraw() {};
+ virtual HRESULT get_NaturalSize(void *hdcDraw, long *Width, long *pVal) = 0;
+ virtual HRESULT Create() = 0;
+ virtual HRESULT Draw(void *hdcDraw, RECT *prc) = 0;
+ virtual HRESULT putRTFTextA(char *newVal) = 0;
+ virtual HRESULT putRTFTextW(WCHAR *newVal) = 0;
+ virtual HRESULT putTextA(char *newVal) = 0;
+ virtual HRESULT putTextW(WCHAR *newVal) = 0;
+
+ virtual ITextServices *getTextService() = 0;
+ virtual ITextDocument *getTextDocument() = 0;
+ virtual void setParentWnd(HWND hwnd, RECT rect) = 0;
+
+// COM-like functions
+ virtual ULONG STDMETHODCALLTYPE AddRef(void) = 0;
+ virtual ULONG STDMETHODCALLTYPE Release(void) = 0;
+};
+
+
+/////////////////////////////////////////////////////////////////////////////
+// CFormattedTextDraw
+class CFormattedTextDraw:
+ public ITextHost,
+ public IFormattedTextDraw
+{
+public:
+ CFormattedTextDraw()
+ {
+ HDC hdcScreen;
+
+ hdcScreen = GetDC(NULL);
+ nPixelsPerInchX = GetDeviceCaps(hdcScreen, LOGPIXELSX);
+ nPixelsPerInchY = GetDeviceCaps(hdcScreen, LOGPIXELSY);
+ ReleaseDC(NULL, hdcScreen);
+
+ SetRectEmpty(&m_rcClient);
+ SetRectEmpty(&m_rcViewInset);
+
+ m_pCF = (CHARFORMAT2W*) malloc(sizeof(CHARFORMAT2W));
+
+ InitDefaultCharFormat();
+ InitDefaultParaFormat();
+ m_spTextServices = NULL;
+ m_spTextDocument = NULL;
+
+ m_dwPropertyBits = TXTBIT_RICHTEXT | TXTBIT_MULTILINE | TXTBIT_WORDWRAP | TXTBIT_USECURRENTBKG;
+ m_dwScrollbar = 0;
+ m_dwMaxLength = INFINITE;
+ }
+
+ ~CFormattedTextDraw()
+ {
+ free(m_pCF);
+ if (m_spTextServices != NULL)
+ m_spTextServices->Release();
+ if (m_spTextDocument != NULL)
+ m_spTextDocument->Release();
+ }
+
+// Minimal COM functionality
+ HRESULT STDMETHODCALLTYPE QueryInterface(
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
+ {
+ *ppvObject = NULL;
+ return S_FALSE;
+ }
+
+ ULONG STDMETHODCALLTYPE AddRef(void)
+ {
+ return 0;
+ }
+
+ ULONG STDMETHODCALLTYPE Release(void)
+ {
+ return 0;
+ }
+
+// IFormattedTextDraw
+public:
+ HRESULT get_NaturalSize(void *hdcDraw, long *Width, long *pVal);
+ HRESULT Create();
+ HRESULT Draw(void *hdcDraw, RECT *prc);
+ HRESULT putRTFTextA(char *newVal);
+ HRESULT putRTFTextW(WCHAR *newVal);
+ HRESULT putTextA(char *newVal);
+ HRESULT putTextW(WCHAR *newVal);
+
+ ITextServices *getTextService() { return m_spTextServices; };
+ ITextDocument *getTextDocument() { return m_spTextDocument; };
+ virtual void setParentWnd(HWND hwnd, RECT rect) { m_hwndParent = hwnd; m_rcClient = rect; }
+
+// ITextHost
+ HDC TxGetDC();
+ INT TxReleaseDC(HDC hdc);
+ BOOL TxShowScrollBar(INT fnBar, BOOL fShow);
+ BOOL TxEnableScrollBar(INT fuSBFlags, INT fuArrowflags);
+ BOOL TxSetScrollRange(INT fnBar, LONG nMinPos, INT nMaxPos, BOOL fRedraw);
+ BOOL TxSetScrollPos(INT fnBar, INT nPos, BOOL fRedraw);
+ void TxInvalidateRect(LPCRECT prc, BOOL fMode);
+ void TxViewChange(BOOL fUpdate);
+ BOOL TxCreateCaret(HBITMAP hbmp, INT xWidth, INT yHeight);
+ BOOL TxShowCaret(BOOL fShow);
+ BOOL TxSetCaretPos(INT x, INT y);
+ BOOL TxSetTimer(UINT idTimer, UINT uTimeout);
+ void TxKillTimer(UINT idTimer);
+ void TxScrollWindowEx(INT dx, INT dy, LPCRECT lprcScroll, LPCRECT lprcClip, HRGN hrgnUpdate, LPRECT lprcUpdate, UINT fuScroll);
+ void TxSetCapture(BOOL fCapture);
+ void TxSetFocus();
+ void TxSetCursor(HCURSOR hcur, BOOL fText);
+ BOOL TxScreenToClient(LPPOINT lppt);
+ BOOL TxClientToScreen(LPPOINT lppt);
+ HRESULT TxActivate(LONG * plOldState);
+ HRESULT TxDeactivate(LONG lNewState);
+ HRESULT TxGetClientRect(LPRECT prc);
+ HRESULT TxGetViewInset(LPRECT prc);
+ HRESULT TxGetCharFormat(const CHARFORMATW **ppCF);
+ HRESULT TxGetParaFormat(const PARAFORMAT **ppPF);
+ COLORREF TxGetSysColor(int nIndex);
+ HRESULT TxGetBackStyle(TXTBACKSTYLE *pstyle);
+ HRESULT TxGetMaxLength(DWORD *plength);
+ HRESULT TxGetScrollBars(DWORD *pdwScrollBar);
+ HRESULT TxGetPasswordChar(TCHAR *pch);
+ HRESULT TxGetAcceleratorPos(LONG *pcp);
+ HRESULT TxGetExtent(LPSIZEL lpExtent);
+ HRESULT OnTxCharFormatChange(const CHARFORMATW * pcf);
+ HRESULT OnTxParaFormatChange(const PARAFORMAT * ppf);
+ HRESULT TxGetPropertyBits(DWORD dwMask, DWORD *pdwBits);
+ HRESULT TxNotify(DWORD iNotify, void *pv);
+ HIMC TxImmGetContext();
+ void TxImmReleaseContext(HIMC himc);
+ HRESULT TxGetSelectionBarWidth(LONG *lSelBarWidth);
+
+// Custom functions
+ HRESULT CharFormatFromHFONT(CHARFORMAT2W* pCF, HFONT hFont);
+ HRESULT InitDefaultCharFormat();
+ HRESULT InitDefaultParaFormat();
+ HRESULT CreateTextServicesObject();
+
+// Variables
+ 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;
+ DWORD m_dwScrollbar; // Scroll bar style
+ DWORD m_dwPropertyBits; // Property bits
+ DWORD m_dwMaxLength;
+ COOKIE m_editCookie;
+
+ ITextServices *m_spTextServices;
+ ITextDocument *m_spTextDocument;
+};
+
+#endif //__FORMATTEDTEXTDRAW_H_
|