mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-26 09:41:05 +00:00
Fix comparison between ui::Accelerators
This commit is contained in:
parent
d90150fed9
commit
8bec9be4b2
@ -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();
|
||||
|
||||
m_accel = Accelerator(
|
||||
(KeyModifiers)((m_accel.modifiers() & ~modifier) | (state ? modifier : 0)),
|
||||
m_accel.scancode(),
|
||||
m_accel.unicodeChar());
|
||||
modifiers = (KeyModifiers)((modifiers & ~modifier) | (state ? modifier : 0));
|
||||
if (modifiers == kKeySpaceModifier && scancode == kKeySpace)
|
||||
modifiers = kKeyNoneModifier;
|
||||
|
||||
m_accel = Accelerator(modifiers, scancode, unicodeChar);
|
||||
|
||||
m_keyField->setAccel(m_accel);
|
||||
updateAssignedTo();
|
||||
|
@ -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+*") */
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user