+ add: edit right-to-left (RTL) mode (works only in GDI device context (DC))

This commit is contained in:
Rainer Kottenhoff 2020-08-13 00:00:31 +02:00
parent 7e395a2274
commit dbde58ff74
33 changed files with 156 additions and 91 deletions

View File

@ -660,13 +660,17 @@
#define IDM_VIEW_EVALTINYEXPRONSEL 40478
#define IDM_VIEW_UNICODE_POINTS 40479
#define IDM_SET_RENDER_TECH_DEFAULT 40500
#define IDM_SET_RENDER_TECH_D2D 40501
#define IDM_SET_RENDER_TECH_D2DRETAIN 40502
#define IDM_SET_RENDER_TECH_D2DDC 40503
#define IDM_SET_BIDIRECTIONAL_NONE 40504
#define IDM_SET_BIDIRECTIONAL_L2R 40505
#define IDM_SET_BIDIRECTIONAL_R2L 40506
// keep Scintilla(SC) order
#define IDM_SET_RENDER_TECH_GDI 40500 // SC_TECHNOLOGY_DEFAULT(0)
#define IDM_SET_RENDER_TECH_D2D 40501 // SC_TECHNOLOGY_DIRECTWRITE(1)
#define IDM_SET_RENDER_TECH_D2DRETAIN 40502 // SC_TECHNOLOGY_DIRECTWRITERETAIN(2)
#define IDM_SET_RENDER_TECH_D2DDC 40503 // SC_TECHNOLOGY_DIRECTWRITEDC(3)
#define IDM_SET_RTL_LAYOUT_EDIT 40504
#define IDM_SET_RTL_LAYOUT_DLG 40505
// keep Scintilla(SC) order
#define IDM_SET_BIDIRECTIONAL_NONE 40506 // SC_BIDIRECTIONAL_DISABLED(0)
#define IDM_SET_BIDIRECTIONAL_L2R 40507 // SC_BIDIRECTIONAL_L2R(1)
#define IDM_SET_BIDIRECTIONAL_R2L 40508 // SC_BIDIRECTIONAL_R2L(2)
#define IDM_HELP_ABOUT 40600
#define IDM_HELP_CMD 40601

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Behou", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (Geen ligature nie)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (Geen ligature nie)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectionele"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (без лігатураў)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (без лігатураў)", IDM_SET_RENDER_TECH_GDI
END
POPUP "&Накіраванне пісьма"
BEGIN

View File

@ -465,7 +465,12 @@ BEGIN
MENUITEM "&DirectWrite (Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (keine Ligaturen)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (keine Ligaturen)", IDM_SET_RENDER_TECH_GDI
END
POPUP "&RTL Layout (GDI)"
BEGIN
MENUITEM "&Editor Bereich", IDM_SET_RTL_LAYOUT_EDIT
MENUITEM "&Andere Dialoge", IDM_SET_RTL_LAYOUT_DLG
END
POPUP "&Bidirektional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectional"
BEGIN

View File

@ -465,13 +465,18 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "&RTL Layout (GDI)"
BEGIN
MENUITEM "&Edit Area", IDM_SET_RTL_LAYOUT_EDIT
MENUITEM "&Other Dialogs", IDM_SET_RTL_LAYOUT_DLG
END
POPUP "Bidirectional"
BEGIN
MENUITEM "None", IDM_SET_BIDIRECTIONAL_NONE
MENUITEM "Left to Right", IDM_SET_BIDIRECTIONAL_L2R
MENUITEM "Right to Left", IDM_SET_BIDIRECTIONAL_R2L
MENUITEM "&None", IDM_SET_BIDIRECTIONAL_NONE
MENUITEM "&Left to Right", IDM_SET_BIDIRECTIONAL_L2R
MENUITEM "&Right to Left", IDM_SET_BIDIRECTIONAL_R2L
END
END
POPUP "&Advanced Configuration"

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (sin ligaduras)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (sin ligaduras)", IDM_SET_RENDER_TECH_GDI
END
POPUP "&Bidireccional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (sin ligaduras)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (sin ligaduras)", IDM_SET_RENDER_TECH_GDI
END
POPUP "&Bidireccional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (pas de ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (pas de ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectionnelle"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (ligatúrák nélkül)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (ligatúrák nélkül)", IDM_SET_RENDER_TECH_GDI
END
POPUP "K&étirányú"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (senza legature)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (senza legature)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirezionale"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (Direct2D)(&D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite Retain(&R)", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "DirectWrite GDI DC(&W)", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "GDI (合字未対応)(&G)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "GDI (合字未対応)(&G)", IDM_SET_RENDER_TECH_GDI
END
POPUP "書字方向"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite 유지(&R)", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "GDI DC 직접 쓰기(&W)", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "GDI (합자 없음) (&G)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "GDI (합자 없음) (&G)", IDM_SET_RENDER_TECH_GDI
END
POPUP "양방향"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (geen ligaturen)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (geen ligaturen)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectionele"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (bez ligatury)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (bez ligatury)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Dwukierunkowa"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "&Reter DirectWrite", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirecional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (sem ligaturas)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (sem ligaturas)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidireccional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (без лигатур)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (без лигатур)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Направление письма"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (bez ligatúr)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (bez ligatúr)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Obojsmerne"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (inga ligaturer)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (inga ligaturer)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Dubbelriktad"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (&Direct2D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite &Retain", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "Direct&Write GDI DC", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "&GDI (no ligatures)", IDM_SET_RENDER_TECH_GDI
END
POPUP "Bidirectional"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (Direct2D) (&D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite Retain(&R)", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "DirectWrite GDI DC(&W)", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "GDI无连字(&G)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "GDI无连字(&G)", IDM_SET_RENDER_TECH_GDI
END
POPUP "双向(&B)"
BEGIN

View File

@ -465,7 +465,7 @@ BEGIN
MENUITEM "DirectWrite (Direct2D) (&D)", IDM_SET_RENDER_TECH_D2D
MENUITEM "DirectWrite Retain(&R)", IDM_SET_RENDER_TECH_D2DRETAIN
MENUITEM "DirectWrite GDI DC(&W)", IDM_SET_RENDER_TECH_D2DDC
MENUITEM "GDI無連字(&G)", IDM_SET_RENDER_TECH_DEFAULT
MENUITEM "GDI無連字(&G)", IDM_SET_RENDER_TECH_GDI
END
POPUP "雙向(&B)"
BEGIN

View File

@ -1150,10 +1150,10 @@ void LoadSettings()
IniSectionDelete(IniSecSettings2, L"SciDirectWriteTech", false); // old deprecated
bDirtyFlag = true;
}
Defaults.RenderingTechnology = clampi(Defaults.RenderingTechnology, 0, 3);
Defaults.RenderingTechnology = clampi(Defaults.RenderingTechnology, SC_TECHNOLOGY_DEFAULT, SC_TECHNOLOGY_DIRECTWRITEDC);
}
else {
Defaults.RenderingTechnology = 1; // new default DirectWrite (D2D)
Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITE; // new default DirectWrite (D2D)
}
// Settings2 deprecated
@ -1463,12 +1463,14 @@ void LoadSettings()
GET_BOOL_VALUE_FROM_INISECTION(MinimizeToTray, false);
GET_BOOL_VALUE_FROM_INISECTION(TransparentMode, false);
GET_BOOL_VALUE_FROM_INISECTION(FindReplaceTransparentMode, true);
GET_INT_VALUE_FROM_INISECTION(RenderingTechnology, Defaults.RenderingTechnology, 0, 3); // default set before
Defaults.RenderingTechnology = 1; // DirectWrite (D2D) - reset, if set by deprecated SciDirectWriteTech
GET_INT_VALUE_FROM_INISECTION(Bidirectional, Defaults.Bidirectional, 0, 2); // set before
GET_INT_VALUE_FROM_INISECTION(RenderingTechnology, Defaults.RenderingTechnology, SC_TECHNOLOGY_DEFAULT, SC_TECHNOLOGY_DIRECTWRITEDC); // default set before
Defaults.RenderingTechnology = SC_TECHNOLOGY_DIRECTWRITE; // DirectWrite (D2D) - reset, if set by deprecated SciDirectWriteTech
GET_INT_VALUE_FROM_INISECTION(Bidirectional, Defaults.Bidirectional, SC_BIDIRECTIONAL_DISABLED, SC_BIDIRECTIONAL_R2L); // set before
Defaults.Bidirectional = SC_BIDIRECTIONAL_DISABLED; // reset
GET_BOOL_VALUE_FROM_INISECTION(MuteMessageBeep, false);
GET_BOOL_VALUE_FROM_INISECTION(SplitUndoTypingSeqOnLnBreak, true);
GET_BOOL_VALUE_FROM_INISECTION(EditLayoutRTL, false);
GET_BOOL_VALUE_FROM_INISECTION(DialogsLayoutRTL, false);
///~Settings2.IMEInteraction = clampi(IniSectionGetInt(IniSecSettings, L"IMEInteraction", Settings2.IMEInteraction), SC_IME_WINDOWED, SC_IME_INLINE);
@ -1901,6 +1903,8 @@ static bool _SaveSettings(bool bForceSaveSettings)
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, Bidirectional);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, MuteMessageBeep);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SplitUndoTypingSeqOnLnBreak);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, EditLayoutRTL);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, DialogsLayoutRTL);
///~IniSectionSetInt(IniSecSettings, L"IMEInteraction", Settings2.IMEInteraction);

View File

@ -3870,14 +3870,31 @@ void AppendAdditionalTitleInfo(LPCWSTR lpszAddTitleInfo)
//
void SetWindowTransparentMode(HWND hwnd, bool bTransparentMode, int iOpacityLevel)
{
const DWORD exStyle = GetWindowExStyle(hwnd);
if (bTransparentMode) {
SetWindowLongPtr(hwnd, GWL_EXSTYLE, GetWindowLongPtr(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
// get opacity level from registry
SetWindowExStyle(hwnd, exStyle | WS_EX_LAYERED);
BYTE const bAlpha = (BYTE)MulDiv(iOpacityLevel, 255, 100);
SetLayeredWindowAttributes(hwnd, 0, bAlpha, LWA_ALPHA);
return;
}
SetWindowLongPtr(hwnd, GWL_EXSTYLE, GetWindowLongPtr(hwnd, GWL_EXSTYLE) & ~WS_EX_LAYERED);
else {
SetWindowExStyle(hwnd, exStyle & ~WS_EX_LAYERED);
}
}
//=============================================================================
//
// SetWindowLayoutRTL()
//
void SetWindowLayoutRTL(HWND hwnd, bool bRTL)
{
const DWORD exStyle = GetWindowExStyle(hwnd);
if (bRTL) {
SetWindowExStyle(hwnd, exStyle | WS_EX_LAYOUTRTL);
}
else {
SetWindowExStyle(hwnd, exStyle & ~WS_EX_LAYOUTRTL);
}
}

View File

@ -69,6 +69,7 @@ bool SetWindowTitle(HWND hwnd, UINT uIDAppName, bool bIsElevated, UINT uIDUntitl
void SetAdditionalTitleInfo(LPCWSTR lpszAddTitleInfo);
void AppendAdditionalTitleInfo(LPCWSTR lpszAddTitleInfo);
void SetWindowTransparentMode(HWND hwnd, bool bTransparentMode, int iOpacityLevel);
void SetWindowLayoutRTL(HWND hwnd, bool bRTL);
POINT GetCenterOfDlgInParent(const RECT* rcDlg, const RECT* rcParent);
HWND GetParentOrDesktop(HWND hDlg);
void CenterDlgInParent(HWND hDlg, HWND hDlgParent);

View File

@ -162,6 +162,7 @@ inline bool IsAsyncKeyDown(int key) { return (((GetAsyncKeyState(key) >> 8) & 0x
#define PostWMCommand(hwnd, id) PostMessage((hwnd), WM_COMMAND, MAKEWPARAM((id), 1), 0)
#define SetWindowStyle(hwnd, style) SetWindowLong((hwnd), GWL_STYLE, (style))
#define SetWindowExStyle(hwnd, style) SetWindowLong((hwnd), GWL_EXSTYLE, (style))
//==== StrIs(Not)Empty() =============================================
@ -309,7 +310,6 @@ void PathFixBackslashes(LPWSTR lpsz);
size_t FormatNumberStr(LPWSTR lpNumberStr, size_t cch, int fixedWidth);
bool SetDlgItemIntEx(HWND hwnd,int nIdItem,UINT uValue);
UINT GetDlgItemTextW2MB(HWND hDlg,int nIDDlgItem,LPSTR lpString,int nMaxCount);
UINT SetDlgItemTextMB2W(HWND hDlg,int nIDDlgItem,LPSTR lpString);
LRESULT ComboBox_AddStringMB2W(HWND hwnd,LPCSTR lpString);

View File

@ -212,24 +212,6 @@ const WCHAR* const TBBUTTON_DEFAULT_IDS_V1 = L"1 2 4 3 28 0 5 6 0 7 8 9 0 10 11
const WCHAR* const TBBUTTON_DEFAULT_IDS_V2 = L"1 2 4 3 28 0 5 6 0 7 8 9 0 10 11 0 30 0 12 0 24 26 0 22 23 0 13 14 0 15 0 25 0 29 0 17";
//=============================================================================
// some Mappings internal idx -> Scintilla values
static int const s_DirectWriteTechnology[4] = {
SC_TECHNOLOGY_DEFAULT
, SC_TECHNOLOGY_DIRECTWRITE
, SC_TECHNOLOGY_DIRECTWRITERETAIN
, SC_TECHNOLOGY_DIRECTWRITEDC
};
static int const s_SciBidirectional[3] = {
SC_BIDIRECTIONAL_DISABLED
, SC_BIDIRECTIONAL_L2R
, SC_BIDIRECTIONAL_R2L
};
//=============================================================================
// static method declarations
// undo / redo selections
@ -522,6 +504,16 @@ static void CALLBACK MQ_ExecuteNext(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWOR
}
//=============================================================================
//
// InvalidateStyleRedraw
//
static inline void InvalidateStyleRedraw()
{
SciCall_SetViewEOL(Settings.ViewEOLs);
}
//=============================================================================
//
// CommandLine Parsing Flags
@ -1836,15 +1828,13 @@ static void _SetWrapVisualFlags(HWND hwndEditCtrl)
//
static void _InitializeSciEditCtrl(HWND hwndEditCtrl)
{
SendMessage(hwndEditCtrl, SCI_SETTECHNOLOGY, (WPARAM)Settings.RenderingTechnology, 0);
SendMessage(hwndEditCtrl, SCI_SETBIDIRECTIONAL, (WPARAM)Settings.Bidirectional, 0); // experimental
Settings.Bidirectional = SciCall_GetBidirectional();
// Current platforms perform window buffering so it is almost always better for this option to be turned off.
// There are some older platforms and unusual modes where buffering may still be useful - so keep it ON
//~SCI_SETBUFFEREDDRAW(true); // default is true
if (Settings.RenderingTechnology > 0)
{
SendMessage(hwndEditCtrl, SCI_SETTECHNOLOGY, (WPARAM)s_DirectWriteTechnology[Settings.RenderingTechnology], 0);
SendMessage(hwndEditCtrl, SCI_SETBUFFEREDDRAW, 0, 0); // false
SendMessage(hwndEditCtrl, SCI_SETBIDIRECTIONAL, (WPARAM)s_SciBidirectional[Settings.Bidirectional], 0); // experimental
}
// There are some older platforms and unusual modes where buffering may still be useful
SendMessage(hwndEditCtrl, SCI_SETBUFFEREDDRAW, (WPARAM)(Settings.RenderingTechnology == SC_TECHNOLOGY_DEFAULT), 0);
//~SendMessage(hwndEditCtrl, SCI_SETPHASESDRAW, SC_PHASES_TWO, 0); // (= default)
SendMessage(hwndEditCtrl, SCI_SETPHASESDRAW, SC_PHASES_MULTIPLE, 0);
//~SendMessage(hwndEditCtrl, SCI_SETLAYOUTCACHE, SC_CACHE_PAGE, 0);
@ -1852,6 +1842,8 @@ static void _InitializeSciEditCtrl(HWND hwndEditCtrl)
//~SendMessage(hwndEditCtrl, SCI_SETPOSITIONCACHE, 1024, 0); // default = 1024
SendMessage(hwndEditCtrl, SCI_SETPOSITIONCACHE, 4096, 0);
SetWindowLayoutRTL(hwndEditCtrl, Settings.EditLayoutRTL);
// The possible notification types are the same as the modificationType bit flags used by SCN_MODIFIED:
// SC_MOD_INSERTTEXT, SC_MOD_DELETETEXT, SC_MOD_CHANGESTYLE, SC_MOD_CHANGEFOLD, SC_PERFORMED_USER,
// SC_PERFORMED_UNDO, SC_PERFORMED_REDO, SC_MULTISTEPUNDOREDO, SC_LASTSTEPINUNDOREDO, SC_MOD_CHANGEMARKER,
@ -3523,10 +3515,18 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
CheckCmd(hmenu, IDM_VIEW_MINTOTRAY, Settings.MinimizeToTray);
CheckCmd(hmenu, IDM_VIEW_TRANSPARENT, Settings.TransparentMode);
i = IDM_SET_RENDER_TECH_DEFAULT + Settings.RenderingTechnology;
CheckMenuRadioItem(hmenu, IDM_SET_RENDER_TECH_DEFAULT, IDM_SET_RENDER_TECH_D2DDC, i, MF_BYCOMMAND);
if (Settings.RenderingTechnology > 0) {
bool const dwr = (Settings.RenderingTechnology > SC_TECHNOLOGY_DEFAULT);
//bool const gdi = ((Settings.RenderingTechnology % SC_TECHNOLOGY_DIRECTWRITEDC) == 0);
i = IDM_SET_RENDER_TECH_GDI + Settings.RenderingTechnology;
CheckMenuRadioItem(hmenu, IDM_SET_RENDER_TECH_GDI, IDM_SET_RENDER_TECH_D2DDC, i, MF_BYCOMMAND);
CheckCmd(hmenu, IDM_SET_RTL_LAYOUT_EDIT, Settings.EditLayoutRTL);
//EnableCmd(hmenu, IDM_SET_RTL_LAYOUT_EDIT, gdi);
//CheckCmd(hmenu, IDM_SET_RTL_LAYOUT_DLG, Settings.DialogsLayoutRTL);
EnableCmd(hmenu, IDM_SET_RTL_LAYOUT_DLG, false);
if (dwr) {
i = IDM_SET_BIDIRECTIONAL_NONE + Settings.Bidirectional;
CheckMenuRadioItem(hmenu, IDM_SET_BIDIRECTIONAL_NONE, IDM_SET_BIDIRECTIONAL_R2L, i, MF_BYCOMMAND);
}
@ -3534,9 +3534,10 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
i = IDM_SET_BIDIRECTIONAL_NONE;
CheckMenuRadioItem(hmenu, IDM_SET_BIDIRECTIONAL_NONE, IDM_SET_BIDIRECTIONAL_R2L, i, MF_BYCOMMAND);
}
EnableCmd(hmenu, IDM_SET_BIDIRECTIONAL_NONE, (Settings.RenderingTechnology > 0));
EnableCmd(hmenu, IDM_SET_BIDIRECTIONAL_L2R, (Settings.RenderingTechnology > 0));
EnableCmd(hmenu, IDM_SET_BIDIRECTIONAL_R2L, (Settings.RenderingTechnology > 0));
EnableCmd(hmenu, IDM_SET_BIDIRECTIONAL_NONE, dwr);
EnableCmd(hmenu, IDM_SET_BIDIRECTIONAL_L2R, dwr);
EnableCmd(hmenu, IDM_SET_BIDIRECTIONAL_R2L, dwr);
CheckCmd(hmenu, IDM_VIEW_MUTE_MESSAGEBEEP, Settings.MuteMessageBeep);
CheckCmd(hmenu, IDM_VIEW_SAVEBEFORERUNNINGTOOLS, Settings.SaveBeforeRunningTools);
@ -5266,12 +5267,12 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
case IDM_VIEW_SHOWBLANKS:
Settings.ViewWhiteSpace = !Settings.ViewWhiteSpace;
SendMessage(Globals.hwndEdit,SCI_SETVIEWWS,(Settings.ViewWhiteSpace)?SCWS_VISIBLEALWAYS:SCWS_INVISIBLE,0);
SciCall_SetViewWS(Settings.ViewWhiteSpace ? SCWS_VISIBLEALWAYS : SCWS_INVISIBLE);
break;
case IDM_VIEW_SHOWEOLS:
Settings.ViewEOLs = !Settings.ViewEOLs;
SendMessage(Globals.hwndEdit,SCI_SETVIEWEOL,Settings.ViewEOLs,0);
SciCall_SetViewEOL(Settings.ViewEOLs);
break;
case IDM_VIEW_MATCHBRACES:
@ -5507,26 +5508,46 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
break;
case IDM_SET_RENDER_TECH_DEFAULT:
case IDM_SET_RENDER_TECH_GDI:
case IDM_SET_RENDER_TECH_D2D:
case IDM_SET_RENDER_TECH_D2DRETAIN:
case IDM_SET_RENDER_TECH_D2DDC:
Settings.RenderingTechnology = iLoWParam - IDM_SET_RENDER_TECH_DEFAULT;
if (Settings.RenderingTechnology == 0) {
SciCall_SetBidirectional(s_SciBidirectional[0]);
{
int const prevRT = Settings.RenderingTechnology;
Settings.RenderingTechnology = (iLoWParam - IDM_SET_RENDER_TECH_GDI);
SciCall_SetTechnology(Settings.RenderingTechnology);
Settings.RenderingTechnology = SciCall_GetTechnology();
SciCall_SetBufferedDraw(Settings.RenderingTechnology == SC_TECHNOLOGY_DEFAULT);
int const prevBD = Settings.Bidirectional;
SciCall_SetBidirectional(Settings.Bidirectional);
Settings.Bidirectional = SciCall_GetBidirectional();
if ((prevRT != Settings.RenderingTechnology) || (prevBD != Settings.Bidirectional)) {
UpdateMarginWidth();
}
}
SciCall_SetBufferedDraw((Settings.RenderingTechnology == 0));
SciCall_SetTechnology(s_DirectWriteTechnology[Settings.RenderingTechnology]);
break;
case IDM_SET_RTL_LAYOUT_EDIT:
Settings.EditLayoutRTL = !Settings.EditLayoutRTL;
SetWindowLayoutRTL(Globals.hwndEdit, Settings.EditLayoutRTL);
InvalidateStyleRedraw();
break;
case IDM_SET_RTL_LAYOUT_DLG:
Settings.DialogsLayoutRTL = !Settings.DialogsLayoutRTL;
break;
case IDM_SET_BIDIRECTIONAL_NONE:
case IDM_SET_BIDIRECTIONAL_L2R:
case IDM_SET_BIDIRECTIONAL_R2L:
Settings.Bidirectional = iLoWParam - IDM_SET_BIDIRECTIONAL_NONE;
SciCall_SetBidirectional(s_SciBidirectional[Settings.Bidirectional]);
{
SciCall_SetBidirectional(iLoWParam - IDM_SET_BIDIRECTIONAL_NONE);
Settings.Bidirectional = SciCall_GetBidirectional();
}
break;
case IDM_VIEW_MUTE_MESSAGEBEEP:
Settings.MuteMessageBeep = !Settings.MuteMessageBeep;
break;

View File

@ -399,7 +399,10 @@ DeclareSciCallV2(SetHotspotActiveBack, SETHOTSPOTACTIVEBACK, bool, useSetting, i
DeclareSciCallV1(SetHotspotActiveUnderline, SETHOTSPOTACTIVEUNDERLINE, bool, underline)
DeclareSciCallV1(SetHotspotSigleLine, SETHOTSPOTSINGLELINE, bool, singleline)
//=============================================================================
DeclareSciCallV1(SetViewWS, SETVIEWWS, int, wspc)
DeclareSciCallV1(SetViewEOL, SETVIEWEOL, bool, eols)
//=============================================================================
//
// Indentation Guides and Wraping
//
@ -556,8 +559,11 @@ DeclareSciCallV1(SetUndoCollection, SETUNDOCOLLECTION, bool, bCollectUndo)
// SetTechnology
//
DeclareSciCallV1(SetBufferedDraw, SETBUFFEREDDRAW, bool, value)
DeclareSciCallR0(GetTechnology, GETTECHNOLOGY, int)
DeclareSciCallV1(SetTechnology, SETTECHNOLOGY, int, technology)
DeclareSciCallR0(GetBidirectional, GETBIDIRECTIONAL, int)
DeclareSciCallV1(SetBidirectional, SETBIDIRECTIONAL, int, direction)
DeclareSciCallV1(SetCharacterCategoryOptimization, SETCHARACTERCATEGORYOPTIMIZATION, int, count)
//=============================================================================

View File

@ -460,7 +460,9 @@ typedef struct _settings_t
int CustomSchemesDlgPosY;
bool MuteMessageBeep;
bool SplitUndoTypingSeqOnLnBreak;
bool EditLayoutRTL;
bool DialogsLayoutRTL;
RECT PrintMargin;
EDITFINDREPLACE EFR_Data;
WCHAR OpenWithDir[MAX_PATH];