Attempt at using inkedit control for wxTextCtrl, when PC is tablet enabled. Currently
doesn't behave properly but is a first step. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@37357 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -255,6 +255,14 @@
|
|||||||
# define wxUSE_MEDIACTRL 0
|
# define wxUSE_MEDIACTRL 0
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
|
# if wxUSE_INKEDIT
|
||||||
|
# ifdef wxABORT_ON_CONFIG_ERROR
|
||||||
|
# error "wxUSE_INKEDIT requires wxUSE_DYNLIB_CLASS"
|
||||||
|
# else
|
||||||
|
# undef wxUSE_INKEDIT
|
||||||
|
# define wxUSE_INKEDIT 0
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
#endif /* wxUSE_DYNLIB_CLASS */
|
#endif /* wxUSE_DYNLIB_CLASS */
|
||||||
|
|
||||||
#endif /* _WX_MSW_CHKCONF_H_ */
|
#endif /* _WX_MSW_CHKCONF_H_ */
|
||||||
|
@@ -158,6 +158,12 @@ public:
|
|||||||
virtual bool SetForegroundColour(const wxColour& colour);
|
virtual bool SetForegroundColour(const wxColour& colour);
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT && wxUSE_RICHEDIT
|
||||||
|
bool IsInkEdit() const { return m_isInkEdit != 0; }
|
||||||
|
#else
|
||||||
|
bool IsInkEdit() const { return false; }
|
||||||
|
#endif
|
||||||
|
|
||||||
virtual void AdoptAttributesFromHWND();
|
virtual void AdoptAttributesFromHWND();
|
||||||
|
|
||||||
virtual bool AcceptsFocus() const;
|
virtual bool AcceptsFocus() const;
|
||||||
@@ -260,6 +266,11 @@ private:
|
|||||||
wxMenu* m_privateContextMenu;
|
wxMenu* m_privateContextMenu;
|
||||||
|
|
||||||
bool m_isNativeCaretShown;
|
bool m_isNativeCaretShown;
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT && wxUSE_RICHEDIT
|
||||||
|
int m_isInkEdit;
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -39,6 +39,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "wx/module.h"
|
#include "wx/module.h"
|
||||||
|
#include "wx/sysopt.h"
|
||||||
|
|
||||||
#if wxUSE_CLIPBOARD
|
#if wxUSE_CLIPBOARD
|
||||||
#include "wx/clipbrd.h"
|
#include "wx/clipbrd.h"
|
||||||
@@ -60,6 +61,10 @@
|
|||||||
|
|
||||||
#if wxUSE_RICHEDIT
|
#if wxUSE_RICHEDIT
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
#include "wx/dynlib.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// old mingw32 has richedit stuff directly in windows.h and doesn't have
|
// old mingw32 has richedit stuff directly in windows.h and doesn't have
|
||||||
// richedit.h at all
|
// richedit.h at all
|
||||||
#if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__)
|
#if !defined(__GNUWIN32_OLD__) || defined(__CYGWIN10__)
|
||||||
@@ -94,15 +99,30 @@ public:
|
|||||||
// load the richedit DLL for the specified version of rich edit
|
// load the richedit DLL for the specified version of rich edit
|
||||||
static bool Load(Version version);
|
static bool Load(Version version);
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
// load the InkEdit library
|
||||||
|
static bool LoadInkEdit();
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// the handles to richedit 1.0 and 2.0 (or 3.0) DLLs
|
// the handles to richedit 1.0 and 2.0 (or 3.0) DLLs
|
||||||
static HINSTANCE ms_hRichEdit[Version_Max];
|
static HINSTANCE ms_hRichEdit[Version_Max];
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
static wxDynamicLibrary ms_inkEditLib;
|
||||||
|
static bool ms_inkEditLibLoadAttemped;
|
||||||
|
#endif
|
||||||
|
|
||||||
DECLARE_DYNAMIC_CLASS(wxRichEditModule)
|
DECLARE_DYNAMIC_CLASS(wxRichEditModule)
|
||||||
};
|
};
|
||||||
|
|
||||||
HINSTANCE wxRichEditModule::ms_hRichEdit[Version_Max] = { NULL, NULL, NULL };
|
HINSTANCE wxRichEditModule::ms_hRichEdit[Version_Max] = { NULL, NULL, NULL };
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
wxDynamicLibrary wxRichEditModule::ms_inkEditLib;
|
||||||
|
bool wxRichEditModule::ms_inkEditLibLoadAttemped = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxRichEditModule, wxModule)
|
IMPLEMENT_DYNAMIC_CLASS(wxRichEditModule, wxModule)
|
||||||
|
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
@@ -252,6 +272,10 @@ void wxTextCtrl::Init()
|
|||||||
m_verRichEdit = 0;
|
m_verRichEdit = 0;
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT && wxUSE_RICHEDIT
|
||||||
|
m_isInkEdit = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
m_privateContextMenu = NULL;
|
m_privateContextMenu = NULL;
|
||||||
m_updatesCount = -1;
|
m_updatesCount = -1;
|
||||||
m_isNativeCaretShown = true;
|
m_isNativeCaretShown = true;
|
||||||
@@ -321,6 +345,29 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
|
|||||||
m_verRichEdit = m_windowStyle & wxTE_RICH2 ? 2 : 1;
|
m_verRichEdit = m_windowStyle & wxTE_RICH2 ? 2 : 1;
|
||||||
#endif // wxUSE_UNICODE/!wxUSE_UNICODE
|
#endif // wxUSE_UNICODE/!wxUSE_UNICODE
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
// First test if we can load an ink edit control. Normally, all edit
|
||||||
|
// controls will be made ink edit controls if a tablet environment is
|
||||||
|
// found (or if msw.inkedit != 0 and the InkEd.dll is present).
|
||||||
|
// However, an application can veto ink edit controls by either specifying
|
||||||
|
// msw.inkedit = 0 or by removing wxTE_RICH[2] from the style.
|
||||||
|
|
||||||
|
if ((wxSystemSettings::HasFeature(wxSYS_TABLET_PRESENT) || wxSystemOptions::GetOptionInt(wxT("msw.inkedit")) != 0) &&
|
||||||
|
!(wxSystemOptions::HasOption(wxT("msw.inkedit")) && wxSystemOptions::GetOptionInt(wxT("msw.inkedit")) == 0))
|
||||||
|
{
|
||||||
|
if (wxRichEditModule::LoadInkEdit())
|
||||||
|
{
|
||||||
|
windowClass = INKEDIT_CLASS;
|
||||||
|
m_isInkEdit = 1;
|
||||||
|
|
||||||
|
// Fake rich text version for other calls
|
||||||
|
m_verRichEdit = 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!m_isInkEdit)
|
||||||
|
{
|
||||||
if ( m_verRichEdit == 2 )
|
if ( m_verRichEdit == 2 )
|
||||||
{
|
{
|
||||||
if ( wxRichEditModule::Load(wxRichEditModule::Version_41) )
|
if ( wxRichEditModule::Load(wxRichEditModule::Version_41) )
|
||||||
@@ -364,6 +411,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
|
|||||||
m_verRichEdit = 0;
|
m_verRichEdit = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} // !useInkEdit
|
||||||
}
|
}
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
@@ -382,13 +430,25 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
#if wxUSE_RICHEDIT
|
#if wxUSE_RICHEDIT
|
||||||
if ( IsRich() )
|
if (IsRich())
|
||||||
{
|
{
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
if (IsInkEdit())
|
||||||
|
{
|
||||||
|
// Pass IEM_InsertText (0) as wParam, in order to have the ink always
|
||||||
|
// converted to text.
|
||||||
|
::SendMessage(GetHwnd(), EM_SETINKINSERTMODE, 0, 0);
|
||||||
|
|
||||||
|
// Make sure the mouse can be used for input
|
||||||
|
::SendMessage(GetHwnd(), EM_SETUSEMOUSEFORINPUT, 1, 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// enable the events we're interested in: we want to get EN_CHANGE as
|
// enable the events we're interested in: we want to get EN_CHANGE as
|
||||||
// for the normal controls
|
// for the normal controls
|
||||||
LPARAM mask = ENM_CHANGE;
|
LPARAM mask = ENM_CHANGE;
|
||||||
|
|
||||||
if ( GetRichVersion() == 1 )
|
if (GetRichVersion() == 1 && !IsInkEdit())
|
||||||
{
|
{
|
||||||
// we also need EN_MSGFILTER for richedit 1.0 for the reasons
|
// we also need EN_MSGFILTER for richedit 1.0 for the reasons
|
||||||
// explained in its handler
|
// explained in its handler
|
||||||
@@ -2660,6 +2720,10 @@ void wxRichEditModule::OnExit()
|
|||||||
ms_hRichEdit[i] = NULL;
|
ms_hRichEdit[i] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
if (ms_inkEditLib.IsLoaded())
|
||||||
|
ms_inkEditLib.Unload();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
@@ -2699,6 +2763,23 @@ bool wxRichEditModule::Load(Version version)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if wxUSE_INKEDIT
|
||||||
|
// load the InkEdit library
|
||||||
|
bool wxRichEditModule::LoadInkEdit()
|
||||||
|
{
|
||||||
|
static wxDynamicLibrary ms_inkEditLib;
|
||||||
|
static bool ms_inkEditLibLoadAttemped;
|
||||||
|
if (ms_inkEditLibLoadAttemped)
|
||||||
|
ms_inkEditLib.IsLoaded();
|
||||||
|
|
||||||
|
ms_inkEditLibLoadAttemped = true;
|
||||||
|
|
||||||
|
wxLogNull logNull;
|
||||||
|
return ms_inkEditLib.Load(wxT("inked"));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif // wxUSE_RICHEDIT
|
#endif // wxUSE_RICHEDIT
|
||||||
|
|
||||||
#endif // wxUSE_TEXTCTRL && !(__SMARTPHONE__ && __WXWINCE__)
|
#endif // wxUSE_TEXTCTRL && !(__SMARTPHONE__ && __WXWINCE__)
|
||||||
|
Reference in New Issue
Block a user