summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authoralitor <me4all@mail.ru>2017-08-10 18:35:06 +0300
committerGeorge Hazan <ghazan@miranda.im>2017-08-12 12:32:45 +0300
commita0d14c09331726b05608808dca4a65a36a2e03e9 (patch)
tree903460a362c141aec93aa00d38148ea2c6b2f5e5 /plugins
parent3d49e0e58c3c1c29f065e71a22bd7d3bfab741b1 (diff)
SmileyAdd scrolling issue (#872)
Diffstat (limited to 'plugins')
-rw-r--r--plugins/SmileyAdd/src/smltool.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/plugins/SmileyAdd/src/smltool.cpp b/plugins/SmileyAdd/src/smltool.cpp
index b2284343cd..a7c78a6371 100644
--- a/plugins/SmileyAdd/src/smltool.cpp
+++ b/plugins/SmileyAdd/src/smltool.cpp
@@ -221,12 +221,13 @@ void SmileyToolWindowType::SmileySel(int but)
GetScrollInfo(m_hwndDialog, SB_VERT, &si);
HDC hdc = GetDC(m_hwndDialog);
- if (m_CurrentHotTrack >= 0) {
+ if (m_CurrentHotTrack >= 0) { // erase old rectangle selection and tooltip
RECT rect = CalculateButtonToCoordinates(m_CurrentHotTrack, si.nPos);
DrawFocusRect(hdc, &rect);
m_CurrentHotTrack = -1;
SendMessage(m_hToolTip, TTM_ACTIVATE, FALSE, 0);
}
+
m_CurrentHotTrack = but;
if (m_CurrentHotTrack >= 0) {
TOOLINFO ti = { 0 };
@@ -243,6 +244,17 @@ void SmileyToolWindowType::SmileySel(int but)
RECT rect = CalculateButtonToCoordinates(m_CurrentHotTrack, si.nPos);
DrawFocusRect(hdc, &rect);
if (m_AniPack) m_AniPack->SetSel(rect);
+
+ // when selection is outside the window, then scroll
+ if (but < si.nPos * (opt.HorizontalSorting ? (int)m_NumberOfHorizontalButtons : 1)) {
+ int dist = but / (opt.HorizontalSorting ? (int)m_NumberOfHorizontalButtons : 1) - si.nPos;
+ ScrollV(SB_MYMOVE, dist);
+ }
+ int numVert = m_WindowSizeY / (m_ButtonSize.cy + m_ButtonSpace);
+ if (but >= (si.nPos + numVert) * (opt.HorizontalSorting ? (int)m_NumberOfHorizontalButtons : 1)) {
+ int dist = but / (opt.HorizontalSorting ? m_NumberOfHorizontalButtons : 1) - numVert - si.nPos + 1;
+ ScrollV(SB_MYMOVE, dist);
+ }
}
ReleaseDC(m_hwndDialog, hdc);
}
@@ -366,6 +378,14 @@ void SmileyToolWindowType::KeyUp(WPARAM wParam, LPARAM lParam)
but += (opt.HorizontalSorting ? m_NumberOfHorizontalButtons : 1) * LOWORD(lParam);
break;
+ case VK_PRIOR:
+ but -= m_WindowSizeY / (m_ButtonSize.cy + m_ButtonSpace) * (opt.HorizontalSorting ? m_NumberOfHorizontalButtons : 1);
+ break;
+
+ case VK_NEXT:
+ but += m_WindowSizeY / (m_ButtonSize.cy + m_ButtonSpace) * (opt.HorizontalSorting ? m_NumberOfHorizontalButtons : 1);
+ break;
+
case VK_SPACE:
case VK_RETURN:
if (but != -1) InsertSmiley();