[aseprite] 21/134: Fix comparison between ui::Accelerators
Tobias Hansen
thansen at moszumanska.debian.org
Sat Mar 14 17:09:56 UTC 2015
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository aseprite.
commit 8bec9be4b267b5c7a2a979fd8fa596eb933023bb
Author: David Capello <davidcapello at gmail.com>
Date: Wed Oct 29 23:50:48 2014 -0300
Fix comparison between ui::Accelerators
---
src/app/ui/select_accelerator.cpp | 23 +++++++++++++++++------
src/ui/accelerator.cpp | 21 ++++++++++++++++++---
src/ui/accelerator.h | 8 +-------
3 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/src/app/ui/select_accelerator.cpp b/src/app/ui/select_accelerator.cpp
index 1ccf33b..d483827 100644
--- a/src/app/ui/select_accelerator.cpp
+++ b/src/app/ui/select_accelerator.cpp
@@ -26,6 +26,8 @@
#include "base/bind.h"
#include "base/signal.h"
+#include <cctype>
+
namespace app {
using namespace ui;
@@ -50,11 +52,16 @@ protected:
case kKeyDownMessage:
if (hasFocus() && !isReadOnly()) {
KeyMessage* keymsg = static_cast<KeyMessage*>(msg);
+ KeyModifiers modifiers = keymsg->keyModifiers();
+
+ if (keymsg->scancode() == kKeySpace)
+ modifiers = (KeyModifiers)(modifiers & ~kKeySpaceModifier);
m_accel = Accelerator(
- keymsg->keyModifiers(),
+ modifiers,
keymsg->scancode(),
- keymsg->unicodeChar() >= 32 ? keymsg->unicodeChar(): 0);
+ keymsg->unicodeChar() > 32 ?
+ std::tolower(keymsg->unicodeChar()): 0);
updateText();
AccelChange(&m_accel);
@@ -101,11 +108,15 @@ SelectAccelerator::SelectAccelerator(const ui::Accelerator& accel)
void SelectAccelerator::onModifierChange(KeyModifiers modifier, CheckBox* checkbox)
{
bool state = (checkbox->isSelected());
+ KeyModifiers modifiers = m_accel.modifiers();
+ KeyScancode scancode = m_accel.scancode();
+ int unicodeChar = m_accel.unicodeChar();
+
+ modifiers = (KeyModifiers)((modifiers & ~modifier) | (state ? modifier : 0));
+ if (modifiers == kKeySpaceModifier && scancode == kKeySpace)
+ modifiers = kKeyNoneModifier;
- m_accel = Accelerator(
- (KeyModifiers)((m_accel.modifiers() & ~modifier) | (state ? modifier : 0)),
- m_accel.scancode(),
- m_accel.unicodeChar());
+ m_accel = Accelerator(modifiers, scancode, unicodeChar);
m_keyField->setAccel(m_accel);
updateAssignedTo();
diff --git a/src/ui/accelerator.cpp b/src/ui/accelerator.cpp
index bc422f5..4892d5f 100644
--- a/src/ui/accelerator.cpp
+++ b/src/ui/accelerator.cpp
@@ -15,7 +15,7 @@
#include "base/string.h"
#include <allegro/keyboard.h>
-#include <ctype.h>
+#include <cctype>
#include <string>
#include <vector>
@@ -85,7 +85,7 @@ Accelerator::Accelerator(const std::string& str)
}
if ((tok[0] >= 'a') && (tok[0] <= 'z'))
- m_scancode = (KeyScancode)((int)kKeyA + tolower(tok[0]) - 'a');
+ m_scancode = (KeyScancode)((int)kKeyA + std::tolower(tok[0]) - 'a');
else if ((tok[0] >= '0') && (tok[0] <= '9'))
m_scancode = (KeyScancode)((int)kKey0 + tok[0] - '0');
else {
@@ -179,6 +179,21 @@ Accelerator::Accelerator(const std::string& str)
}
}
+bool Accelerator::operator==(const Accelerator& other) const
+{
+ if (m_modifiers != other.m_modifiers)
+ return false;
+
+ if (m_scancode == other.m_scancode) {
+ if (m_scancode != kKeyNil)
+ return true;
+ else if (m_unicodeChar != 0)
+ return (std::tolower(m_unicodeChar) == std::tolower(other.m_unicodeChar));
+ }
+
+ return false;
+}
+
bool Accelerator::isEmpty() const
{
return
@@ -364,7 +379,7 @@ bool Accelerator::check(KeyModifiers modifiers, KeyScancode scancode, int unicod
}
// For any other legal Unicode code
else if (unicodeChar >= ' ') {
- unicodeChar = tolower(unicodeChar);
+ unicodeChar = std::tolower(unicodeChar);
/* without shift (because characters like '*' can be trigger with
"Shift+8", so we don't want "Shift+*") */
diff --git a/src/ui/accelerator.h b/src/ui/accelerator.h
index fd3d992..7014374 100644
--- a/src/ui/accelerator.h
+++ b/src/ui/accelerator.h
@@ -28,13 +28,7 @@ namespace ui {
bool check(KeyModifiers modifiers, KeyScancode scancode, int unicodeChar) const;
bool checkFromAllegroKeyArray() const;
- bool operator==(const Accelerator& other) const {
- return
- (m_modifiers == other.m_modifiers &&
- m_scancode == other.m_scancode &&
- m_unicodeChar == other.m_unicodeChar);
- }
-
+ bool operator==(const Accelerator& other) const;
bool operator!=(const Accelerator& other) const {
return !operator==(other);
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git
More information about the Pkg-games-commits
mailing list