Skip to content

Commit

Permalink
ImageEditor: fixed issue with brush size hotkeys #148
Browse files Browse the repository at this point in the history
  • Loading branch information
zenden2k committed Feb 22, 2024
1 parent 29b3567 commit 4050ce4
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 10 deletions.
2 changes: 2 additions & 0 deletions Source/Gui/CMakeLists.txt
Expand Up @@ -135,6 +135,7 @@ set(SRC_LIST
../ImageEditor/Gui/ImageEditorView.cpp
../ImageEditor/Gui/ImageEditorWindow.cpp
../ImageEditor/Gui/InputBoxControl.cpp
../ImageEditor/Gui/CustomTrackBarControl.cpp
../ImageEditor/Gui/TextParamsWindow.cpp
../ImageEditor/Gui/Toolbar.cpp
../ImageEditor/DrawingTools/AbstractDrawingTool.cpp
Expand Down Expand Up @@ -302,6 +303,7 @@ set(HEADER_LIST
../ImageEditor/Gui/ImageEditorView.h
../ImageEditor/Gui/ImageEditorWindow.h
../ImageEditor/Gui/InputBoxControl.h
../ImageEditor/Gui/CustomTrackBarControl.h
../ImageEditor/Gui/TextParamsWindow.h
../ImageEditor/Gui/Toolbar.h
../ImageEditor/DrawingTools/AbstractDrawingTool.h
Expand Down
20 changes: 20 additions & 0 deletions Source/ImageEditor/Gui/CustomTrackBarControl.cpp
@@ -0,0 +1,20 @@
#include "CustomTrackBarControl.h"

namespace ImageEditor {

LRESULT CCustomTrackBarControl::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
bHandled = FALSE;

// For user convenience, we make these keys [ ] to behave like arrow keys
// when trackbar control is focused (to change brush size)
if (wParam == VK_OEM_4) { // '['
bHandled = TRUE;
DefWindowProc(uMsg, VK_LEFT, lParam);
} else if (wParam == VK_OEM_6) { // ']'
bHandled = TRUE;
DefWindowProc(uMsg, VK_RIGHT, lParam);
}
return 0;
}

}
27 changes: 27 additions & 0 deletions Source/ImageEditor/Gui/CustomTrackBarControl.h
@@ -0,0 +1,27 @@
#pragma once

#include "atlheaders.h"

namespace ImageEditor {

class CCustomTrackBarControl :
public CWindowImpl<CCustomTrackBarControl, CTrackBarCtrl, CControlWinTraits>
{
public:
typedef CWindowImpl<CCustomTrackBarControl, CTrackBarCtrl, CControlWinTraits> TBase;

DECLARE_WND_SUPERCLASS(_T("CCustomTrackBarControl"), CTrackBarCtrl::GetWndClassName())

BEGIN_MSG_MAP(CCustomTrackBarControl)
MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
END_MSG_MAP()

// Handler prototypes:
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
};

}
22 changes: 13 additions & 9 deletions Source/ImageEditor/Gui/ImageEditorWindow.cpp
Expand Up @@ -1396,18 +1396,22 @@ bool ImageEditorWindow::CopyBitmapToClipboardAndClose(ClipboardFormat format) {
}

BOOL ImageEditorWindow::PreTranslateMessage(MSG* pMsg) {
HWND parent = ::GetParent(pMsg->hwnd);
if (pMsg->message == WM_KEYDOWN || pMsg->message == WM_SYSKEYDOWN) {
// Disable accelerators for child controls of the view window (now it's just InputBoxControl)
// and all edit controls in toolbars.
HWND parent = ::GetParent(pMsg->hwnd);

if (parent) {
if (parent == m_view.m_hWnd) {
return FALSE;
}

if (parent == horizontalToolbar_.m_hWnd || parent == verticalToolbar_.m_hWnd) {
TCHAR className[MAX_PATH]{};
if (GetClassName(pMsg->hwnd, className, MAX_PATH) && !lstrcmp(className, _T("Edit"))) {
if (parent) {
if (parent == m_view.m_hWnd) {
return FALSE;
}

if (parent == horizontalToolbar_.m_hWnd || parent == verticalToolbar_.m_hWnd) {
TCHAR className[MAX_PATH]{};
if (GetClassName(pMsg->hwnd, className, MAX_PATH) && !lstrcmp(className, _T("Edit"))) {
return FALSE;
}
}
}
}

Expand Down
3 changes: 2 additions & 1 deletion Source/ImageEditor/Gui/Toolbar.h
Expand Up @@ -6,6 +6,7 @@
#include <memory>
#include <vector>

#include "CustomTrackBarControl.h"
#include "3rdpart/GdiplusH.h"
#include "Core/Utils/CoreTypes.h"

Expand Down Expand Up @@ -149,7 +150,7 @@ class Toolbar : public CWindowImpl<Toolbar> {
int AutoSize();
void CreateToolTipForItem(size_t index);
void updateTooltipForItem(size_t index);
CTrackBarCtrl penSizeSlider_;
CCustomTrackBarControl penSizeSlider_;
CTrackBarCtrl roundRadiusSlider_;
CStatic pixelLabel_;
CStatic roundRadiusLabel_;
Expand Down

0 comments on commit 4050ce4

Please sign in to comment.