mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 18:01:56 +00:00
Moved WiimoteNew into Dolphin and eliminated the old wiimote plugin. Removed wiimote plugin support. Moved input dialog related InputUICommon stuff into DolphinWX. Removed now unused InputCommon files. UDPWiimote stuff is temporarily disabled until it is reorganized so Core won't depend on wx. Real wiimotes are now initialized on first need(wiimote diag open or game start) and left initialized until Dolphin exit.(maybe this will work better for Linux/OS X) (scons probably needs some fixes)
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6270 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
de3ad37299
commit
7e08fc19fc
116 changed files with 661 additions and 14529 deletions
349
Source/Core/DolphinWX/Src/InputConfigDiagBitmaps.cpp
Normal file
349
Source/Core/DolphinWX/Src/InputConfigDiagBitmaps.cpp
Normal file
|
@ -0,0 +1,349 @@
|
|||
// Copyright (C) 2010 Dolphin Project.
|
||||
|
||||
// This program 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, version 2.0.
|
||||
|
||||
// This program 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 2.0 for more details.
|
||||
|
||||
// A copy of the GPL 2.0 should have been included with the program.
|
||||
// If not, see http://www.gnu.org/licenses/
|
||||
|
||||
// Official SVN repository and contact information can be found at
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#include "InputConfigDiag.h"
|
||||
|
||||
void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||
{
|
||||
wxFont small_font(6, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD);
|
||||
|
||||
g_controller_interface.UpdateInput();
|
||||
// don't want game thread updating input when we are using it here
|
||||
if (false == g_controller_interface.update_lock.TryEnter())
|
||||
return;
|
||||
|
||||
GamepadPage* const current_page = (GamepadPage*)m_pad_notebook->GetPage(m_pad_notebook->GetSelection());
|
||||
|
||||
std::vector< ControlGroupBox* >::iterator
|
||||
g = current_page->control_groups.begin(),
|
||||
ge = current_page->control_groups.end();
|
||||
for ( ; g != ge; ++g )
|
||||
{
|
||||
// if this control group has a bitmap
|
||||
if ( (*g)->static_bitmap )
|
||||
{
|
||||
wxMemoryDC dc;
|
||||
wxBitmap bitmap((*g)->static_bitmap->GetBitmap());
|
||||
dc.SelectObject(bitmap);
|
||||
dc.Clear();
|
||||
|
||||
dc.SetFont(small_font);
|
||||
dc.SetTextForeground(0xC0C0C0);
|
||||
|
||||
// label for sticks and stuff
|
||||
if (64 == bitmap.GetHeight())
|
||||
dc.DrawText(wxString::FromAscii((*g)->control_group->name).Upper(), 4, 2);
|
||||
|
||||
switch ( (*g)->control_group->type )
|
||||
{
|
||||
case GROUP_TYPE_TILT :
|
||||
case GROUP_TYPE_STICK :
|
||||
case GROUP_TYPE_CURSOR :
|
||||
{
|
||||
// this is starting to be a mess combining all these in one case
|
||||
|
||||
float x = 0, y = 0, z = 0;
|
||||
float xx, yy;
|
||||
|
||||
switch ((*g)->control_group->type)
|
||||
{
|
||||
case GROUP_TYPE_STICK :
|
||||
((ControllerEmu::AnalogStick*)(*g)->control_group)->GetState( &x, &y, 32.0, 32-1.5 );
|
||||
break;
|
||||
case GROUP_TYPE_TILT :
|
||||
((ControllerEmu::Tilt*)(*g)->control_group)->GetState( &x, &y, 32.0, 32-1.5 );
|
||||
break;
|
||||
case GROUP_TYPE_CURSOR :
|
||||
((ControllerEmu::Cursor*)(*g)->control_group)->GetState( &x, &y, &z );
|
||||
x *= (32-1.5); x+= 32;
|
||||
y *= (32-1.5); y+= 32;
|
||||
break;
|
||||
}
|
||||
|
||||
xx = (*g)->control_group->controls[3]->control_ref->State();
|
||||
xx -= (*g)->control_group->controls[2]->control_ref->State();
|
||||
yy = (*g)->control_group->controls[1]->control_ref->State();
|
||||
yy -= (*g)->control_group->controls[0]->control_ref->State();
|
||||
xx *= 32 - 1; xx += 32;
|
||||
yy *= 32 - 1; yy += 32;
|
||||
|
||||
// draw the shit
|
||||
|
||||
// ir cursor forward movement
|
||||
if (GROUP_TYPE_CURSOR == (*g)->control_group->type)
|
||||
{
|
||||
if (z)
|
||||
{
|
||||
dc.SetPen(*wxRED_PEN);
|
||||
dc.SetBrush(*wxRED_BRUSH);
|
||||
}
|
||||
else
|
||||
{
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
dc.SetBrush(*wxGREY_BRUSH);
|
||||
}
|
||||
dc.DrawRectangle( 0, 31 - z*31, 64, 2);
|
||||
}
|
||||
|
||||
// circle for visual aid for diagonal adjustment
|
||||
dc.SetPen(*wxLIGHT_GREY_PEN);
|
||||
dc.SetBrush(*wxWHITE_BRUSH);
|
||||
if ( GROUP_TYPE_STICK == (*g)->control_group->type )
|
||||
{
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawCircle( 32, 32, 32);
|
||||
}
|
||||
else
|
||||
dc.DrawRectangle( 16, 16, 32, 32 );
|
||||
|
||||
if ( GROUP_TYPE_CURSOR != (*g)->control_group->type )
|
||||
{
|
||||
// deadzone circle
|
||||
dc.SetBrush(*wxLIGHT_GREY_BRUSH);
|
||||
dc.DrawCircle( 32, 32, ((*g)->control_group)->settings[0]->value * 32 );
|
||||
}
|
||||
|
||||
// raw dot
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
dc.SetBrush(*wxGREY_BRUSH);
|
||||
// i like the dot better than the cross i think
|
||||
dc.DrawRectangle( xx - 2, yy - 2, 4, 4 );
|
||||
//dc.DrawRectangle( xx-1, 64-yy-4, 2, 8 );
|
||||
//dc.DrawRectangle( xx-4, 64-yy-1, 8, 2 );
|
||||
|
||||
// adjusted dot
|
||||
if (x!=32 || y!=32)
|
||||
{
|
||||
dc.SetPen(*wxRED_PEN);
|
||||
dc.SetBrush(*wxRED_BRUSH);
|
||||
dc.DrawRectangle( x-2, 64-y-2, 4, 4 );
|
||||
// i like the dot better than the cross i think
|
||||
//dc.DrawRectangle( x-1, 64-y-4, 2, 8 );
|
||||
//dc.DrawRectangle( x-4, 64-y-1, 8, 2 );
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_FORCE :
|
||||
{
|
||||
float raw_dot[3];
|
||||
float adj_dot[3];
|
||||
const float deadzone = 32 * ((*g)->control_group)->settings[0]->value;
|
||||
|
||||
// adjusted
|
||||
((ControllerEmu::Force*)(*g)->control_group)->GetState( adj_dot, 32.0, 32-1.5 );
|
||||
|
||||
// raw
|
||||
for ( unsigned int i=0; i<3; ++i )
|
||||
{
|
||||
raw_dot[i] = (*g)->control_group->controls[i*2 + 1]->control_ref->State()
|
||||
- (*g)->control_group->controls[i*2]->control_ref->State();
|
||||
raw_dot[i] *= 32 - 1; raw_dot[i] += 32;
|
||||
}
|
||||
|
||||
// deadzone rect for forward/backward visual
|
||||
dc.SetBrush(*wxLIGHT_GREY_BRUSH);
|
||||
dc.SetPen(*wxLIGHT_GREY_PEN);
|
||||
dc.DrawRectangle( 0, 32 - deadzone, 64, deadzone * 2 );
|
||||
|
||||
// raw forward/background line
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
dc.SetBrush(*wxGREY_BRUSH);
|
||||
dc.DrawRectangle( 0, raw_dot[2] - 1, 64, 2 );
|
||||
|
||||
// adjusted forward/background line
|
||||
if ( adj_dot[2]!=32 )
|
||||
{
|
||||
dc.SetPen(*wxRED_PEN);
|
||||
dc.SetBrush(*wxRED_BRUSH);
|
||||
dc.DrawRectangle( 0, adj_dot[2] - 1, 64, 2 );
|
||||
}
|
||||
|
||||
// a rectangle, for looks i guess
|
||||
dc.SetBrush(*wxWHITE_BRUSH);
|
||||
dc.SetPen(*wxLIGHT_GREY_PEN);
|
||||
dc.DrawRectangle( 16, 16, 32, 32 );
|
||||
|
||||
// deadzone square
|
||||
dc.SetBrush(*wxLIGHT_GREY_BRUSH);
|
||||
dc.DrawRectangle( 32 - deadzone, 32 - deadzone, deadzone * 2, deadzone * 2 );
|
||||
|
||||
// raw dot
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
dc.SetBrush(*wxGREY_BRUSH);
|
||||
dc.DrawRectangle( raw_dot[1] - 2, raw_dot[0] - 2, 4, 4 );
|
||||
|
||||
// adjusted dot
|
||||
if ( adj_dot[1]!=32 || adj_dot[0]!=32 )
|
||||
{
|
||||
dc.SetPen(*wxRED_PEN);
|
||||
dc.SetBrush(*wxRED_BRUSH);
|
||||
dc.DrawRectangle( adj_dot[1]-2, adj_dot[0]-2, 4, 4 );
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_BUTTONS :
|
||||
{
|
||||
const unsigned int button_count = ((unsigned int)(*g)->control_group->controls.size());
|
||||
|
||||
// draw the shit
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
|
||||
unsigned int * const bitmasks = new unsigned int[ button_count ];
|
||||
for (unsigned int n = 0; n<button_count; ++n)
|
||||
bitmasks[n] = (1 << n);
|
||||
|
||||
unsigned int buttons = 0;
|
||||
((ControllerEmu::Buttons*)(*g)->control_group)->GetState( &buttons, bitmasks );
|
||||
|
||||
for (unsigned int n = 0; n<button_count; ++n)
|
||||
{
|
||||
if ( buttons & bitmasks[n] )
|
||||
dc.SetBrush( *wxRED_BRUSH );
|
||||
else
|
||||
{
|
||||
unsigned char amt = 255 - (*g)->control_group->controls[n]->control_ref->State() * 128;
|
||||
dc.SetBrush(wxBrush(wxColor(amt, amt, amt)));
|
||||
}
|
||||
dc.DrawRectangle(n * 12, 0, 14, 12);
|
||||
|
||||
// text
|
||||
const char* const name = (*g)->control_group->controls[n]->name;
|
||||
// bit of hax so ZL, ZR show up as L, R
|
||||
dc.DrawText(wxString::FromAscii((name[1] && name[1] < 'a') ? name[1] : name[0]), n*12 + 2, 1);
|
||||
}
|
||||
|
||||
delete[] bitmasks;
|
||||
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_TRIGGERS :
|
||||
{
|
||||
const unsigned int trigger_count = ((unsigned int)((*g)->control_group->controls.size()));
|
||||
|
||||
// draw the shit
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
ControlState deadzone = (*g)->control_group->settings[0]->value;
|
||||
|
||||
unsigned int* const trigs = new unsigned int[trigger_count];
|
||||
((ControllerEmu::Triggers*)(*g)->control_group)->GetState( trigs, 64 );
|
||||
|
||||
for ( unsigned int n = 0; n < trigger_count; ++n )
|
||||
{
|
||||
ControlState trig_r = (*g)->control_group->controls[n]->control_ref->State();
|
||||
|
||||
// outline
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
dc.SetBrush(*wxWHITE_BRUSH);
|
||||
dc.DrawRectangle(0, n*12, 64, 14);
|
||||
|
||||
// raw
|
||||
dc.SetBrush(*wxGREY_BRUSH);
|
||||
dc.DrawRectangle(0, n*12, trig_r*64, 14);
|
||||
|
||||
// deadzone affected
|
||||
dc.SetBrush(*wxRED_BRUSH);
|
||||
dc.DrawRectangle(0, n*12, trigs[n], 14);
|
||||
|
||||
// text
|
||||
dc.DrawText(wxString::FromAscii((*g)->control_group->controls[n]->name), 3, n*12 + 1);
|
||||
}
|
||||
|
||||
delete[] trigs;
|
||||
|
||||
// deadzone box
|
||||
dc.SetPen(*wxLIGHT_GREY_PEN);
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawRectangle(0, 0, deadzone*64, trigger_count*14);
|
||||
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_MIXED_TRIGGERS :
|
||||
{
|
||||
const unsigned int trigger_count = ((unsigned int)((*g)->control_group->controls.size() / 2));
|
||||
|
||||
// draw the shit
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
ControlState thresh = (*g)->control_group->settings[0]->value;
|
||||
|
||||
for ( unsigned int n = 0; n < trigger_count; ++n )
|
||||
{
|
||||
dc.SetBrush(*wxRED_BRUSH);
|
||||
ControlState trig_d = (*g)->control_group->controls[n]->control_ref->State();
|
||||
|
||||
ControlState trig_a = trig_d > thresh ? 1
|
||||
: (*g)->control_group->controls[n+trigger_count]->control_ref->State();
|
||||
|
||||
dc.DrawRectangle(0, n*12, 64+20, 14);
|
||||
if ( trig_d <= thresh )
|
||||
dc.SetBrush(*wxWHITE_BRUSH);
|
||||
dc.DrawRectangle(trig_a*64, n*12, 64+20, 14);
|
||||
dc.DrawRectangle(64, n*12, 32, 14);
|
||||
|
||||
// text
|
||||
dc.DrawText(wxString::FromAscii((*g)->control_group->controls[n+trigger_count]->name), 3, n*12 + 1);
|
||||
dc.DrawText(wxString::FromAscii((*g)->control_group->controls[n]->name[0]), 64 + 3, n*12 + 1);
|
||||
}
|
||||
|
||||
// threshold box
|
||||
dc.SetPen(*wxLIGHT_GREY_PEN);
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawRectangle(thresh*64, 0, 128, trigger_count*14);
|
||||
|
||||
}
|
||||
break;
|
||||
case GROUP_TYPE_SLIDER:
|
||||
{
|
||||
const ControlState deadzone = (*g)->control_group->settings[0]->value;
|
||||
|
||||
ControlState state = (*g)->control_group->controls[1]->control_ref->State() - (*g)->control_group->controls[0]->control_ref->State();
|
||||
dc.SetPen(*wxGREY_PEN);
|
||||
dc.SetBrush(*wxGREY_BRUSH);
|
||||
dc.DrawRectangle(31 + state * 30, 0, 2, 14);
|
||||
|
||||
((ControllerEmu::Slider*)(*g)->control_group)->GetState(&state, 1);
|
||||
if (state)
|
||||
{
|
||||
dc.SetPen(*wxRED_PEN);
|
||||
dc.SetBrush(*wxRED_BRUSH);
|
||||
dc.DrawRectangle(31 + state * 30, 0, 2, 14);
|
||||
}
|
||||
|
||||
// deadzone box
|
||||
dc.SetPen(*wxLIGHT_GREY_PEN);
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawRectangle(32 - deadzone * 32, 0, deadzone * 64, 14);
|
||||
}
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
|
||||
// box outline
|
||||
// Windows XP color
|
||||
dc.SetPen(wxPen(_T("#7f9db9")));
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawRectangle(0, 0, bitmap.GetWidth(), bitmap.GetHeight());
|
||||
|
||||
dc.SelectObject(wxNullBitmap);
|
||||
(*g)->static_bitmap->SetBitmap(bitmap);
|
||||
}
|
||||
}
|
||||
|
||||
g_controller_interface.update_lock.Leave();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue