comparison win/dw.c @ 2236:e7060d262939

Win: Switched to using Rich Edit MLE by default on Windows. Added DW_FEATURE_MLE_RICH_EDIT option to dw_feature_set() to turn it off.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Tue, 05 Jan 2021 01:52:35 +0000
parents bd642d04d7c6
children 3e9c5bff0a57
comparison
equal deleted inserted replaced
2235:bd642d04d7c6 2236:e7060d262939
37 #endif 37 #endif
38 #ifdef AEROGLASS 38 #ifdef AEROGLASS
39 #include <uxtheme.h> 39 #include <uxtheme.h>
40 #endif 40 #endif
41 #include <richedit.h> 41 #include <richedit.h>
42
43 #ifdef RICHEDIT
44 int _DW_MLE_RICH_EDIT = DW_FEATURE_UNSUPPORTED;
45 #endif
42 46
43 #define STATICCLASSNAME TEXT("STATIC") 47 #define STATICCLASSNAME TEXT("STATIC")
44 #define COMBOBOXCLASSNAME TEXT("COMBOBOX") 48 #define COMBOBOXCLASSNAME TEXT("COMBOBOX")
45 #define LISTBOXCLASSNAME TEXT("LISTBOX") 49 #define LISTBOXCLASSNAME TEXT("LISTBOX")
46 #define BUTTONCLASSNAME TEXT("BUTTON") 50 #define BUTTONCLASSNAME TEXT("BUTTON")
4876 if(!(hmsftedit = LoadLibrary(TEXT("msftedit")))) 4880 if(!(hmsftedit = LoadLibrary(TEXT("msftedit"))))
4877 { 4881 {
4878 if(!(hrichedit = LoadLibrary(TEXT("riched20")))) 4882 if(!(hrichedit = LoadLibrary(TEXT("riched20"))))
4879 hrichedit = LoadLibrary(TEXT("riched32")); 4883 hrichedit = LoadLibrary(TEXT("riched32"));
4880 } 4884 }
4885 /* Enable Rich Edit by default if supported */
4886 if(_DW_MLE_RICH_EDIT == DW_FEATURE_UNSUPPORTED && (hmsftedit || hrichedit))
4887 _DW_MLE_RICH_EDIT = DW_FEATURE_ENABLED;
4881 #endif 4888 #endif
4882 #ifdef BUILD_TOAST 4889 #ifdef BUILD_TOAST
4883 _dw_toast_init(UTF8toWide(_dw_app_name), UTF8toWide(_dw_app_id)); 4890 _dw_toast_init(UTF8toWide(_dw_app_name), UTF8toWide(_dw_app_id));
4884 #endif 4891 #endif
4885 return 0; 4892 return 0;
6944 * Parameters: 6951 * Parameters:
6945 * id: An ID to be used with dw_window_from_id() or 0L. 6952 * id: An ID to be used with dw_window_from_id() or 0L.
6946 */ 6953 */
6947 HWND API dw_mle_new(ULONG id) 6954 HWND API dw_mle_new(ULONG id)
6948 { 6955 {
6949
6950 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE, 6956 HWND tmp = CreateWindowEx(WS_EX_CLIENTEDGE,
6951 hmsftedit ? MSFTEDIT_CLASS : (hrichedit ? RICHEDIT_CLASS : EDITCLASSNAME), 6957 #ifdef RICHEDIT
6958 _DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED ? (hmsftedit ? MSFTEDIT_CLASS : (hrichedit ? RICHEDIT_CLASS : EDITCLASSNAME)) : EDITCLASSNAME,
6959 #else
6960 EDITCLASSNAME,
6961 #endif
6952 NULL, 6962 NULL,
6953 WS_VISIBLE | WS_BORDER | 6963 WS_VISIBLE | WS_BORDER |
6954 WS_VSCROLL | ES_MULTILINE | 6964 WS_VSCROLL | ES_MULTILINE |
6955 ES_WANTRETURN | WS_CHILD | 6965 ES_WANTRETURN | WS_CHILD |
6956 WS_CLIPCHILDREN, 6966 WS_CLIPCHILDREN,
6966 DestroyWindow(tmp); 6976 DestroyWindow(tmp);
6967 return NULL; 6977 return NULL;
6968 } 6978 }
6969 6979
6970 #ifdef RICHEDIT 6980 #ifdef RICHEDIT
6971 if(hrichedit || hmsftedit) 6981 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit))
6972 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _richeditwndproc); 6982 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _richeditwndproc);
6973 else 6983 else
6974 #endif 6984 #endif
6975 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _simplewndproc); 6985 cinfo->cinfo.pOldProc = SubclassWindow(tmp, _simplewndproc);
6976 cinfo->cinfo.fore = cinfo->cinfo.back = -1; 6986 cinfo->cinfo.fore = cinfo->cinfo.back = -1;
9366 * state: TRUE if it wraps, FALSE if it doesn't. 9376 * state: TRUE if it wraps, FALSE if it doesn't.
9367 */ 9377 */
9368 void API dw_mle_set_word_wrap(HWND handle, int state) 9378 void API dw_mle_set_word_wrap(HWND handle, int state)
9369 { 9379 {
9370 /* If it is a rich edit control use the rich edit message */ 9380 /* If it is a rich edit control use the rich edit message */
9371 if(hrichedit || hmsftedit) 9381 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit))
9372 { 9382 {
9373 SendMessage(handle, EM_SHOWSCROLLBAR, (WPARAM)SB_HORZ, (LPARAM)(state ? FALSE : TRUE)); 9383 SendMessage(handle, EM_SHOWSCROLLBAR, (WPARAM)SB_HORZ, (LPARAM)(state ? FALSE : TRUE));
9374 SendMessage(handle, EM_SETTARGETDEVICE, 0, state ? 0 : 1); 9384 SendMessage(handle, EM_SETTARGETDEVICE, 0, state ? 0 : 1);
9375 } 9385 }
9376 } 9386 }
9392 * point: Point to position cursor. 9402 * point: Point to position cursor.
9393 */ 9403 */
9394 void API dw_mle_set_cursor(HWND handle, int point) 9404 void API dw_mle_set_cursor(HWND handle, int point)
9395 { 9405 {
9396 SendMessage(handle, EM_SETSEL, (WPARAM)point, (LPARAM)point); 9406 SendMessage(handle, EM_SETSEL, (WPARAM)point, (LPARAM)point);
9397 if(hrichedit || hmsftedit) 9407 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit))
9398 SendMessage(handle, EM_HIDESELECTION, 0, 0); 9408 SendMessage(handle, EM_HIDESELECTION, 0, 0);
9399 SendMessage(handle, EM_SCROLLCARET, 0, 0); 9409 SendMessage(handle, EM_SCROLLCARET, 0, 0);
9400 } 9410 }
9401 9411
9402 /* 9412 /*
9436 } 9446 }
9437 9447
9438 if(retval) 9448 if(retval)
9439 { 9449 {
9440 SendMessage(handle, EM_SETSEL, (WPARAM)retval - textlen, (LPARAM)retval); 9450 SendMessage(handle, EM_SETSEL, (WPARAM)retval - textlen, (LPARAM)retval);
9441 if(hrichedit || hmsftedit) 9451 if(_DW_MLE_RICH_EDIT == DW_FEATURE_ENABLED && (hrichedit || hmsftedit))
9442 SendMessage(handle, EM_HIDESELECTION, 0, 0); 9452 SendMessage(handle, EM_HIDESELECTION, 0, 0);
9443 SendMessage(handle, EM_SCROLLCARET, 0, 0); 9453 SendMessage(handle, EM_SCROLLCARET, 0, 0);
9444 } 9454 }
9445 9455
9446 free(tmpbuf); 9456 free(tmpbuf);
13783 } 13793 }
13784 case DW_FEATURE_DARK_MODE: 13794 case DW_FEATURE_DARK_MODE:
13785 { 13795 {
13786 if(_DW_DARK_MODE_SUPPORTED) 13796 if(_DW_DARK_MODE_SUPPORTED)
13787 return _DW_DARK_MODE_ALLOWED; 13797 return _DW_DARK_MODE_ALLOWED;
13798 return DW_FEATURE_UNSUPPORTED;
13799 }
13800 #endif
13801 #ifdef RICHEDIT
13802 case DW_FEATURE_MLE_RICH_EDIT:
13803 {
13804 if(hmsftedit || hrichedit)
13805 return _DW_MLE_RICH_EDIT;
13788 return DW_FEATURE_UNSUPPORTED; 13806 return DW_FEATURE_UNSUPPORTED;
13789 } 13807 }
13790 #endif 13808 #endif
13791 default: 13809 default:
13792 return DW_FEATURE_UNSUPPORTED; 13810 return DW_FEATURE_UNSUPPORTED;
13842 return DW_ERROR_NONE; 13860 return DW_ERROR_NONE;
13843 } 13861 }
13844 return DW_ERROR_GENERAL; 13862 return DW_ERROR_GENERAL;
13845 } 13863 }
13846 #endif 13864 #endif
13865 #ifdef RICHEDIT
13866 case DW_FEATURE_MLE_RICH_EDIT:
13867 {
13868 if(state >= DW_FEATURE_DISABLED && state <= DW_FEATURE_ENABLED)
13869 {
13870 _DW_MLE_RICH_EDIT = state;
13871 return DW_ERROR_NONE;
13872 }
13873 return DW_ERROR_GENERAL;
13874 }
13875 #endif
13847 default: 13876 default:
13848 return DW_FEATURE_UNSUPPORTED; 13877 return DW_FEATURE_UNSUPPORTED;
13849 } 13878 }
13850 } 13879 }
13851 13880