Fix and improve DPI handling in wxStyledTextCtrl.

Fix cursor size after DPI change.

Enable handling DPI events in wxSTCPopupWindow and other popup windows
(that do not inherit from wxTopLevelWindow).

Some cleanup of STC example, and add option to select drawing
technology.

See https://github.com/wxWidgets/wxWidgets/pull/1885
This commit is contained in:
Vadim Zeitlin
2020-06-09 23:56:37 +02:00
17 changed files with 254 additions and 227 deletions

View File

@@ -24,11 +24,6 @@
//============================================================================
#define DEFAULT_LANGUAGE "<default>"
#define PAGE_COMMON _("Common")
#define PAGE_LANGUAGES _("Languages")
#define PAGE_STYLE_TYPES _("Style types")
#define STYLE_TYPES_COUNT 32
@@ -47,7 +42,6 @@ enum {
myID_REPLACENEXT,
myID_BRACEMATCH,
myID_GOTO,
myID_PAGEACTIVE,
myID_DISPLAYEOL,
myID_INDENTGUIDE,
myID_LINENUMBER,
@@ -76,29 +70,18 @@ enum {
myID_MULTIPLE_SELECTIONS,
myID_MULTI_PASTE,
myID_MULTIPLE_SELECTIONS_TYPING,
myID_TECHNOLOGY_DEFAULT,
myID_TECHNOLOGY_DIRECTWRITE,
myID_CUSTOM_POPUP,
myID_USECHARSET,
myID_CHARSETANSI,
myID_CHARSETMAC,
myID_PAGEPREV,
myID_PAGENEXT,
myID_SELECTLINE,
myID_EDIT_LAST = myID_SELECTLINE,
myID_WINDOW_MINIMAL,
// other IDs
myID_STATUSBAR,
myID_TITLEBAR,
myID_ABOUTTIMER,
myID_UPDATETIMER,
// dialog find IDs
myID_DLG_FIND_TEXT,
// preferences IDs
myID_PREFS_LANGUAGE,
myID_PREFS_STYLETYPE,
myID_PREFS_KEYWORDS,
};
// ----------------------------------------------------------------------------

View File

@@ -128,6 +128,8 @@ wxBEGIN_EVENT_TABLE (Edit, wxStyledTextCtrl)
EVT_MENU(myID_MULTI_PASTE, Edit::OnMultiPaste)
EVT_MENU(myID_MULTIPLE_SELECTIONS_TYPING, Edit::OnMultipleSelectionsTyping)
EVT_MENU(myID_CUSTOM_POPUP, Edit::OnCustomPopup)
EVT_MENU(myID_TECHNOLOGY_DEFAULT, Edit::OnTechnology)
EVT_MENU(myID_TECHNOLOGY_DIRECTWRITE, Edit::OnTechnology)
// stc
EVT_STC_MARGINCLICK (wxID_ANY, Edit::OnMarginClick)
EVT_STC_CHARADDED (wxID_ANY, Edit::OnCharAdded)
@@ -196,7 +198,7 @@ Edit::Edit (wxWindow *parent, wxWindowID id,
// miscellaneous
m_LineNrMargin = TextWidth (wxSTC_STYLE_LINENUMBER, "_999999");
m_FoldingMargin = 16;
m_FoldingMargin = FromDIP(16);
CmdKeyClear (wxSTC_KEY_TAB, 0); // this is done by the menu accelerator key
SetLayoutCache (wxSTC_CACHE_PAGE);
UsePopUp(wxSTC_POPUP_ALL);
@@ -480,6 +482,11 @@ void Edit::OnCustomPopup(wxCommandEvent& evt)
UsePopUp(evt.IsChecked() ? wxSTC_POPUP_NEVER : wxSTC_POPUP_ALL);
}
void Edit::OnTechnology(wxCommandEvent& event)
{
SetTechnology(event.GetId() == myID_TECHNOLOGY_DIRECTWRITE ? wxSTC_TECHNOLOGY_DIRECTWRITE : wxSTC_TECHNOLOGY_DEFAULT);
}
//! misc
void Edit::OnMarginClick (wxStyledTextEvent &event) {
if (event.GetMargin() == 2) {

View File

@@ -102,6 +102,7 @@ public:
void OnMultiPaste(wxCommandEvent& event);
void OnMultipleSelectionsTyping(wxCommandEvent& event);
void OnCustomPopup(wxCommandEvent& evt);
void OnTechnology(wxCommandEvent& event);
// stc
void OnMarginClick (wxStyledTextEvent &event);
void OnCharAdded (wxStyledTextEvent &event);
@@ -115,7 +116,6 @@ public:
//! language/lexer
wxString DeterminePrefs (const wxString &filename);
bool InitializePrefs (const wxString &filename);
bool UserSettings (const wxString &filename);
LanguageInfo const* GetLanguageInfo () {return m_language;}
//! load/save file

View File

@@ -63,12 +63,6 @@
#define APP_LICENCE "wxWidgets"
#define APP_VERSION "0.1.alpha"
#define APP_BUILD __DATE__
#define APP_WEBSITE "http://www.wxWidgets.org"
#define APP_MAIL "mailto://???"
#define NONAME _("<untitled>")
class AppBook;
@@ -132,12 +126,8 @@ public:
void OnClose (wxCloseEvent &event);
void OnAbout (wxCommandEvent &event);
void OnExit (wxCommandEvent &event);
void OnTimerEvent (wxTimerEvent &event);
//! file
void OnFileNew (wxCommandEvent &event);
void OnFileNewFrame (wxCommandEvent &event);
void OnFileOpen (wxCommandEvent &event);
void OnFileOpenFrame (wxCommandEvent &event);
void OnFileSave (wxCommandEvent &event);
void OnFileSaveAs (wxCommandEvent &event);
void OnFileClose (wxCommandEvent &event);
@@ -582,12 +572,17 @@ void AppFrame::CreateMenu ()
menuExtra->AppendCheckItem(myID_MULTI_PASTE, _("Toggle multi-&paste"));
menuExtra->AppendCheckItem(myID_MULTIPLE_SELECTIONS_TYPING, _("Toggle t&yping on multiple selections"));
menuExtra->AppendSeparator();
menuExtra->AppendCheckItem (myID_CUSTOM_POPUP, _("C&ustom popup menu"));
#if defined(__WXMSW__) && wxUSE_GRAPHICS_DIRECT2D
wxMenu* menuTechnology = new wxMenu;
menuTechnology->AppendRadioItem(myID_TECHNOLOGY_DEFAULT, _("&Default"));
menuTechnology->AppendRadioItem(myID_TECHNOLOGY_DIRECTWRITE, _("Direct&Write"));
menuExtra->AppendSubMenu(menuTechnology, _("&Technology"));
menuExtra->AppendSeparator();
#endif
menuExtra->AppendCheckItem (myID_CUSTOM_POPUP, _("C&ustom context menu"));
// Window menu
wxMenu *menuWindow = new wxMenu;
menuWindow->Append (myID_PAGEPREV, _("&Previous\tCtrl+Shift+Tab"));
menuWindow->Append (myID_PAGENEXT, _("&Next\tCtrl+Tab"));
menuWindow->Append(myID_WINDOW_MINIMAL, _("&Minimal editor"));
// Help menu
@@ -763,7 +758,7 @@ public:
}
virtual bool SetFont(const wxFont& font) wxOVERRIDE
{
StyleSetFont(wxSTC_STYLE_DEFAULT, (wxFont&)font);
StyleSetFont(wxSTC_STYLE_DEFAULT, font);
return wxStyledTextCtrl::SetFont(font);
}
void SetLexerXml()
@@ -823,7 +818,7 @@ public:
MinimalEditorFrame() : wxFrame(NULL, wxID_ANY, _("Minimal Editor"))
{
MinimalEditor* editor = new MinimalEditor(this);
editor->SetFont(wxSystemSettings::GetFont(wxSYS_ANSI_FIXED_FONT));
editor->SetFont(wxFontInfo().Family(wxFONTFAMILY_TELETYPE));
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(editor, 1, wxEXPAND);
SetSizer(sizer);