mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-22 13:24:42 +02:00
- Fix: when search field is not empty, Function List's background color does not follow Npp theme. - Fix: close button and textual search box now scale in high-dpi. - Fix: icons' image not centered in icons' rectangle. - Fix: when double-clicking the panel's toolbar, it briefly displayed a dialog to customize icons, but we can't use it there. Known issues: - I couldn't made toolbar icon images scale properly in high-dpi; I imagine they need to be in a ImageList, something I don't know how to use. - TreeView icons should also be scaled, and I've done it, but they displayed strange gray background, so I decided to leave it as is now. - It would be better to wrap icons when they don't fit in panel's width, but I don't know how to refresh the toolbar properly.
This commit is contained in:
parent
d8acff80d0
commit
bd6d650e8a
@ -91,6 +91,9 @@ DockingCont::DockingCont()
|
|||||||
_captionGapDynamic = NppParameters::getInstance()->_dpiManager.scaleY(_captionGapDynamic);
|
_captionGapDynamic = NppParameters::getInstance()->_dpiManager.scaleY(_captionGapDynamic);
|
||||||
_closeButtonPosLeftDynamic = NppParameters::getInstance()->_dpiManager.scaleX(_closeButtonPosLeftDynamic);
|
_closeButtonPosLeftDynamic = NppParameters::getInstance()->_dpiManager.scaleX(_closeButtonPosLeftDynamic);
|
||||||
_closeButtonPosTopDynamic = NppParameters::getInstance()->_dpiManager.scaleY(_closeButtonPosTopDynamic);
|
_closeButtonPosTopDynamic = NppParameters::getInstance()->_dpiManager.scaleY(_closeButtonPosTopDynamic);
|
||||||
|
|
||||||
|
_closeButtonWidth = NppParameters::getInstance()->_dpiManager.scaleX(12); // bitmap image is 12x12
|
||||||
|
_closeButtonHeight = NppParameters::getInstance()->_dpiManager.scaleY(12);
|
||||||
}
|
}
|
||||||
|
|
||||||
DockingCont::~DockingCont()
|
DockingCont::~DockingCont()
|
||||||
@ -569,9 +572,9 @@ void DockingCont::drawCaptionItem(DRAWITEMSTRUCT *pDrawItemStruct)
|
|||||||
|
|
||||||
// select correct bitmap
|
// select correct bitmap
|
||||||
if ((_isMouseOver == TRUE) && (_isMouseDown == TRUE))
|
if ((_isMouseOver == TRUE) && (_isMouseDown == TRUE))
|
||||||
hBmpCur = ::LoadBitmap(_hInst, MAKEINTRESOURCE(IDB_CLOSE_DOWN));
|
hBmpCur = (HBITMAP)::LoadImage(_hInst, MAKEINTRESOURCE(IDB_CLOSE_DOWN), IMAGE_BITMAP, _closeButtonWidth, _closeButtonHeight, 0);
|
||||||
else
|
else
|
||||||
hBmpCur = ::LoadBitmap(_hInst, MAKEINTRESOURCE(IDB_CLOSE_UP));
|
hBmpCur = (HBITMAP)::LoadImage(_hInst, MAKEINTRESOURCE(IDB_CLOSE_UP), IMAGE_BITMAP, _closeButtonWidth, _closeButtonHeight, 0);
|
||||||
|
|
||||||
// blit bitmap into the destination
|
// blit bitmap into the destination
|
||||||
::GetObject(hBmpCur, sizeof(bmp), &bmp);
|
::GetObject(hBmpCur, sizeof(bmp), &bmp);
|
||||||
@ -608,7 +611,7 @@ eMousePos DockingCont::isInRect(HWND hwnd, int x, int y)
|
|||||||
{
|
{
|
||||||
ret = posCaption;
|
ret = posCaption;
|
||||||
}
|
}
|
||||||
else if ((x > rc.right - (12 + _closeButtonPosLeftDynamic)) && (x < (rc.right - _closeButtonPosLeftDynamic)) &&
|
else if ((x > rc.right - (_closeButtonWidth + _closeButtonPosLeftDynamic)) && (x < (rc.right - _closeButtonPosLeftDynamic)) &&
|
||||||
(y >(rc.top + _closeButtonPosTopDynamic)) && (y < (rc.bottom - _closeButtonPosTopDynamic)))
|
(y >(rc.top + _closeButtonPosTopDynamic)) && (y < (rc.bottom - _closeButtonPosTopDynamic)))
|
||||||
{
|
{
|
||||||
ret = posClose;
|
ret = posClose;
|
||||||
@ -621,7 +624,7 @@ eMousePos DockingCont::isInRect(HWND hwnd, int x, int y)
|
|||||||
ret = posCaption;
|
ret = posCaption;
|
||||||
}
|
}
|
||||||
else if ((x > rc.left + _closeButtonPosLeftDynamic) && (x < rc.right - _closeButtonPosLeftDynamic) &&
|
else if ((x > rc.left + _closeButtonPosLeftDynamic) && (x < rc.right - _closeButtonPosLeftDynamic) &&
|
||||||
(y >(rc.top + _closeButtonPosTopDynamic)) && (y < (rc.top + (12 + _closeButtonPosLeftDynamic))))
|
(y >(rc.top + _closeButtonPosTopDynamic)) && (y < (rc.top + (_closeButtonHeight + _closeButtonPosLeftDynamic))))
|
||||||
{
|
{
|
||||||
ret = posClose;
|
ret = posClose;
|
||||||
}
|
}
|
||||||
|
@ -236,6 +236,8 @@ private:
|
|||||||
int _captionGapDynamic = CAPTION_GAP;
|
int _captionGapDynamic = CAPTION_GAP;
|
||||||
int _closeButtonPosLeftDynamic = CLOSEBTN_POS_LEFT;
|
int _closeButtonPosLeftDynamic = CLOSEBTN_POS_LEFT;
|
||||||
int _closeButtonPosTopDynamic = CLOSEBTN_POS_TOP;
|
int _closeButtonPosTopDynamic = CLOSEBTN_POS_TOP;
|
||||||
|
int _closeButtonWidth;
|
||||||
|
int _closeButtonHeight;
|
||||||
|
|
||||||
// data of added windows
|
// data of added windows
|
||||||
std::vector<tTbData *> _vTbData;
|
std::vector<tTbData *> _vTbData;
|
||||||
|
@ -565,11 +565,19 @@ INT_PTR CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
|
|
||||||
case WM_INITDIALOG :
|
case WM_INITDIALOG :
|
||||||
{
|
{
|
||||||
int editWidth = 100;
|
int editWidth = NppParameters::getInstance()->_dpiManager.scaleX(100);
|
||||||
int editHeight = 20;
|
int editWidthSep = NppParameters::getInstance()->_dpiManager.scaleX(105); //editWidth + 5
|
||||||
|
int editHeight = NppParameters::getInstance()->_dpiManager.scaleY(20);
|
||||||
|
int iconSizeX = NppParameters::getInstance()->_dpiManager.scaleX(16);
|
||||||
|
int iconSizeY = NppParameters::getInstance()->_dpiManager.scaleY(16);
|
||||||
// Create toolbar menu
|
// Create toolbar menu
|
||||||
//int style = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS |TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_NODIVIDER;
|
//int style = WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | TBSTYLE_TOOLTIPS |TBSTYLE_FLAT | CCS_TOP | BTNS_AUTOSIZE | CCS_NOPARENTALIGN | CCS_NORESIZE | CCS_NODIVIDER;
|
||||||
int style = WS_CHILD | WS_VISIBLE | CCS_ADJUSTABLE | TBSTYLE_AUTOSIZE | TBSTYLE_FLAT | TBSTYLE_LIST | TBSTYLE_TRANSPARENT | BTNS_AUTOSIZE | BTNS_SEP | TBSTYLE_TOOLTIPS;
|
|
||||||
|
// CCS_ADJUSTABLE -- we have no customization, thus it caused double-clicking the toolbar to open and close instantly the dialog to select icons.
|
||||||
|
// TBSTYLE_LIST -- "TBSTYLE_FLAT repaints its portion of the parent window after activating the tool bar (CHILDACTIVATE message), TBSTYLE_LIST does _NOT_ do this (and is reasonably annoying...)." (comment at https://msdn.microsoft.com/en-us/library/windows/desktop/bb760439.aspx)
|
||||||
|
// TBSTYLE_WRAPABLE -- requires refreshing toolbar somewhere else, apparently.
|
||||||
|
|
||||||
|
int style = WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | BTNS_AUTOSIZE | TBSTYLE_TOOLTIPS;
|
||||||
_hToolbarMenu = CreateWindowEx(0,TOOLBARCLASSNAME,NULL, style,
|
_hToolbarMenu = CreateWindowEx(0,TOOLBARCLASSNAME,NULL, style,
|
||||||
0,0,0,0,_hSelf,(HMENU)0, _hInst, NULL);
|
0,0,0,0,_hSelf,(HMENU)0, _hInst, NULL);
|
||||||
|
|
||||||
@ -586,14 +594,14 @@ INT_PTR CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
|
|
||||||
// Place holder of search text field
|
// Place holder of search text field
|
||||||
tbButtons[0].idCommand = 0;
|
tbButtons[0].idCommand = 0;
|
||||||
tbButtons[0].iBitmap = editWidth + 10;
|
tbButtons[0].iBitmap = editWidthSep;
|
||||||
tbButtons[0].fsState = TBSTATE_ENABLED;
|
tbButtons[0].fsState = TBSTATE_ENABLED;
|
||||||
tbButtons[0].fsStyle = BTNS_SEP;
|
tbButtons[0].fsStyle = BTNS_SEP; //This is just a separator (blank space)
|
||||||
tbButtons[0].iString = 0;
|
tbButtons[0].iString = 0;
|
||||||
|
|
||||||
tbButtons[1].idCommand = IDC_SORTBUTTON_FUNCLIST;
|
tbButtons[1].idCommand = IDC_SORTBUTTON_FUNCLIST;
|
||||||
tbButtons[1].iBitmap = 0;
|
tbButtons[1].iBitmap = 0;
|
||||||
tbButtons[1].fsState = TBSTATE_ENABLED;
|
tbButtons[1].fsState = TBSTATE_ENABLED;
|
||||||
tbButtons[1].fsStyle = BTNS_CHECK | BTNS_AUTOSIZE;
|
tbButtons[1].fsStyle = BTNS_CHECK | BTNS_AUTOSIZE;
|
||||||
tbButtons[1].iString = (INT_PTR)TEXT("");
|
tbButtons[1].iString = (INT_PTR)TEXT("");
|
||||||
|
|
||||||
@ -604,8 +612,8 @@ INT_PTR CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
tbButtons[2].iString = (INT_PTR)TEXT("");
|
tbButtons[2].iString = (INT_PTR)TEXT("");
|
||||||
|
|
||||||
::SendMessage(_hToolbarMenu, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
::SendMessage(_hToolbarMenu, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
|
||||||
::SendMessage(_hToolbarMenu, TB_SETBUTTONSIZE , (WPARAM)0, (LPARAM)MAKELONG (16, 16));
|
::SendMessage(_hToolbarMenu, TB_ADDBUTTONS, (WPARAM)sizeof(tbButtons) / sizeof(TBBUTTON), (LPARAM)&tbButtons);
|
||||||
::SendMessage(_hToolbarMenu, TB_ADDBUTTONS, (WPARAM)sizeof(tbButtons) / sizeof(TBBUTTON), (LPARAM)&tbButtons);
|
::SendMessage(_hToolbarMenu, TB_SETBUTTONSIZE, 0, MAKELPARAM(iconSizeX, iconSizeY)); //TB_SETBUTTONSIZE should be called after adding buttons.
|
||||||
::SendMessage(_hToolbarMenu, TB_AUTOSIZE, 0, 0);
|
::SendMessage(_hToolbarMenu, TB_AUTOSIZE, 0, 0);
|
||||||
|
|
||||||
ShowWindow(_hToolbarMenu, SW_SHOW);
|
ShowWindow(_hToolbarMenu, SW_SHOW);
|
||||||
@ -615,13 +623,12 @@ INT_PTR CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
_sortTipStr = pNativeSpeaker->getAttrNameStr(_sortTipStr.c_str(), FL_FUCTIONLISTROOTNODE, FL_SORTLOCALNODENAME);
|
_sortTipStr = pNativeSpeaker->getAttrNameStr(_sortTipStr.c_str(), FL_FUCTIONLISTROOTNODE, FL_SORTLOCALNODENAME);
|
||||||
_reloadTipStr = pNativeSpeaker->getAttrNameStr(_reloadTipStr.c_str(), FL_FUCTIONLISTROOTNODE, FL_RELOADLOCALNODENAME);
|
_reloadTipStr = pNativeSpeaker->getAttrNameStr(_reloadTipStr.c_str(), FL_FUCTIONLISTROOTNODE, FL_RELOADLOCALNODENAME);
|
||||||
|
|
||||||
_hSearchEdit = CreateWindowEx(0L, L"Edit", NULL,
|
_hSearchEdit = CreateWindowEx(0, L"Edit", NULL,
|
||||||
WS_CHILD | WS_BORDER | WS_VISIBLE | ES_AUTOVSCROLL,
|
WS_CHILD | WS_BORDER | WS_VISIBLE | ES_AUTOVSCROLL,
|
||||||
2, 2, editWidth, editHeight,
|
2, 2, editWidth, editHeight,
|
||||||
_hToolbarMenu, (HMENU) IDC_SEARCHFIELD_FUNCLIST, _hInst, 0 );
|
_hToolbarMenu, (HMENU) IDC_SEARCHFIELD_FUNCLIST, _hInst, 0 );
|
||||||
|
|
||||||
HFONT hf = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
|
HFONT hf = (HFONT)::GetStockObject(DEFAULT_GUI_FONT);
|
||||||
|
|
||||||
if (hf)
|
if (hf)
|
||||||
::SendMessage(_hSearchEdit, WM_SETFONT, (WPARAM)hf, MAKELPARAM(TRUE, 0));
|
::SendMessage(_hSearchEdit, WM_SETFONT, (WPARAM)hf, MAKELPARAM(TRUE, 0));
|
||||||
|
|
||||||
@ -676,28 +683,30 @@ INT_PTR CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LPA
|
|||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case WM_SIZE:
|
case WM_SIZE:
|
||||||
{
|
{
|
||||||
int width = LOWORD(lParam);
|
int width = LOWORD(lParam);
|
||||||
int height = HIWORD(lParam);
|
int height = HIWORD(lParam);
|
||||||
RECT toolbarMenuRect;
|
int extraValue = NppParameters::getInstance()->_dpiManager.scaleX(4);
|
||||||
::GetClientRect(_hToolbarMenu, &toolbarMenuRect);
|
|
||||||
|
|
||||||
::MoveWindow(_hToolbarMenu, 0, 0, width, toolbarMenuRect.bottom, TRUE);
|
RECT toolbarMenuRect;
|
||||||
|
::GetClientRect(_hToolbarMenu, &toolbarMenuRect);
|
||||||
|
|
||||||
|
::MoveWindow(_hToolbarMenu, 0, 0, width, toolbarMenuRect.bottom, TRUE);
|
||||||
|
|
||||||
HWND hwnd = _treeView.getHSelf();
|
HWND hwnd = _treeView.getHSelf();
|
||||||
if (hwnd)
|
if (hwnd)
|
||||||
::MoveWindow(hwnd, 0, toolbarMenuRect.bottom + 2, width, height - toolbarMenuRect.bottom - 2, TRUE);
|
::MoveWindow(hwnd, 0, toolbarMenuRect.bottom + extraValue, width, height - toolbarMenuRect.bottom - extraValue, TRUE);
|
||||||
|
|
||||||
HWND hwnd_aux = _treeViewSearchResult.getHSelf();
|
HWND hwnd_aux = _treeViewSearchResult.getHSelf();
|
||||||
if (hwnd_aux)
|
if (hwnd_aux)
|
||||||
::MoveWindow(hwnd_aux, 0, toolbarMenuRect.bottom + 2, width, height - toolbarMenuRect.bottom - 2, TRUE);
|
::MoveWindow(hwnd_aux, 0, toolbarMenuRect.bottom + extraValue, width, height - toolbarMenuRect.bottom - extraValue, TRUE);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default :
|
default :
|
||||||
return DockingDlgInterface::run_dlgProc(message, wParam, lParam);
|
return DockingDlgInterface::run_dlgProc(message, wParam, lParam);
|
||||||
}
|
}
|
||||||
return DockingDlgInterface::run_dlgProc(message, wParam, lParam);
|
return DockingDlgInterface::run_dlgProc(message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
@ -104,9 +104,11 @@ public:
|
|||||||
|
|
||||||
virtual void setBackgroundColor(COLORREF bgColour) {
|
virtual void setBackgroundColor(COLORREF bgColour) {
|
||||||
TreeView_SetBkColor(_treeView.getHSelf(), bgColour);
|
TreeView_SetBkColor(_treeView.getHSelf(), bgColour);
|
||||||
|
TreeView_SetBkColor(_treeViewSearchResult.getHSelf(), bgColour);
|
||||||
};
|
};
|
||||||
virtual void setForegroundColor(COLORREF fgColour) {
|
virtual void setForegroundColor(COLORREF fgColour) {
|
||||||
TreeView_SetTextColor(_treeView.getHSelf(), fgColour);
|
TreeView_SetTextColor(_treeView.getHSelf(), fgColour);
|
||||||
|
TreeView_SetTextColor(_treeViewSearchResult.getHSelf(), fgColour);
|
||||||
};
|
};
|
||||||
|
|
||||||
void setParent(HWND parent2set){
|
void setParent(HWND parent2set){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user