Merge branch 'sirblackheart-add-win-key-modifier'

This commit is contained in:
David Capello 2016-03-02 12:34:06 -03:00
commit f9238cd77b
11 changed files with 46 additions and 7 deletions

View File

@ -15,6 +15,7 @@
<check text="Alt" id="alt" />
<check text="Shift" id="shift" />
<check text="Space" id="space" />
<check text="Win" id="win" />
</hbox>
<label text="Assigned to:" />

View File

@ -1,5 +1,5 @@
// Aseprite
// Copyright (C) 2001-2015 David Capello
// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -95,11 +95,14 @@ SelectAccelerator::SelectAccelerator(const ui::Accelerator& accel, KeyContext ke
ctrl()->Click.connect(base::Bind<void>(&SelectAccelerator::onModifierChange, this, kKeyCtrlModifier, ctrl()));
shift()->Click.connect(base::Bind<void>(&SelectAccelerator::onModifierChange, this, kKeyShiftModifier, shift()));
space()->Click.connect(base::Bind<void>(&SelectAccelerator::onModifierChange, this, kKeySpaceModifier, space()));
win()->Click.connect(base::Bind<void>(&SelectAccelerator::onModifierChange, this, kKeyWinModifier, win()));
m_keyField->AccelChange.connect(&SelectAccelerator::onAccelChange, this);
clearButton()->Click.connect(base::Bind<void>(&SelectAccelerator::onClear, this));
okButton()->Click.connect(base::Bind<void>(&SelectAccelerator::onOK, this));
cancelButton()->Click.connect(base::Bind<void>(&SelectAccelerator::onCancel, this));
addChild(&m_tooltipManager);
}
void SelectAccelerator::onModifierChange(KeyModifiers modifier, CheckBox* checkbox)
@ -156,8 +159,14 @@ void SelectAccelerator::updateModifiers()
shift()->setSelected(m_accel.modifiers() & kKeyShiftModifier ? true: false);
space()->setSelected(m_accel.modifiers() & kKeySpaceModifier ? true: false);
#if __APPLE__
win()->setVisible(false);
cmd()->setSelected(m_accel.modifiers() & kKeyCmdModifier ? true: false);
#else
#if __linux__
win()->setText(kWinKeyName);
m_tooltipManager.addTooltipFor(win(), "Also known as Windows key, logo key,\ncommand key, or system key.", TOP);
#endif
win()->setSelected(m_accel.modifiers() & kKeyWinModifier ? true: false);
cmd()->setVisible(false);
#endif
}

View File

@ -1,5 +1,5 @@
// Aseprite
// Copyright (C) 2001-2015 David Capello
// Copyright (C) 2001-2016 David Capello
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
@ -11,6 +11,7 @@
#include "app/ui/keyboard_shortcuts.h"
#include "ui/accelerator.h"
#include "ui/tooltips.h"
#include "select_accelerator.xml.h"
@ -34,6 +35,7 @@ namespace app {
class KeyField;
ui::TooltipManager m_tooltipManager;
KeyField* m_keyField;
KeyContext m_keyContext;
ui::Accelerator m_origAccel;

View File

@ -46,7 +46,9 @@ void she_keyboard_lowlevel_callback(int scancode)
scancode == KEY_LSHIFT ||
scancode == KEY_LCONTROL ||
scancode == KEY_ALT ||
scancode == KEY_COMMAND) {
scancode == KEY_COMMAND ||
scancode == KEY_LWIN ||
scancode == KEY_RWIN ) {
she_keyboard_ucallback(-1, &scancode);
}
return;

View File

@ -17,7 +17,8 @@ namespace she {
kKeyAltModifier = 4,
kKeyCmdModifier = 8,
kKeySpaceModifier = 16,
kKeyUninitializedModifier = 32,
kKeyWinModifier = 32,
kKeyUninitializedModifier = 64,
};
enum KeyScancode {

View File

@ -309,6 +309,9 @@ KeyModifiers get_modifiers_from_last_win32_message()
modifiers |= kKeyAltModifier;
if (GetKeyState(VK_SPACE) & 0x8000)
modifiers |= kKeySpaceModifier;
if ((GetKeyState(VK_LWIN) & 0x8000) ||
(GetKeyState(VK_RWIN) & 0x8000))
modifiers |= kKeyWinModifier;
return (KeyModifiers)modifiers;
}

View File

@ -1,5 +1,5 @@
// Aseprite UI Library
// Copyright (C) 2001-2013, 2015 David Capello
// Copyright (C) 2001-2016 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
@ -27,6 +27,12 @@
namespace ui {
#ifdef _WIN32
const char* kWinKeyName = "Win";
#else
const char* kWinKeyName = "Super";
#endif
static KeyModifiers get_pressed_modifiers_from_she()
{
KeyModifiers mods = kKeyNoneModifier;
@ -36,6 +42,8 @@ static KeyModifiers get_pressed_modifiers_from_she()
if (she::is_key_pressed(kKeyRControl)) mods = KeyModifiers(int(mods) | int(kKeyCtrlModifier));
if (she::is_key_pressed(kKeyAlt) ) mods = KeyModifiers(int(mods) | int(kKeyAltModifier));
if (she::is_key_pressed(kKeyCommand) ) mods = KeyModifiers(int(mods) | int(kKeyCmdModifier));
if (she::is_key_pressed(kKeyLWin) ) mods = KeyModifiers(int(mods) | int(kKeyWinModifier));
if (she::is_key_pressed(kKeyRWin) ) mods = KeyModifiers(int(mods) | int(kKeyWinModifier));
return mods;
}
@ -89,6 +97,9 @@ Accelerator::Accelerator(const std::string& str)
else if (tok == "cmd") {
m_modifiers = (KeyModifiers)((int)m_modifiers | (int)kKeyCmdModifier);
}
else if (tok == base::string_to_lower(kWinKeyName)) {
m_modifiers = (KeyModifiers)((int)m_modifiers | (int)kKeyWinModifier);
}
// Scancode
@ -347,6 +358,10 @@ std::string Accelerator::toString() const
if (m_modifiers & kKeyAltModifier) buf += "Alt+";
if (m_modifiers & kKeyShiftModifier) buf += "Shift+";
if (m_modifiers & kKeySpaceModifier) buf += "Space+";
if (m_modifiers & kKeyWinModifier) {
buf += kWinKeyName;
buf += "+";
}
// Key
if (m_unicodeChar) {

View File

@ -1,5 +1,5 @@
// Aseprite UI Library
// Copyright (C) 2001-2013, 2015 David Capello
// Copyright (C) 2001-2016 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
@ -15,6 +15,8 @@
namespace ui {
extern const char* kWinKeyName;
class Accelerator {
public:
Accelerator();

View File

@ -21,6 +21,7 @@ namespace ui {
using she::kKeyAltModifier;
using she::kKeyCmdModifier;
using she::kKeySpaceModifier;
using she::kKeyWinModifier;
using she::kKeyUninitializedModifier;
using she::kKeyNil;

View File

@ -30,7 +30,8 @@ Message::Message(MessageType type, KeyModifiers modifiers)
(she::is_key_pressed(kKeyLControl) || she::is_key_pressed(kKeyRControl) ? kKeyCtrlModifier: 0) |
(she::is_key_pressed(kKeyAlt) ? kKeyAltModifier: 0) |
(she::is_key_pressed(kKeyCommand) ? kKeyCmdModifier: 0) |
(she::is_key_pressed(kKeySpace) ? kKeySpaceModifier: 0));
(she::is_key_pressed(kKeySpace) ? kKeySpaceModifier: 0) |
(she::is_key_pressed(kKeyLWin) || she::is_key_pressed(kKeyRWin) ? kKeyWinModifier: 0));
}
else {
m_modifiers = modifiers;

View File

@ -42,10 +42,12 @@ namespace ui {
bool ctrlPressed() const { return (m_modifiers & kKeyCtrlModifier) == kKeyCtrlModifier; }
bool altPressed() const { return (m_modifiers & kKeyAltModifier) == kKeyAltModifier; }
bool cmdPressed() const { return (m_modifiers & kKeyCmdModifier) == kKeyCmdModifier; }
bool winPressed() const { return (m_modifiers & kKeyWinModifier) == kKeyWinModifier; }
bool onlyShiftPressed() const { return m_modifiers == kKeyShiftModifier; }
bool onlyCtrlPressed() const { return m_modifiers == kKeyCtrlModifier; }
bool onlyAltPressed() const { return m_modifiers == kKeyAltModifier; }
bool onlyCmdPressed() const { return m_modifiers == kKeyCmdModifier; }
bool onlyWinPressed() const { return m_modifiers == kKeyWinModifier; }
void addRecipient(Widget* widget);
void prependRecipient(Widget* widget);