summaryrefslogtreecommitdiff
path: root/Source/Plugins/InputPluginCommon/Src/ConfigDiagBitmaps.cpp
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2010-04-14 03:48:37 +0000
committerJordan Woyak <jordan.woyak@gmail.com>2010-04-14 03:48:37 +0000
commitba89d91872c8c257f48d21c45df73a64ef2dfe5a (patch)
tree198a6a07eda3ff9eabbff891e69eb27012e49e88 /Source/Plugins/InputPluginCommon/Src/ConfigDiagBitmaps.cpp
parentc2ac9be9b23cde55da95b088e39b5bc5ee65a9f7 (diff)
Moved InputPluginCommon into the Plugins directory. I don't think it made sense in Core. Some minor fixes to the new wiimote plugin also.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5362 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Plugins/InputPluginCommon/Src/ConfigDiagBitmaps.cpp')
-rw-r--r--Source/Plugins/InputPluginCommon/Src/ConfigDiagBitmaps.cpp194
1 files changed, 194 insertions, 0 deletions
diff --git a/Source/Plugins/InputPluginCommon/Src/ConfigDiagBitmaps.cpp b/Source/Plugins/InputPluginCommon/Src/ConfigDiagBitmaps.cpp
new file mode 100644
index 0000000000..7f97249c17
--- /dev/null
+++ b/Source/Plugins/InputPluginCommon/Src/ConfigDiagBitmaps.cpp
@@ -0,0 +1,194 @@
+
+#include "ConfigDiag.h"
+
+void ConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
+{
+
+ 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 ( (*g)->static_bitmap )
+ {
+
+ // don't want game thread updating input when we are using it here
+ if ( false == m_plugin.interface_crit.TryEnter() )
+ return;
+
+ //if ( false == is_game_running )
+ // just always update
+ m_plugin.controller_interface.UpdateInput();
+
+ switch ( (*g)->control_group->type )
+ {
+ case GROUP_TYPE_TILT :
+ case GROUP_TYPE_STICK :
+ {
+ float x = 0, y = 0;
+ float xx, yy;
+ if ( GROUP_TYPE_STICK == (*g)->control_group->type )
+ ((ControllerEmu::AnalogStick*)(*g)->control_group)->GetState( &x, &y, 32.0, 32-1.5 );
+ else
+ ((ControllerEmu::Tilt*)(*g)->control_group)->GetState( &x, &y, 32.0, 32-1.5 );
+
+ 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;
+
+ // setup
+ wxBitmap bitmap(64, 64);
+ wxMemoryDC dc;
+ dc.SelectObject(bitmap);
+ dc.Clear();
+
+ // draw the shit
+
+ // circle for visual aid for diagonal adjustment
+ dc.SetPen(*wxLIGHT_GREY_PEN);
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
+ if ( GROUP_TYPE_STICK == (*g)->control_group->type )
+ dc.DrawCircle( 32, 32, 32);
+ else
+ dc.DrawRectangle( 16, 16, 32, 32 );
+
+ // 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 );
+ }
+
+ // box outline
+ // Windows XP color
+ dc.SetPen(wxPen(_T("#7f9db9")));
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
+ dc.DrawRectangle(0, 0, 64, 64);
+
+ // done drawing
+ dc.SelectObject(wxNullBitmap);
+
+ // set the shit
+ (*g)->static_bitmap->SetBitmap( bitmap );
+ }
+ break;
+ case GROUP_TYPE_BUTTONS :
+ {
+ const unsigned int button_count = ((unsigned int)(*g)->control_group->controls.size());
+ // setup
+ wxBitmap bitmap(12*button_count+1, 12);
+ wxMemoryDC dc;
+ dc.SelectObject(bitmap);
+ dc.Clear();
+
+ // 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 )
+ {
+ // TODO: threshold stuff, actually redo this crap with the GetState func
+ 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);
+ }
+
+ delete bitmasks;
+
+ // box outline
+ // Windows XP color
+ dc.SetPen(wxPen(_T("#7f9db9")));
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
+ dc.DrawRectangle(0, 0, bitmap.GetWidth(), bitmap.GetHeight());
+
+ // done drawing
+ dc.SelectObject(wxNullBitmap);
+
+ // set the shit
+ (*g)->static_bitmap->SetBitmap( bitmap );
+ }
+ break;
+
+ case GROUP_TYPE_MIXED_TRIGGERS :
+ {
+ const unsigned int trigger_count = ((unsigned int)((*g)->control_group->controls.size() / 2));
+ // setup
+ wxBitmap bitmap( 64+12+1, 12*trigger_count+1);
+ wxMemoryDC dc;
+ dc.SelectObject(bitmap);
+ dc.Clear();
+
+ // 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);
+ }
+ dc.SetBrush(*wxTRANSPARENT_BRUSH);
+ dc.DrawRectangle(thresh*64, 0, 128, trigger_count*14);
+
+ // box outline
+ // Windows XP color
+ dc.SetPen(wxPen(_T("#7f9db9")));
+ dc.DrawRectangle(0, 0, bitmap.GetWidth(), bitmap.GetHeight());
+
+ // done drawing
+ dc.SelectObject(wxNullBitmap);
+
+ // set the shit
+ (*g)->static_bitmap->SetBitmap( bitmap );
+ }
+ break;
+ default :
+ break;
+ }
+
+ m_plugin.interface_crit.Leave();
+ }
+ }
+
+}