Linux (gtk, glade, cli):

- Add control for Lid (defaults to Backspace).
- Disallow Left+Right or Up+Down, acts like Windows port.
- Show correct button state on HUD.
This commit is contained in:
alvinwong 2014-02-26 11:29:53 +00:00
parent fed37e55d3
commit 4e5b6e6d6f
9 changed files with 121 additions and 21 deletions

View File

@ -156,6 +156,9 @@ Enter = START
.RS
Left Shift = SELECT
.RE
.RS
Backspace = LID
.RE
.SH AUTHOR
desmume was written by DeSmuME team
(http://sourceforge.net/projects/desmume).

View File

@ -121,7 +121,8 @@ const u16 cli_kb_cfg[NB_KEYS] =
SDLK_s, // X
SDLK_a, // Y
SDLK_p, // DEBUG
SDLK_o // BOOST
SDLK_o, // BOOST
SDLK_BACKSPACE, // Lid
};
class configured_features : public CommandLine

View File

@ -39,7 +39,8 @@ const char *key_names[NB_KEYS] =
"A", "B", "Select", "Start",
"Right", "Left", "Up", "Down",
"R", "L", "X", "Y",
"Debug", "Boost"
"Debug", "Boost",
"Lid",
};
/* Joypad Key Codes -- 4-digit Hexadecimal number
@ -70,7 +71,8 @@ const u16 default_joypad_cfg[NB_KEYS] =
0x0204, // X
0x0203, // Y
0xFFFF, // DEBUG
0xFFFF // BOOST
0xFFFF, // BOOST
0x0202, // Lid
};
/* Load default joystick and keyboard configurations */
@ -265,25 +267,72 @@ static void set_mouse_coord(signed long x,signed long y)
mouse.y = y;
}
// Adapted from Windows port
bool allowUpAndDown = false;
static buttonstruct<int> cardinalHeldTime = {0};
static void RunAntipodalRestriction(const buttonstruct<bool>& pad)
{
if(allowUpAndDown)
return;
pad.U ? (cardinalHeldTime.U++) : (cardinalHeldTime.U=0);
pad.D ? (cardinalHeldTime.D++) : (cardinalHeldTime.D=0);
pad.L ? (cardinalHeldTime.L++) : (cardinalHeldTime.L=0);
pad.R ? (cardinalHeldTime.R++) : (cardinalHeldTime.R=0);
}
static void ApplyAntipodalRestriction(buttonstruct<bool>& pad)
{
if(allowUpAndDown)
return;
// give preference to whichever direction was most recently pressed
if(pad.U && pad.D)
if(cardinalHeldTime.U < cardinalHeldTime.D)
pad.D = false;
else
pad.U = false;
if(pad.L && pad.R)
if(cardinalHeldTime.L < cardinalHeldTime.R)
pad.R = false;
else
pad.L = false;
}
/* Update NDS keypad */
void update_keypad(u16 keys)
{
// Set raw inputs
{
buttonstruct<bool> input = {};
input.G = (keys>>12)&1;
input.E = (keys>>8)&1;
input.W = (keys>>9)&1;
input.X = (keys>>10)&1;
input.Y = (keys>>11)&1;
input.A = (keys>>0)&1;
input.B = (keys>>1)&1;
input.S = (keys>>3)&1;
input.T = (keys>>2)&1;
input.U = (keys>>6)&1;
input.D = (keys>>7)&1;
input.L = (keys>>5)&1;
input.R = (keys>>4)&1;
input.F = (keys>>14)&1;
RunAntipodalRestriction(input);
NDS_setPad(
input.R, input.L, input.D, input.U,
input.T, input.S, input.B, input.A,
input.Y, input.X, input.W, input.E,
input.G, input.F);
}
// Set real input
NDS_beginProcessingInput();
UserButtons& input = NDS_getProcessingUserInput().buttons;
input.G = (keys>>12)&1;
input.E = (keys>>8)&1;
input.W = (keys>>9)&1;
input.X = (keys>>10)&1;
input.Y = (keys>>11)&1;
input.A = (keys>>0)&1;
input.B = (keys>>1)&1;
input.S = (keys>>3)&1;
input.T = (keys>>2)&1;
input.U = (keys>>6)&1;
input.D = (keys>>7)&1;
input.L = (keys>>5)&1;
input.R = (keys>>4)&1;
input.F = 0;
{
UserButtons& input = NDS_getProcessingUserInput().buttons;
ApplyAntipodalRestriction(input);
}
NDS_endProcessingInput();
}

View File

@ -44,7 +44,7 @@
#define JOY_HAT_UP 2
#define JOY_HAT_DOWN 3
#define NB_KEYS 14
#define NB_KEYS 15
#define KEY_NONE 0
#define KEY_A 1
#define KEY_B 2
@ -60,6 +60,7 @@
#define KEY_Y 12
#define KEY_DEBUG 13
#define KEY_BOOST 14
#define KEY_LID 15
/* Keypad key names */
extern const char *key_names[NB_KEYS];

View File

@ -103,6 +103,9 @@ Enter = START
.RS
Left Shift = SELECT
.RE
.RS
Backspace = LID
.RE
.PP
Desmume accepts joystick events, which can be configured by user.
.SH AUTHOR

View File

@ -1596,6 +1596,25 @@ Contributors:
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_Lid">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Lid : </property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button_kb_key_clicked" object="%d:15" last_modification_time="Tue, 13 Feb 2007 07:20:23 GMT"/>
</widget>
<packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_Select">
@ -2012,6 +2031,25 @@ Contributors:
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_joy_Lid">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Lid : </property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<signal name="clicked" handler="on_button_joy_key_clicked" object="%d:15" last_modification_time="Tue, 13 Feb 2007 07:07:05 GMT"/>
</widget>
<packing>
<property name="left_attach">4</property>
<property name="right_attach">5</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button_joy_L">

View File

@ -61,7 +61,8 @@ const u16 gtk_kb_cfg[NB_KEYS] =
GDK_s, // X
GDK_a, // Y
GDK_p, // DEBUG
GDK_o // BOOST
GDK_o, // BOOST
GDK_BackSpace, // Lid
};
SoundInterface_struct *SNDCoreList[] = {

View File

@ -157,6 +157,9 @@ Enter = START
.RS
Left Shift = SELECT
.RE
.RS
Backspace = LID
.RE
.PP
Desmume accepts joystick events, which can be configured by user.
.SH AUTHOR

View File

@ -610,7 +610,8 @@ static const u16 gtk_kb_cfg[NB_KEYS] = {
GDK_s, // X
GDK_a, // Y
GDK_p, // DEBUG
GDK_o // BOOST
GDK_o, // BOOST
GDK_BackSpace, // Lid
};
GKeyFile *keyfile;