mirror of https://github.com/mpv-player/mpv
92 lines
3.2 KiB
C
92 lines
3.2 KiB
C
/*
|
|
* This file is part of MPlayer.
|
|
*
|
|
* MPlayer is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* MPlayer is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with MPlayer; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
#include "config.h"
|
|
|
|
// only to get keycode definitions from HIToolbox/Events.h
|
|
#include <Carbon/Carbon.h>
|
|
#include "osx_common.h"
|
|
#include "video_out.h"
|
|
#include "osdep/keycodes.h"
|
|
#include "input/input.h"
|
|
|
|
static const struct keymap keymap[] = {
|
|
// special keys
|
|
{0x34, KEY_ENTER}, // Enter key on some iBooks?
|
|
{kVK_Return, KEY_ENTER},
|
|
{kVK_Escape, KEY_ESC},
|
|
{kVK_Delete, KEY_BACKSPACE}, {kVK_Option, KEY_BACKSPACE}, {kVK_Control, KEY_BACKSPACE}, {kVK_Shift, KEY_BACKSPACE},
|
|
{kVK_Tab, KEY_TAB},
|
|
|
|
// cursor keys
|
|
{kVK_UpArrow, KEY_UP}, {kVK_DownArrow, KEY_DOWN}, {kVK_LeftArrow, KEY_LEFT}, {kVK_RightArrow, KEY_RIGHT},
|
|
|
|
// navigation block
|
|
{kVK_Help, KEY_INSERT}, {kVK_ForwardDelete, KEY_DELETE}, {kVK_Home, KEY_HOME},
|
|
{kVK_End, KEY_END}, {kVK_PageUp, KEY_PAGE_UP}, {kVK_PageUp, KEY_PAGE_DOWN},
|
|
|
|
// F-keys
|
|
{kVK_F1, KEY_F + 1}, {kVK_F2, KEY_F + 2}, {kVK_F3, KEY_F + 3}, {kVK_F4, KEY_F + 4},
|
|
{kVK_F5, KEY_F + 5}, {kVK_F6, KEY_F + 6}, {kVK_F7, KEY_F + 7}, {kVK_F8, KEY_F + 8},
|
|
{kVK_F9, KEY_F + 9}, {kVK_F10, KEY_F + 10}, {kVK_F11, KEY_F + 11}, {kVK_F12, KEY_F + 12},
|
|
|
|
// numpad
|
|
{kVK_ANSI_KeypadPlus, '+'}, {kVK_ANSI_KeypadMinus, '-'}, {kVK_ANSI_KeypadMultiply, '*'},
|
|
{kVK_ANSI_KeypadDivide, '/'}, {kVK_ANSI_KeypadEnter, KEY_KPENTER}, {kVK_ANSI_KeypadDecimal, KEY_KPDEC},
|
|
{kVK_ANSI_Keypad0, KEY_KP0}, {kVK_ANSI_Keypad1, KEY_KP1}, {kVK_ANSI_Keypad2, KEY_KP2}, {kVK_ANSI_Keypad3, KEY_KP3},
|
|
{kVK_ANSI_Keypad4, KEY_KP4}, {kVK_ANSI_Keypad5, KEY_KP5}, {kVK_ANSI_Keypad6, KEY_KP6}, {kVK_ANSI_Keypad7, KEY_KP7},
|
|
{kVK_ANSI_Keypad8, KEY_KP8}, {kVK_ANSI_Keypad9, KEY_KP9},
|
|
|
|
{0, 0}
|
|
};
|
|
|
|
int convert_key(unsigned key, unsigned charcode)
|
|
{
|
|
int mpkey = lookup_keymap_table(keymap, key);
|
|
if (mpkey)
|
|
return mpkey;
|
|
return charcode;
|
|
}
|
|
|
|
static int our_aspect_change;
|
|
static float old_movie_aspect;
|
|
|
|
/**
|
|
* Sends MPlayer a command to change aspect to the requested value.
|
|
* @param new_aspect desired new aspect, < 0 means restore original.
|
|
*/
|
|
void change_movie_aspect(float new_aspect)
|
|
{
|
|
char cmd_str[64];
|
|
if (new_aspect < 0)
|
|
new_aspect = old_movie_aspect;
|
|
our_aspect_change = 1;
|
|
snprintf(cmd_str, sizeof(cmd_str), "switch_ratio %f", new_aspect);
|
|
mp_input_queue_cmd(mp_input_parse_cmd(cmd_str));
|
|
}
|
|
|
|
/**
|
|
* Call in config to save the original movie aspect.
|
|
* This will ignore config calls caused by change_movie_aspect.
|
|
*/
|
|
void config_movie_aspect(float config_aspect)
|
|
{
|
|
if (!our_aspect_change)
|
|
old_movie_aspect = config_aspect;
|
|
our_aspect_change = 0;
|
|
}
|