mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-26 07:39:45 -06:00
Merge branch 'master' into wii-network
Conflicts: CMakeLists.txt Source/Core/Core/Core.vcxproj Source/Core/DolphinWX/Dolphin.vcxproj Source/Core/DolphinWX/Dolphin.vcxproj.filters Source/Dolphin_2010.sln Source/VSProps/Dolphin.Win32.props Source/VSProps/Dolphin.x64.props
This commit is contained in:
@ -11,6 +11,7 @@ set(LIBS core
|
||||
if(NOT ANDROID)
|
||||
if(USE_X11)
|
||||
set(LIBS ${LIBS} ${X11_LIBRARIES}
|
||||
${XINPUT2_LIBRARIES}
|
||||
${XRANDR_LIBRARIES})
|
||||
endif()
|
||||
if(USE_WAYLAND)
|
||||
@ -92,6 +93,7 @@ if(wxWidgets_FOUND)
|
||||
else()
|
||||
if(ANDROID)
|
||||
set(SRCS Src/Android/TextureLoader.cpp
|
||||
Src/Android/ButtonManager.cpp
|
||||
Src/MainAndroid.cpp)
|
||||
else()
|
||||
set(SRCS Src/MainNoGUI.cpp)
|
||||
@ -163,6 +165,10 @@ else()
|
||||
set(DOLPHIN_EXE ${DOLPHIN_EXE_BASE}-nogui)
|
||||
endif()
|
||||
|
||||
if(USE_UPNP)
|
||||
set(LIBS ${LIBS} miniupnpc)
|
||||
endif()
|
||||
|
||||
if(ANDROID)
|
||||
add_library(${DOLPHIN_EXE} SHARED ${SRCS})
|
||||
target_link_libraries(${DOLPHIN_EXE}
|
||||
@ -172,6 +178,24 @@ if(ANDROID)
|
||||
${LIBS}
|
||||
"-Wl,--no-whole-archive"
|
||||
)
|
||||
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "mips")
|
||||
set (SO_TARGET "mips")
|
||||
endif()
|
||||
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^arm")
|
||||
set (SO_TARGET "armeabi-v7a")
|
||||
endif()
|
||||
if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "i686")
|
||||
set (SO_TARGET "x86")
|
||||
endif()
|
||||
add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD
|
||||
COMMAND mkdir ARGS -p ${CMAKE_SOURCE_DIR}/Source/Android/libs/${SO_TARGET}
|
||||
)
|
||||
add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD
|
||||
COMMAND cp ARGS ${CMAKE_SOURCE_DIR}/libs/${SO_TARGET}/lib${DOLPHIN_EXE}.so ${CMAKE_SOURCE_DIR}/Source/Android/libs/${SO_TARGET}/
|
||||
)
|
||||
add_custom_command(TARGET ${DOLPHIN_EXE} POST_BUILD
|
||||
COMMAND cp ARGS ${CMAKE_SOURCE_DIR}/Data/Sys/GC/* ${CMAKE_SOURCE_DIR}/Source/Android/assets/
|
||||
)
|
||||
else()
|
||||
add_executable(${DOLPHIN_EXE} ${SRCS})
|
||||
target_link_libraries(${DOLPHIN_EXE} ${LIBS} ${WXLIBS})
|
||||
|
@ -130,7 +130,7 @@
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link />
|
||||
<PostBuildEvent>
|
||||
@ -141,11 +141,10 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||
</Command>
|
||||
<Message>Copying Data\* to $(TargetDir)</Message>
|
||||
</PostBuildEvent>
|
||||
<Link />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link />
|
||||
<PostBuildEvent>
|
||||
@ -156,11 +155,10 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||
</Command>
|
||||
<Message>Copying Data\* to $(TargetDir)</Message>
|
||||
</PostBuildEvent>
|
||||
<Link />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<OpenMPSupport>
|
||||
</OpenMPSupport>
|
||||
</ClCompile>
|
||||
@ -173,11 +171,10 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||
</Command>
|
||||
<Message>Copying Data\* to $(TargetDir)</Message>
|
||||
</PostBuildEvent>
|
||||
<Link />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|Win32'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link />
|
||||
<PostBuildEvent>
|
||||
@ -188,11 +185,10 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||
</Command>
|
||||
<Message>Copying Data\* to $(TargetDir)</Message>
|
||||
</PostBuildEvent>
|
||||
<Link />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;..\..\..\Externals\polarssl\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<OpenMPSupport>
|
||||
</OpenMPSupport>
|
||||
</ClCompile>
|
||||
@ -207,12 +203,10 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||
</PostBuildEvent>
|
||||
<ResourceCompile>
|
||||
</ResourceCompile>
|
||||
<Link />
|
||||
<Link />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugFast|x64'">
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<AdditionalIncludeDirectories>..\..\..\Externals\GLew\include;..\Common\Src;..\VideoCommon\Src;..\AudioCommon\Src;..\Core\Src;..\Core\Src\PowerPC\JitCommon;..\DebuggerWX\Src;..\..\..\Externals\Bochs_disasm;..\InputCommon\Src;..\DiscIO\Src;..\..\..\Externals\SFML\include;..\..\..\Externals\wxWidgets3;..\..\..\Externals\wxWidgets3\include;..\..\..\Externals\CLRun\include;..\..\..\Externals\miniupnpc\src;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link />
|
||||
<PostBuildEvent>
|
||||
@ -223,7 +217,6 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||
</Command>
|
||||
<Message>Copying Data\* to $(TargetDir)</Message>
|
||||
</PostBuildEvent>
|
||||
<Link />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Src\AboutDolphin.cpp" />
|
||||
@ -354,6 +347,9 @@ xcopy "$(SolutionDir)..\Externals\SDL\$(PlatformName)\*.dll" "$(TargetDir)" /e /
|
||||
<ProjectReference Include="..\..\..\Externals\LZO\LZO.vcxproj">
|
||||
<Project>{d8890b98-26f7-4cff-bbfb-b95f371b5f20}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\Externals\miniupnpc\miniupnpc.vcxproj">
|
||||
<Project>{a680190d-0764-485b-9cf3-a82c5edd5715}</Project>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\Externals\SFML\build\vc2010\SFML_Network.vcxproj">
|
||||
<Project>{93d73454-2512-424e-9cda-4bb357fe13dd}</Project>
|
||||
</ProjectReference>
|
||||
|
223
Source/Core/DolphinWX/Src/Android/ButtonManager.cpp
Normal file
223
Source/Core/DolphinWX/Src/Android/ButtonManager.cpp
Normal file
@ -0,0 +1,223 @@
|
||||
// Copyright (C) 2003 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 <vector>
|
||||
#include "GLInterface.h"
|
||||
#include "Android/TextureLoader.h"
|
||||
#include "Android/ButtonManager.h"
|
||||
|
||||
extern void DrawButton(GLuint tex, float *coords);
|
||||
|
||||
namespace ButtonManager
|
||||
{
|
||||
std::vector<Button*> m_buttons;
|
||||
std::map<std::string, InputDevice*> m_controllers;
|
||||
// XXX: This needs to not be here so we can load the locations from file
|
||||
// This will allow customizable button locations in the future
|
||||
// These are the OpenGL on screen coordinates
|
||||
float m_coords[][8] = { // X, Y, X, EY, EX, EY, EX, Y
|
||||
{0.75f, -1.0f, 0.75f, -0.75f, 1.0f, -0.75f, 1.0f, -1.0f}, // A
|
||||
{0.50f, -1.0f, 0.50f, -0.75f, 0.75f, -0.75f, 0.75f, -1.0f}, // B
|
||||
{-0.10f, -1.0f, -0.10f, -0.80f, 0.10f, -0.80f, 0.10f, -1.0f}, // Start
|
||||
};
|
||||
const char *configStrings[] = { "InputA",
|
||||
"InputB",
|
||||
"InputStart",
|
||||
"InputX",
|
||||
"InputY",
|
||||
"InputZ",
|
||||
"DPadUp",
|
||||
"DPadDown",
|
||||
"DPadLeft",
|
||||
"DPadRight",
|
||||
"MainUp",
|
||||
"MainDown",
|
||||
"MainLeft",
|
||||
"MainRight",
|
||||
"CStickUp",
|
||||
"CStickDown",
|
||||
"CStickLeft",
|
||||
"CStickRight",
|
||||
"InputL",
|
||||
"InputR" };
|
||||
const int configStringNum = 20;
|
||||
|
||||
void AddBind(std::string dev, sBind *bind)
|
||||
{
|
||||
auto it = m_controllers.find(dev);
|
||||
if (it != m_controllers.end())
|
||||
{
|
||||
it->second->AddBind(bind);
|
||||
return;
|
||||
}
|
||||
m_controllers[dev] = new InputDevice(dev);
|
||||
m_controllers[dev]->AddBind(bind);
|
||||
}
|
||||
|
||||
void Init()
|
||||
{
|
||||
// Initialize our touchscreen buttons
|
||||
m_buttons.push_back(new Button("ButtonA.png", BUTTON_A, m_coords[0]));
|
||||
m_buttons.push_back(new Button("ButtonB.png", BUTTON_B, m_coords[1]));
|
||||
m_buttons.push_back(new Button("ButtonStart.png", BUTTON_START, m_coords[2]));
|
||||
|
||||
// Init our controller bindings
|
||||
IniFile ini;
|
||||
ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string("Dolphin.ini"));
|
||||
for (int a = 0; a < configStringNum; ++a)
|
||||
{
|
||||
BindType type;
|
||||
int bindnum;
|
||||
char dev[128];
|
||||
bool hasbind = false;
|
||||
char modifier = 0;
|
||||
std::string value;
|
||||
ini.Get("Android", configStrings[a], &value, "None");
|
||||
if (value == "None")
|
||||
continue;
|
||||
if (std::string::npos != value.find("Axis"))
|
||||
{
|
||||
hasbind = true;
|
||||
type = BIND_AXIS;
|
||||
sscanf(value.c_str(), "Device '%[^\']'-Axis %d%c", dev, &bindnum, &modifier);
|
||||
}
|
||||
else if (std::string::npos != value.find("Button"))
|
||||
{
|
||||
hasbind = true;
|
||||
type = BIND_BUTTON;
|
||||
sscanf(value.c_str(), "Device '%[^\']'-Button %d", dev, &bindnum);
|
||||
}
|
||||
if (hasbind)
|
||||
AddBind(std::string(dev), new sBind((ButtonType)a, type, bindnum, modifier == '-' ? -1.0f : 1.0f));
|
||||
}
|
||||
|
||||
}
|
||||
bool GetButtonPressed(ButtonType button)
|
||||
{
|
||||
bool pressed = false;
|
||||
for (auto it = m_buttons.begin(); it != m_buttons.end(); ++it)
|
||||
if ((*it)->GetButtonType() == button)
|
||||
pressed = (*it)->Pressed();
|
||||
|
||||
for (auto it = m_controllers.begin(); it != m_controllers.end(); ++it)
|
||||
pressed |= it->second->ButtonValue(button);
|
||||
|
||||
return pressed;
|
||||
}
|
||||
float GetAxisValue(ButtonType axis)
|
||||
{
|
||||
auto it = m_controllers.begin();
|
||||
if (it == m_controllers.end())
|
||||
return 0.0f;
|
||||
return it->second->AxisValue(axis);
|
||||
}
|
||||
void TouchEvent(int action, float x, float y)
|
||||
{
|
||||
// Actions
|
||||
// 0 is press
|
||||
// 1 is let go
|
||||
// 2 is move
|
||||
for (auto it = m_buttons.begin(); it != m_buttons.end(); ++it)
|
||||
{
|
||||
float *coords = (*it)->GetCoords();
|
||||
if ( x >= coords[0] &&
|
||||
x <= coords[4] &&
|
||||
y >= coords[1] &&
|
||||
y <= coords[3])
|
||||
{
|
||||
if (action == 0)
|
||||
(*it)->SetState(BUTTON_PRESSED);
|
||||
if (action == 1)
|
||||
(*it)->SetState(BUTTON_RELEASED);
|
||||
if (action == 2)
|
||||
; // XXX: Be used later for analog stick
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GamepadEvent(std::string dev, int button, int action)
|
||||
{
|
||||
auto it = m_controllers.find(dev);
|
||||
if (it != m_controllers.end())
|
||||
{
|
||||
it->second->PressEvent(button, action);
|
||||
return;
|
||||
}
|
||||
m_controllers[dev] = new InputDevice(dev);
|
||||
m_controllers[dev]->PressEvent(button, action);
|
||||
}
|
||||
void GamepadAxisEvent(std::string dev, int axis, float value)
|
||||
{
|
||||
auto it = m_controllers.find(dev);
|
||||
if (it != m_controllers.end())
|
||||
{
|
||||
it->second->AxisEvent(axis, value);
|
||||
return;
|
||||
}
|
||||
m_controllers[dev] = new InputDevice(dev);
|
||||
m_controllers[dev]->AxisEvent(axis, value);
|
||||
}
|
||||
void Shutdown()
|
||||
{
|
||||
for(auto it = m_buttons.begin(); it != m_buttons.end(); ++it)
|
||||
delete *it;
|
||||
for (auto it = m_controllers.begin(); it != m_controllers.end(); ++it)
|
||||
delete it->second;
|
||||
}
|
||||
|
||||
void DrawButtons()
|
||||
{
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
for(auto it = m_buttons.begin(); it != m_buttons.end(); ++it)
|
||||
DrawButton((*it)->GetTexture(), (*it)->GetCoords());
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
|
||||
// InputDevice
|
||||
void InputDevice::PressEvent(int button, int action)
|
||||
{
|
||||
m_buttons[button] = action == 0 ? true : false;
|
||||
}
|
||||
void InputDevice::AxisEvent(int axis, float value)
|
||||
{
|
||||
m_axises[axis] = value;
|
||||
}
|
||||
bool InputDevice::ButtonValue(ButtonType button)
|
||||
{
|
||||
auto it = m_binds.find(button);
|
||||
if (it == m_binds.end())
|
||||
return false;
|
||||
if (it->second->m_bindtype == BIND_BUTTON)
|
||||
return m_buttons[it->second->m_bind];
|
||||
else
|
||||
return AxisValue(button);
|
||||
}
|
||||
float InputDevice::AxisValue(ButtonType axis)
|
||||
{
|
||||
auto it = m_binds.find(axis);
|
||||
if (it == m_binds.end())
|
||||
return 0.0f;
|
||||
if (it->second->m_bindtype == BIND_BUTTON)
|
||||
return ButtonValue(axis);
|
||||
else
|
||||
return m_axises[it->second->m_bind] * it->second->m_neg;
|
||||
}
|
||||
|
||||
}
|
133
Source/Core/DolphinWX/Src/Android/ButtonManager.h
Normal file
133
Source/Core/DolphinWX/Src/Android/ButtonManager.h
Normal file
@ -0,0 +1,133 @@
|
||||
// Copyright (C) 2003 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/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include "CommonPaths.h"
|
||||
#include "Android/TextureLoader.h"
|
||||
|
||||
namespace ButtonManager
|
||||
{
|
||||
enum ButtonType
|
||||
{
|
||||
BUTTON_A = 0,
|
||||
BUTTON_B,
|
||||
BUTTON_START,
|
||||
BUTTON_X,
|
||||
BUTTON_Y,
|
||||
BUTTON_Z,
|
||||
BUTTON_UP,
|
||||
BUTTON_DOWN,
|
||||
BUTTON_LEFT,
|
||||
BUTTON_RIGHT,
|
||||
STICK_MAIN_UP,
|
||||
STICK_MAIN_DOWN,
|
||||
STICK_MAIN_LEFT,
|
||||
STICK_MAIN_RIGHT,
|
||||
STICK_C_UP,
|
||||
STICK_C_DOWN,
|
||||
STICK_C_LEFT,
|
||||
STICK_C_RIGHT,
|
||||
TRIGGER_L,
|
||||
TRIGGER_R
|
||||
};
|
||||
enum ButtonState
|
||||
{
|
||||
BUTTON_RELEASED = 0,
|
||||
BUTTON_PRESSED = 1
|
||||
};
|
||||
enum BindType
|
||||
{
|
||||
BIND_BUTTON = 0,
|
||||
BIND_AXIS
|
||||
};
|
||||
class Button
|
||||
{
|
||||
private:
|
||||
GLuint m_tex;
|
||||
ButtonType m_button;
|
||||
ButtonState m_state;
|
||||
float m_coords[8];
|
||||
public:
|
||||
Button(std::string filename, ButtonType button, float *coords)
|
||||
{
|
||||
m_tex = LoadPNG((std::string(DOLPHIN_DATA_DIR "/") + filename).c_str());
|
||||
m_button = button;
|
||||
memcpy(m_coords, coords, sizeof(float) * 8);
|
||||
m_state = BUTTON_RELEASED;
|
||||
}
|
||||
Button(ButtonType button)
|
||||
{
|
||||
m_button = button;
|
||||
m_state = BUTTON_RELEASED;
|
||||
}
|
||||
void SetState(ButtonState state) { m_state = state; }
|
||||
bool Pressed() { return m_state == BUTTON_PRESSED; }
|
||||
ButtonType GetButtonType() { return m_button; }
|
||||
GLuint GetTexture() { return m_tex; }
|
||||
float *GetCoords() { return m_coords; }
|
||||
|
||||
~Button() { if(m_tex) glDeleteTextures(1, &m_tex); }
|
||||
};
|
||||
|
||||
struct sBind
|
||||
{
|
||||
const ButtonType m_buttontype;
|
||||
const BindType m_bindtype;
|
||||
const int m_bind;
|
||||
const float m_neg;
|
||||
sBind(ButtonType buttontype, BindType bindtype, int bind, float neg)
|
||||
: m_buttontype(buttontype), m_bindtype(bindtype), m_bind(bind), m_neg(neg)
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
class InputDevice
|
||||
{
|
||||
private:
|
||||
std::string m_dev;
|
||||
std::map<int, bool> m_buttons;
|
||||
std::map<int, float> m_axises;
|
||||
std::map<ButtonType, sBind*> m_binds;
|
||||
public:
|
||||
InputDevice(std::string dev)
|
||||
{
|
||||
m_dev = dev;
|
||||
}
|
||||
~InputDevice()
|
||||
{
|
||||
for (auto it = m_binds.begin(); it != m_binds.end(); ++it)
|
||||
delete it->second;
|
||||
}
|
||||
void AddBind(sBind *bind) { m_binds[bind->m_buttontype] = bind; }
|
||||
void PressEvent(int button, int action);
|
||||
void AxisEvent(int axis, float value);
|
||||
bool ButtonValue(ButtonType button);
|
||||
float AxisValue(ButtonType axis);
|
||||
};
|
||||
|
||||
void Init();
|
||||
void DrawButtons();
|
||||
bool GetButtonPressed(ButtonType button);
|
||||
float GetAxisValue(ButtonType axis);
|
||||
void TouchEvent(int action, float x, float y);
|
||||
void GamepadEvent(std::string dev, int button, int action);
|
||||
void GamepadAxisEvent(std::string dev, int axis, float value);
|
||||
void Shutdown();
|
||||
}
|
@ -14,6 +14,7 @@
|
||||
#include "WxUtils.h"
|
||||
|
||||
#define MAX_CHEAT_SEARCH_RESULTS_DISPLAY 256
|
||||
const wxString title = _("Cheats Manager");
|
||||
|
||||
extern std::vector<ActionReplay::ARCode> arCodes;
|
||||
extern CFrame* main_frame;
|
||||
@ -22,26 +23,15 @@ extern CFrame* main_frame;
|
||||
static wxCheatsWindow *g_cheat_window;
|
||||
|
||||
wxCheatsWindow::wxCheatsWindow(wxWindow* const parent)
|
||||
: wxDialog(parent, wxID_ANY, _("Cheats Manager"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxDIALOG_NO_PARENT)
|
||||
: wxDialog(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX|wxMINIMIZE_BOX|wxDIALOG_NO_PARENT)
|
||||
{
|
||||
::g_cheat_window = this;
|
||||
|
||||
// Create the GUI controls
|
||||
Init_ChildControls();
|
||||
|
||||
// Load Data
|
||||
Load_ARCodes();
|
||||
|
||||
// Load Gecko Codes :/
|
||||
{
|
||||
const DiscIO::IVolume* const vol = VolumeHandler::GetVolume();
|
||||
if (vol)
|
||||
{
|
||||
m_gameini_path = File::GetUserPath(D_GAMECONFIG_IDX) + vol->GetUniqueID() + ".ini";
|
||||
m_gameini.Load(m_gameini_path);
|
||||
m_geckocode_panel->LoadCodes(m_gameini);
|
||||
}
|
||||
}
|
||||
// load codes
|
||||
UpdateGUI();
|
||||
|
||||
SetSize(wxSize(-1, 600));
|
||||
Center();
|
||||
@ -119,7 +109,7 @@ void wxCheatsWindow::Init_ChildControls()
|
||||
m_Notebook_Main->AddPage(m_Tab_Log, _("Logging"));
|
||||
|
||||
// Button Strip
|
||||
wxButton* const button_apply = new wxButton(panel, wxID_APPLY, _("Apply"), wxDefaultPosition, wxDefaultSize);
|
||||
button_apply = new wxButton(panel, wxID_APPLY, _("Apply"), wxDefaultPosition, wxDefaultSize);
|
||||
button_apply->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &wxCheatsWindow::OnEvent_ApplyChanges_Press, this);
|
||||
wxButton* const button_cancel = new wxButton(panel, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize);
|
||||
button_cancel->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &wxCheatsWindow::OnEvent_ButtonClose_Press, this);
|
||||
@ -249,12 +239,34 @@ void wxCheatsWindow::OnEvent_Close(wxCloseEvent& ev)
|
||||
Destroy();
|
||||
}
|
||||
|
||||
// load codes for a new ISO ID
|
||||
void wxCheatsWindow::UpdateGUI()
|
||||
{
|
||||
// load code
|
||||
m_gameini_path = File::GetUserPath(D_GAMECONFIG_IDX) + Core::g_CoreStartupParameter.GetUniqueID() + ".ini";
|
||||
m_gameini.Load(m_gameini_path);
|
||||
Load_ARCodes();
|
||||
Load_GeckoCodes();
|
||||
|
||||
// enable controls
|
||||
button_apply->Enable(Core::IsRunning());
|
||||
|
||||
// write the ISO name in the title
|
||||
if (Core::IsRunning())
|
||||
SetTitle(title + ": " + Core::g_CoreStartupParameter.GetUniqueID() + " - " + Core::g_CoreStartupParameter.m_strName);
|
||||
else
|
||||
SetTitle(title);
|
||||
}
|
||||
|
||||
void wxCheatsWindow::Load_ARCodes()
|
||||
{
|
||||
using namespace ActionReplay;
|
||||
|
||||
m_CheckListBox_CheatsList->Clear();
|
||||
|
||||
if (!Core::IsRunning())
|
||||
return;
|
||||
|
||||
indexList.clear();
|
||||
size_t size = GetCodeListSize();
|
||||
for (size_t i = 0; i < size; i++)
|
||||
@ -269,6 +281,11 @@ void wxCheatsWindow::Load_ARCodes()
|
||||
}
|
||||
}
|
||||
|
||||
void wxCheatsWindow::Load_GeckoCodes()
|
||||
{
|
||||
m_geckocode_panel->LoadCodes(m_gameini, Core::g_CoreStartupParameter.GetUniqueID(), true);
|
||||
}
|
||||
|
||||
void wxCheatsWindow::OnEvent_CheatsList_ItemSelected(wxCommandEvent& WXUNUSED (event))
|
||||
{
|
||||
using namespace ActionReplay;
|
||||
|
@ -96,6 +96,7 @@ class wxCheatsWindow : public wxDialog
|
||||
public:
|
||||
wxCheatsWindow(wxWindow* const parent);
|
||||
~wxCheatsWindow();
|
||||
void UpdateGUI();
|
||||
|
||||
protected:
|
||||
|
||||
@ -105,6 +106,7 @@ class wxCheatsWindow : public wxDialog
|
||||
};
|
||||
|
||||
// --- GUI Controls ---
|
||||
wxButton* button_apply;
|
||||
wxNotebook *m_Notebook_Main;
|
||||
|
||||
wxPanel *m_Tab_Cheats;
|
||||
@ -134,6 +136,7 @@ class wxCheatsWindow : public wxDialog
|
||||
void Init_ChildControls();
|
||||
|
||||
void Load_ARCodes();
|
||||
void Load_GeckoCodes();
|
||||
|
||||
// --- Wx Events Handlers ---
|
||||
|
||||
|
@ -87,6 +87,7 @@ static const wxLanguage langIds[] =
|
||||
|
||||
#define SIDEV_STDCONT_STR _trans("Standard Controller")
|
||||
#define SIDEV_STEERING_STR _trans("Steering Wheel")
|
||||
#define SIDEV_DANCEMAT_STR _trans("Dance Mat")
|
||||
#define SIDEV_BONGO_STR _trans("TaruKonga (Bongos)")
|
||||
#define SIDEV_GBA_STR "GBA"
|
||||
#define SIDEV_AM_BB_STR _trans("AM-Baseboard")
|
||||
@ -388,6 +389,7 @@ void CConfigMain::InitializeGUIValues()
|
||||
SIDevices.Add(_(DEV_NONE_STR));
|
||||
SIDevices.Add(_(SIDEV_STDCONT_STR));
|
||||
SIDevices.Add(_(SIDEV_STEERING_STR));
|
||||
SIDevices.Add(_(SIDEV_DANCEMAT_STR));
|
||||
SIDevices.Add(_(SIDEV_BONGO_STR));
|
||||
SIDevices.Add(_(SIDEV_GBA_STR));
|
||||
SIDevices.Add(_(SIDEV_AM_BB_STR));
|
||||
@ -443,15 +445,18 @@ void CConfigMain::InitializeGUIValues()
|
||||
case SIDEVICE_GC_STEERING:
|
||||
GCSIDevice[i]->SetStringSelection(SIDevices[2]);
|
||||
break;
|
||||
case SIDEVICE_GC_TARUKONGA:
|
||||
case SIDEVICE_DANCEMAT:
|
||||
GCSIDevice[i]->SetStringSelection(SIDevices[3]);
|
||||
break;
|
||||
case SIDEVICE_GC_GBA:
|
||||
case SIDEVICE_GC_TARUKONGA:
|
||||
GCSIDevice[i]->SetStringSelection(SIDevices[4]);
|
||||
break;
|
||||
case SIDEVICE_AM_BASEBOARD:
|
||||
case SIDEVICE_GC_GBA:
|
||||
GCSIDevice[i]->SetStringSelection(SIDevices[5]);
|
||||
break;
|
||||
case SIDEVICE_AM_BASEBOARD:
|
||||
GCSIDevice[i]->SetStringSelection(SIDevices[6]);
|
||||
break;
|
||||
default:
|
||||
GCSIDevice[i]->SetStringSelection(SIDevices[0]);
|
||||
break;
|
||||
@ -1103,6 +1108,8 @@ void CConfigMain::ChooseSIDevice(wxString deviceName, int deviceNum)
|
||||
tempType = SIDEVICE_GC_CONTROLLER;
|
||||
else if (!deviceName.compare(WXSTR_TRANS(SIDEV_STEERING_STR)))
|
||||
tempType = SIDEVICE_GC_STEERING;
|
||||
else if (!deviceName.compare(WXSTR_TRANS(SIDEV_DANCEMAT_STR)))
|
||||
tempType = SIDEVICE_DANCEMAT;
|
||||
else if (!deviceName.compare(WXSTR_TRANS(SIDEV_BONGO_STR)))
|
||||
tempType = SIDEVICE_GC_TARUKONGA;
|
||||
else if (!deviceName.compare(wxT(SIDEV_GBA_STR)))
|
||||
|
@ -34,8 +34,8 @@ FifoPlayerDlg::FifoPlayerDlg(wxWindow * const parent) :
|
||||
{
|
||||
CreateGUIControls();
|
||||
|
||||
sMutex.lock();
|
||||
m_EvtHandler = GetEventHandler();
|
||||
sMutex.lock();
|
||||
m_EvtHandler = GetEventHandler();
|
||||
sMutex.unlock();
|
||||
|
||||
FifoPlayer::GetInstance().SetFileLoadedCallback(FileLoaded);
|
||||
@ -55,7 +55,7 @@ FifoPlayerDlg::~FifoPlayerDlg()
|
||||
m_ObjectToCtrl->Unbind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnObjectTo, this);
|
||||
m_EarlyMemoryUpdates->Unbind(wxEVT_COMMAND_CHECKBOX_CLICKED, &FifoPlayerDlg::OnCheckEarlyMemoryUpdates, this);
|
||||
m_RecordStop->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnRecordStop, this);
|
||||
m_Save->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnSaveFile, this);
|
||||
m_Save->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnSaveFile, this);
|
||||
m_FramesToRecordCtrl->Unbind(wxEVT_COMMAND_SPINCTRL_UPDATED, &FifoPlayerDlg::OnNumFramesToRecord, this);
|
||||
m_Close->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &FifoPlayerDlg::OnCloseClick, this);
|
||||
|
||||
@ -65,7 +65,7 @@ FifoPlayerDlg::~FifoPlayerDlg()
|
||||
|
||||
FifoPlayer::GetInstance().SetFrameWrittenCallback(NULL);
|
||||
|
||||
sMutex.lock();
|
||||
sMutex.lock();
|
||||
m_EvtHandler = NULL;
|
||||
sMutex.unlock();
|
||||
}
|
||||
@ -192,7 +192,8 @@ void FifoPlayerDlg::CreateGUIControls()
|
||||
m_FramesToRecordLabel->Wrap(-1);
|
||||
sRecordingOptions->Add(m_FramesToRecordLabel, 0, wxALL, 5);
|
||||
|
||||
m_FramesToRecordCtrl = new wxSpinCtrl(m_RecordPage, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 10000, 1);
|
||||
wxString initialNum = wxString::Format(_T("%d"), m_FramesToRecord);
|
||||
m_FramesToRecordCtrl = new wxSpinCtrl(m_RecordPage, wxID_ANY, initialNum, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 10000, 1);
|
||||
sRecordingOptions->Add(m_FramesToRecordCtrl, 0, wxALL, 5);
|
||||
|
||||
sRecordPage->Add(sRecordingOptions, 0, wxEXPAND, 5);
|
||||
@ -252,9 +253,7 @@ void FifoPlayerDlg::CreateGUIControls()
|
||||
m_findNext = new wxButton(m_AnalyzePage, wxID_ANY, _("Find next"));
|
||||
m_findPrevious = new wxButton(m_AnalyzePage, wxID_ANY, _("Find previous"));
|
||||
|
||||
m_beginSearch->Disable();
|
||||
m_findNext->Disable();
|
||||
m_findPrevious->Disable();
|
||||
ResetSearch();
|
||||
|
||||
sSearchButtons->Add(m_beginSearch, 0, wxALL, 5);
|
||||
sSearchButtons->Add(m_findNext, 0, wxALL, 5);
|
||||
@ -407,8 +406,8 @@ void FifoPlayerDlg::OnRecordStop(wxCommandEvent& WXUNUSED(event))
|
||||
// Then stop recording
|
||||
recorder.StopRecording();
|
||||
|
||||
// and disable the button to stop recording
|
||||
m_RecordStop->Disable();
|
||||
// and change the button label accordingly.
|
||||
m_RecordStop->SetLabel(_("Record"));
|
||||
}
|
||||
else // Recorder is actually about to start recording
|
||||
{
|
||||
@ -499,16 +498,12 @@ void FifoPlayerDlg::OnBeginSearch(wxCommandEvent& event)
|
||||
|
||||
ChangeSearchResult(0);
|
||||
m_beginSearch->Disable();
|
||||
m_findNext->Enable();
|
||||
m_findPrevious->Enable();
|
||||
m_numResultsText->SetLabel(wxString::Format(_("Found %d results for \'"), search_results.size()) + m_searchField->GetValue() + _("\'"));
|
||||
}
|
||||
|
||||
void FifoPlayerDlg::OnSearchFieldTextChanged(wxCommandEvent& event)
|
||||
{
|
||||
m_beginSearch->Enable(m_searchField->GetLineLength(0) > 0);
|
||||
m_findNext->Disable();
|
||||
m_findPrevious->Disable();
|
||||
ResetSearch();
|
||||
}
|
||||
|
||||
void FifoPlayerDlg::OnFindNextClick(wxCommandEvent& event)
|
||||
@ -551,7 +546,7 @@ void FifoPlayerDlg::OnFindPreviousClick(wxCommandEvent& event)
|
||||
|
||||
void FifoPlayerDlg::ChangeSearchResult(unsigned int result_idx)
|
||||
{
|
||||
if (search_results.size() > result_idx)
|
||||
if (result_idx < search_results.size()) // if index is valid
|
||||
{
|
||||
m_search_result_idx = result_idx;
|
||||
int prev_frame = m_framesList->GetSelection();
|
||||
@ -577,6 +572,9 @@ void FifoPlayerDlg::ChangeSearchResult(unsigned int result_idx)
|
||||
ev.SetInt(m_objectCmdList->GetSelection());
|
||||
OnObjectCmdListSelectionChanged(ev);
|
||||
}
|
||||
|
||||
m_findNext->Enable(result_idx+1 < search_results.size());
|
||||
m_findPrevious->Enable(result_idx != 0);
|
||||
}
|
||||
else if (search_results.size())
|
||||
{
|
||||
@ -584,6 +582,15 @@ void FifoPlayerDlg::ChangeSearchResult(unsigned int result_idx)
|
||||
}
|
||||
}
|
||||
|
||||
void FifoPlayerDlg::ResetSearch()
|
||||
{
|
||||
m_beginSearch->Enable(m_searchField->GetLineLength(0) > 0);
|
||||
m_findNext->Disable();
|
||||
m_findPrevious->Disable();
|
||||
|
||||
search_results.clear();
|
||||
}
|
||||
|
||||
void FifoPlayerDlg::OnFrameListSelectionChanged(wxCommandEvent& event)
|
||||
{
|
||||
FifoPlayer& player = FifoPlayer::GetInstance();
|
||||
@ -600,6 +607,8 @@ void FifoPlayerDlg::OnFrameListSelectionChanged(wxCommandEvent& event)
|
||||
wxCommandEvent ev = wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
|
||||
ev.SetInt(-1);
|
||||
OnObjectListSelectionChanged(ev);
|
||||
|
||||
ResetSearch();
|
||||
}
|
||||
|
||||
void FifoPlayerDlg::OnObjectListSelectionChanged(wxCommandEvent& event)
|
||||
@ -727,6 +736,8 @@ void FifoPlayerDlg::OnObjectListSelectionChanged(wxCommandEvent& event)
|
||||
wxCommandEvent ev = wxCommandEvent(wxEVT_COMMAND_LISTBOX_SELECTED);
|
||||
ev.SetInt(-1);
|
||||
OnObjectCmdListSelectionChanged(ev);
|
||||
|
||||
ResetSearch();
|
||||
}
|
||||
|
||||
void FifoPlayerDlg::OnObjectCmdListSelectionChanged(wxCommandEvent& event)
|
||||
|
@ -37,6 +37,7 @@ private:
|
||||
void OnFindPreviousClick(wxCommandEvent& event);
|
||||
void OnSearchFieldTextChanged(wxCommandEvent& event);
|
||||
void ChangeSearchResult(unsigned int result_idx);
|
||||
void ResetSearch();
|
||||
|
||||
void OnRecordingFinished(wxEvent& event);
|
||||
void OnFrameWritten(wxEvent& event);
|
||||
|
@ -30,6 +30,9 @@
|
||||
#include "State.h"
|
||||
#include "VolumeHandler.h"
|
||||
#include "Movie.h"
|
||||
#include "RenderBase.h"
|
||||
#include "VideoConfig.h"
|
||||
#include "VertexShaderManager.h"
|
||||
|
||||
#include "VideoBackendBase.h"
|
||||
|
||||
@ -204,17 +207,18 @@ EVT_MENU_RANGE(IDM_LOGWINDOW, IDM_VIDEOWINDOW, CFrame::OnToggleWindow)
|
||||
|
||||
EVT_MENU(IDM_PURGECACHE, CFrame::GameListChanged)
|
||||
|
||||
EVT_MENU(IDM_LOADLASTSTATE, CFrame::OnLoadLastState)
|
||||
EVT_MENU(IDM_SAVEFIRSTSTATE, CFrame::OnSaveFirstState)
|
||||
EVT_MENU(IDM_UNDOLOADSTATE, CFrame::OnUndoLoadState)
|
||||
EVT_MENU(IDM_UNDOSAVESTATE, CFrame::OnUndoSaveState)
|
||||
EVT_MENU(IDM_LOADSTATEFILE, CFrame::OnLoadStateFromFile)
|
||||
EVT_MENU(IDM_SAVESTATEFILE, CFrame::OnSaveStateToFile)
|
||||
|
||||
EVT_MENU_RANGE(IDM_LOADSLOT1, IDM_LOADSLOT8, CFrame::OnLoadState)
|
||||
EVT_MENU_RANGE(IDM_LOADLAST1, IDM_LOADLAST8, CFrame::OnLoadLastState)
|
||||
EVT_MENU_RANGE(IDM_SAVESLOT1, IDM_SAVESLOT8, CFrame::OnSaveState)
|
||||
EVT_MENU_RANGE(IDM_FRAMESKIP0, IDM_FRAMESKIP9, CFrame::OnFrameSkip)
|
||||
EVT_MENU_RANGE(IDM_DRIVE1, IDM_DRIVE24, CFrame::OnBootDrive)
|
||||
EVT_MENU_RANGE(IDM_CONNECT_WIIMOTE1, IDM_CONNECT_WIIMOTE4, CFrame::OnConnectWiimote)
|
||||
EVT_MENU_RANGE(IDM_CONNECT_WIIMOTE1, IDM_CONNECT_BALANCEBOARD, CFrame::OnConnectWiimote)
|
||||
EVT_MENU_RANGE(IDM_LISTWAD, IDM_LISTDRIVES, CFrame::GameListChanged)
|
||||
|
||||
// Other
|
||||
@ -323,7 +327,11 @@ CFrame::CFrame(wxFrame* parent,
|
||||
m_LogWindow->Hide();
|
||||
m_LogWindow->Disable();
|
||||
|
||||
g_TASInputDlg = new TASInputDlg(this);
|
||||
g_TASInputDlg[0] = new TASInputDlg(this);
|
||||
g_TASInputDlg[1] = new TASInputDlg(this);
|
||||
g_TASInputDlg[2] = new TASInputDlg(this);
|
||||
g_TASInputDlg[3] = new TASInputDlg(this);
|
||||
|
||||
Movie::SetInputManip(TASManipFunction);
|
||||
|
||||
State::SetOnAfterLoadCallback(OnAfterLoadCallback);
|
||||
@ -719,104 +727,59 @@ int GetCmdForHotkey(unsigned int key)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case HK_OPEN:
|
||||
return wxID_OPEN;
|
||||
case HK_OPEN: return wxID_OPEN;
|
||||
case HK_CHANGE_DISC: return IDM_CHANGEDISC;
|
||||
case HK_REFRESH_LIST: return wxID_REFRESH;
|
||||
case HK_PLAY_PAUSE: return IDM_PLAY;
|
||||
case HK_STOP: return IDM_STOP;
|
||||
case HK_RESET: return IDM_RESET;
|
||||
case HK_FRAME_ADVANCE: return IDM_FRAMESTEP;
|
||||
case HK_START_RECORDING: return IDM_RECORD;
|
||||
case HK_PLAY_RECORDING: return IDM_PLAYRECORD;
|
||||
case HK_EXPORT_RECORDING: return IDM_RECORDEXPORT;
|
||||
case HK_READ_ONLY_MODE: return IDM_RECORDREADONLY;
|
||||
case HK_FULLSCREEN: return IDM_TOGGLE_FULLSCREEN;
|
||||
case HK_SCREENSHOT: return IDM_SCREENSHOT;
|
||||
case HK_EXIT: return wxID_EXIT;
|
||||
|
||||
case HK_CHANGE_DISC:
|
||||
return IDM_CHANGEDISC;
|
||||
case HK_WIIMOTE1_CONNECT: return IDM_CONNECT_WIIMOTE1;
|
||||
case HK_WIIMOTE2_CONNECT: return IDM_CONNECT_WIIMOTE2;
|
||||
case HK_WIIMOTE3_CONNECT: return IDM_CONNECT_WIIMOTE3;
|
||||
case HK_WIIMOTE4_CONNECT: return IDM_CONNECT_WIIMOTE4;
|
||||
case HK_BALANCEBOARD_CONNECT: return IDM_CONNECT_BALANCEBOARD;
|
||||
|
||||
case HK_REFRESH_LIST:
|
||||
return wxID_REFRESH;
|
||||
case HK_LOAD_STATE_SLOT_1: return IDM_LOADSLOT1;
|
||||
case HK_LOAD_STATE_SLOT_2: return IDM_LOADSLOT2;
|
||||
case HK_LOAD_STATE_SLOT_3: return IDM_LOADSLOT3;
|
||||
case HK_LOAD_STATE_SLOT_4: return IDM_LOADSLOT4;
|
||||
case HK_LOAD_STATE_SLOT_5: return IDM_LOADSLOT5;
|
||||
case HK_LOAD_STATE_SLOT_6: return IDM_LOADSLOT6;
|
||||
case HK_LOAD_STATE_SLOT_7: return IDM_LOADSLOT7;
|
||||
case HK_LOAD_STATE_SLOT_8: return IDM_LOADSLOT8;
|
||||
|
||||
case HK_PLAY_PAUSE:
|
||||
return IDM_PLAY;
|
||||
case HK_SAVE_STATE_SLOT_1: return IDM_SAVESLOT1;
|
||||
case HK_SAVE_STATE_SLOT_2: return IDM_SAVESLOT2;
|
||||
case HK_SAVE_STATE_SLOT_3: return IDM_SAVESLOT3;
|
||||
case HK_SAVE_STATE_SLOT_4: return IDM_SAVESLOT4;
|
||||
case HK_SAVE_STATE_SLOT_5: return IDM_SAVESLOT5;
|
||||
case HK_SAVE_STATE_SLOT_6: return IDM_SAVESLOT6;
|
||||
case HK_SAVE_STATE_SLOT_7: return IDM_SAVESLOT7;
|
||||
case HK_SAVE_STATE_SLOT_8: return IDM_SAVESLOT8;
|
||||
|
||||
case HK_STOP:
|
||||
return IDM_STOP;
|
||||
case HK_LOAD_LAST_STATE_1: return IDM_LOADLAST1;
|
||||
case HK_LOAD_LAST_STATE_2: return IDM_LOADLAST2;
|
||||
case HK_LOAD_LAST_STATE_3: return IDM_LOADLAST3;
|
||||
case HK_LOAD_LAST_STATE_4: return IDM_LOADLAST4;
|
||||
case HK_LOAD_LAST_STATE_5: return IDM_LOADLAST5;
|
||||
case HK_LOAD_LAST_STATE_6: return IDM_LOADLAST6;
|
||||
case HK_LOAD_LAST_STATE_7: return IDM_LOADLAST7;
|
||||
case HK_LOAD_LAST_STATE_8: return IDM_LOADLAST8;
|
||||
|
||||
case HK_RESET:
|
||||
return IDM_RESET;
|
||||
|
||||
case HK_FRAME_ADVANCE:
|
||||
return IDM_FRAMESTEP;
|
||||
|
||||
case HK_START_RECORDING:
|
||||
return IDM_RECORD;
|
||||
|
||||
case HK_PLAY_RECORDING:
|
||||
return IDM_PLAYRECORD;
|
||||
|
||||
case HK_EXPORT_RECORDING:
|
||||
return IDM_RECORDEXPORT;
|
||||
|
||||
case HK_READ_ONLY_MODE:
|
||||
return IDM_RECORDREADONLY;
|
||||
|
||||
case HK_FULLSCREEN:
|
||||
return IDM_TOGGLE_FULLSCREEN;
|
||||
|
||||
case HK_SCREENSHOT:
|
||||
return IDM_SCREENSHOT;
|
||||
|
||||
case HK_WIIMOTE1_CONNECT:
|
||||
return IDM_CONNECT_WIIMOTE1;
|
||||
|
||||
case HK_WIIMOTE2_CONNECT:
|
||||
return IDM_CONNECT_WIIMOTE2;
|
||||
|
||||
case HK_WIIMOTE3_CONNECT:
|
||||
return IDM_CONNECT_WIIMOTE3;
|
||||
|
||||
case HK_WIIMOTE4_CONNECT:
|
||||
return IDM_CONNECT_WIIMOTE4;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_1:
|
||||
return IDM_LOADSLOT1;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_2:
|
||||
return IDM_LOADSLOT2;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_3:
|
||||
return IDM_LOADSLOT3;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_4:
|
||||
return IDM_LOADSLOT4;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_5:
|
||||
return IDM_LOADSLOT5;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_6:
|
||||
return IDM_LOADSLOT6;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_7:
|
||||
return IDM_LOADSLOT7;
|
||||
|
||||
case HK_LOAD_STATE_SLOT_8:
|
||||
return IDM_LOADSLOT8;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_1:
|
||||
return IDM_SAVESLOT1;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_2:
|
||||
return IDM_SAVESLOT2;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_3:
|
||||
return IDM_SAVESLOT3;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_4:
|
||||
return IDM_SAVESLOT4;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_5:
|
||||
return IDM_SAVESLOT5;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_6:
|
||||
return IDM_SAVESLOT6;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_7:
|
||||
return IDM_SAVESLOT7;
|
||||
|
||||
case HK_SAVE_STATE_SLOT_8:
|
||||
return IDM_SAVESLOT8;
|
||||
case HK_SAVE_FIRST_STATE: return IDM_SAVEFIRSTSTATE;
|
||||
case HK_UNDO_LOAD_STATE: return IDM_UNDOLOADSTATE;
|
||||
case HK_UNDO_SAVE_STATE: return IDM_UNDOSAVESTATE;
|
||||
case HK_LOAD_STATE_FILE: return IDM_LOADSTATEFILE;
|
||||
case HK_SAVE_STATE_FILE: return IDM_SAVESTATEFILE;
|
||||
}
|
||||
|
||||
return -1;
|
||||
@ -825,7 +788,7 @@ int GetCmdForHotkey(unsigned int key)
|
||||
void OnAfterLoadCallback()
|
||||
{
|
||||
// warning: this gets called from the CPU thread, so we should only queue things to do on the proper thread
|
||||
if(main_frame)
|
||||
if (main_frame)
|
||||
{
|
||||
wxCommandEvent event(wxEVT_HOST_COMMAND, IDM_UPDATEGUI);
|
||||
main_frame->GetEventHandler()->AddPendingEvent(event);
|
||||
@ -835,13 +798,24 @@ void OnAfterLoadCallback()
|
||||
void TASManipFunction(SPADStatus *PadStatus, int controllerID)
|
||||
{
|
||||
if (main_frame)
|
||||
main_frame->g_TASInputDlg->GetValues(PadStatus, controllerID);
|
||||
main_frame->g_TASInputDlg[controllerID]->GetValues(PadStatus, controllerID);
|
||||
}
|
||||
|
||||
bool TASInputHasFocus()
|
||||
{
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
if (main_frame->g_TASInputDlg[i]->HasFocus())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||
{
|
||||
if(Core::GetState() != Core::CORE_UNINITIALIZED &&
|
||||
(RendererHasFocus() || g_TASInputDlg->HasFocus()))
|
||||
(RendererHasFocus() || TASInputHasFocus()))
|
||||
{
|
||||
int WiimoteId = -1;
|
||||
// Toggle fullscreen
|
||||
@ -859,6 +833,8 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||
// Screenshot hotkey
|
||||
else if (IsHotkey(event, HK_SCREENSHOT))
|
||||
Core::SaveScreenShot();
|
||||
else if (IsHotkey(event, HK_EXIT))
|
||||
wxPostEvent(this, wxCommandEvent(wxID_EXIT));
|
||||
// Wiimote connect and disconnect hotkeys
|
||||
else if (IsHotkey(event, HK_WIIMOTE1_CONNECT))
|
||||
WiimoteId = 0;
|
||||
@ -868,32 +844,12 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||
WiimoteId = 2;
|
||||
else if (IsHotkey(event, HK_WIIMOTE4_CONNECT))
|
||||
WiimoteId = 3;
|
||||
// State save and state load hotkeys
|
||||
/*else if (event.GetKeyCode() >= WXK_F1 && event.GetKeyCode() <= WXK_F8)
|
||||
{
|
||||
int slot_number = event.GetKeyCode() - WXK_F1 + 1;
|
||||
if (event.GetModifiers() == wxMOD_NONE)
|
||||
State::Load(slot_number);
|
||||
else if (event.GetModifiers() == wxMOD_SHIFT)
|
||||
State::Save(slot_number);
|
||||
else
|
||||
event.Skip();
|
||||
}*/
|
||||
else if (event.GetKeyCode() == WXK_F11 && event.GetModifiers() == wxMOD_NONE)
|
||||
State::LoadLastSaved();
|
||||
else if (event.GetKeyCode() == WXK_F12)
|
||||
{
|
||||
if (event.GetModifiers() == wxMOD_NONE)
|
||||
State::UndoSaveState();
|
||||
else if (event.GetModifiers() == wxMOD_SHIFT)
|
||||
State::UndoLoadState();
|
||||
else
|
||||
event.Skip();
|
||||
}
|
||||
else if (IsHotkey(event, HK_BALANCEBOARD_CONNECT))
|
||||
WiimoteId = 4;
|
||||
else
|
||||
{
|
||||
unsigned int i = NUM_HOTKEYS;
|
||||
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain || g_TASInputDlg->HasFocus())
|
||||
if (!SConfig::GetInstance().m_LocalCoreStartupParameter.bRenderToMain || TASInputHasFocus())
|
||||
{
|
||||
for (i = 0; i < NUM_HOTKEYS; i++)
|
||||
{
|
||||
@ -935,28 +891,78 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||
ConnectWiimote(WiimoteId, connect);
|
||||
}
|
||||
|
||||
// Send the OSD hotkeys to the video backend
|
||||
if (event.GetKeyCode() >= '3' && event.GetKeyCode() <= '7' && event.GetModifiers() == wxMOD_NONE)
|
||||
if (g_Config.bOSDHotKey && event.GetModifiers() == wxMOD_NONE)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
PostMessage((HWND)Core::GetWindowHandle(), WM_USER, WM_USER_KEYDOWN, event.GetKeyCode());
|
||||
#elif defined(HAVE_X11) && HAVE_X11
|
||||
X11Utils::SendKeyEvent(X11Utils::XDisplayFromHandle(GetHandle()), event.GetKeyCode());
|
||||
#endif
|
||||
switch (event.GetKeyCode())
|
||||
{
|
||||
case '3':
|
||||
OSDChoice = 1;
|
||||
// Toggle native resolution
|
||||
g_Config.iEFBScale = g_Config.iEFBScale + 1;
|
||||
if (g_Config.iEFBScale > 7) g_Config.iEFBScale = 0;
|
||||
break;
|
||||
case '4':
|
||||
OSDChoice = 2;
|
||||
// Toggle aspect ratio
|
||||
g_Config.iAspectRatio = (g_Config.iAspectRatio + 1) & 3;
|
||||
break;
|
||||
case '5':
|
||||
OSDChoice = 3;
|
||||
// Toggle EFB copy
|
||||
if (!g_Config.bEFBCopyEnable || g_Config.bCopyEFBToTexture)
|
||||
{
|
||||
g_Config.bEFBCopyEnable ^= true;
|
||||
g_Config.bCopyEFBToTexture = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_Config.bCopyEFBToTexture = !g_Config.bCopyEFBToTexture;
|
||||
}
|
||||
break;
|
||||
case '6':
|
||||
OSDChoice = 4;
|
||||
g_Config.bDisableFog = !g_Config.bDisableFog;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Send the freelook hotkeys to the video backend
|
||||
if ((event.GetKeyCode() == ')' || event.GetKeyCode() == '(' ||
|
||||
event.GetKeyCode() == '0' || event.GetKeyCode() == '9' ||
|
||||
event.GetKeyCode() == 'W' || event.GetKeyCode() == 'S' ||
|
||||
event.GetKeyCode() == 'A' || event.GetKeyCode() == 'D' ||
|
||||
event.GetKeyCode() == 'R')
|
||||
&& event.GetModifiers() == wxMOD_SHIFT)
|
||||
|
||||
if (g_Config.bFreeLook && event.GetModifiers() == wxMOD_SHIFT)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
PostMessage((HWND)Core::GetWindowHandle(), WM_USER, WM_USER_KEYDOWN, event.GetKeyCode());
|
||||
#elif defined(HAVE_X11) && HAVE_X11
|
||||
X11Utils::SendKeyEvent(X11Utils::XDisplayFromHandle(GetHandle()), event.GetKeyCode());
|
||||
#endif
|
||||
static float debugSpeed = 1.0f;
|
||||
switch (event.GetKeyCode())
|
||||
{
|
||||
case '9':
|
||||
debugSpeed /= 2.0f;
|
||||
break;
|
||||
case '0':
|
||||
debugSpeed *= 2.0f;
|
||||
break;
|
||||
case 'W':
|
||||
VertexShaderManager::TranslateView(0.0f, debugSpeed);
|
||||
break;
|
||||
case 'S':
|
||||
VertexShaderManager::TranslateView(0.0f, -debugSpeed);
|
||||
break;
|
||||
case 'A':
|
||||
VertexShaderManager::TranslateView(debugSpeed, 0.0f);
|
||||
break;
|
||||
case 'D':
|
||||
VertexShaderManager::TranslateView(-debugSpeed, 0.0f);
|
||||
break;
|
||||
case 'Q':
|
||||
VertexShaderManager::TranslateView(0.0f, 0.0f, debugSpeed);
|
||||
break;
|
||||
case 'E':
|
||||
VertexShaderManager::TranslateView(0.0f, 0.0f, -debugSpeed);
|
||||
break;
|
||||
case 'R':
|
||||
VertexShaderManager::ResetView();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -110,7 +110,7 @@ public:
|
||||
CCodeWindow* g_pCodeWindow;
|
||||
NetPlaySetupDiag* g_NetPlaySetupDiag;
|
||||
wxCheatsWindow* g_CheatsWindow;
|
||||
TASInputDlg* g_TASInputDlg;
|
||||
TASInputDlg* g_TASInputDlg[4];
|
||||
|
||||
void InitBitmaps();
|
||||
void DoPause();
|
||||
@ -289,6 +289,7 @@ private:
|
||||
void OnLoadStateFromFile(wxCommandEvent& event);
|
||||
void OnSaveStateToFile(wxCommandEvent& event);
|
||||
void OnLoadLastState(wxCommandEvent& event);
|
||||
void OnSaveFirstState(wxCommandEvent& event);
|
||||
void OnUndoLoadState(wxCommandEvent& event);
|
||||
void OnUndoSaveState(wxCommandEvent& event);
|
||||
|
||||
@ -348,6 +349,7 @@ void OnAfterLoadCallback();
|
||||
|
||||
// For TASInputDlg
|
||||
void TASManipFunction(SPADStatus *PadStatus, int controllerID);
|
||||
bool TASInputHasFocus();
|
||||
|
||||
#endif // __FRAME_H_
|
||||
|
||||
|
@ -149,27 +149,26 @@ void CFrame::CreateMenu()
|
||||
emulationMenu->Append(IDM_LOADSTATE, _("&Load State"), loadMenu);
|
||||
emulationMenu->Append(IDM_SAVESTATE, _("Sa&ve State"), saveMenu);
|
||||
|
||||
saveMenu->Append(IDM_SAVESTATEFILE, _("Save State..."));
|
||||
loadMenu->Append(IDM_UNDOSAVESTATE, _("Last Overwritten State") + wxString(wxT("\tF12")));
|
||||
saveMenu->Append(IDM_SAVESTATEFILE, GetMenuLabel(HK_SAVE_STATE_FILE));
|
||||
saveMenu->Append(IDM_SAVEFIRSTSTATE, GetMenuLabel(HK_SAVE_FIRST_STATE));
|
||||
loadMenu->Append(IDM_UNDOSAVESTATE, GetMenuLabel(HK_UNDO_SAVE_STATE));
|
||||
saveMenu->AppendSeparator();
|
||||
|
||||
loadMenu->Append(IDM_LOADSTATEFILE, _("Load State..."));
|
||||
|
||||
// Reserve F11 for the "step into" function in the debugger
|
||||
if (g_pCodeWindow)
|
||||
loadMenu->Append(IDM_LOADLASTSTATE, _("Last Saved State"));
|
||||
else
|
||||
loadMenu->Append(IDM_LOADLASTSTATE, _("Last Saved State") + wxString(wxT("\tF11")));
|
||||
loadMenu->Append(IDM_LOADSTATEFILE, GetMenuLabel(HK_LOAD_STATE_FILE));
|
||||
|
||||
loadMenu->Append(IDM_UNDOLOADSTATE, _("Undo Load State") + wxString(wxT("\tShift+F12")));
|
||||
loadMenu->Append(IDM_UNDOLOADSTATE, GetMenuLabel(HK_UNDO_LOAD_STATE));
|
||||
loadMenu->AppendSeparator();
|
||||
|
||||
for (int i = 1; i <= 8; i++)
|
||||
for (unsigned int i = 1; i <= State::NUM_STATES; i++)
|
||||
{
|
||||
loadMenu->Append(IDM_LOADSLOT1 + i - 1, GetMenuLabel(HK_LOAD_STATE_SLOT_1 + i - 1));
|
||||
saveMenu->Append(IDM_SAVESLOT1 + i - 1, GetMenuLabel(HK_SAVE_STATE_SLOT_1 + i - 1));
|
||||
}
|
||||
|
||||
loadMenu->AppendSeparator();
|
||||
for (unsigned int i = 1; i <= State::NUM_STATES; i++)
|
||||
loadMenu->Append(IDM_LOADLAST1 + i - 1, GetMenuLabel(HK_LOAD_LAST_STATE_1 + i - 1));
|
||||
|
||||
m_MenuBar->Append(emulationMenu, _("&Emulation"));
|
||||
|
||||
// Options menu
|
||||
@ -206,6 +205,7 @@ void CFrame::CreateMenu()
|
||||
toolsMenu->AppendCheckItem(IDM_CONNECT_WIIMOTE2, GetMenuLabel(HK_WIIMOTE2_CONNECT));
|
||||
toolsMenu->AppendCheckItem(IDM_CONNECT_WIIMOTE3, GetMenuLabel(HK_WIIMOTE3_CONNECT));
|
||||
toolsMenu->AppendCheckItem(IDM_CONNECT_WIIMOTE4, GetMenuLabel(HK_WIIMOTE4_CONNECT));
|
||||
toolsMenu->AppendCheckItem(IDM_CONNECT_BALANCEBOARD, GetMenuLabel(HK_BALANCEBOARD_CONNECT));
|
||||
|
||||
m_MenuBar->Append(toolsMenu, _("&Tools"));
|
||||
|
||||
@ -360,6 +360,9 @@ wxString CFrame::GetMenuLabel(int Id)
|
||||
case HK_SCREENSHOT:
|
||||
Label = _("Take Screenshot");
|
||||
break;
|
||||
case HK_EXIT:
|
||||
Label = _("Exit");
|
||||
break;
|
||||
|
||||
case HK_WIIMOTE1_CONNECT:
|
||||
case HK_WIIMOTE2_CONNECT:
|
||||
@ -368,7 +371,9 @@ wxString CFrame::GetMenuLabel(int Id)
|
||||
Label = wxString::Format(_("Connect Wiimote %i"),
|
||||
Id - HK_WIIMOTE1_CONNECT + 1);
|
||||
break;
|
||||
|
||||
case HK_BALANCEBOARD_CONNECT:
|
||||
Label = _("Connect Balance Board");
|
||||
break;
|
||||
case HK_LOAD_STATE_SLOT_1:
|
||||
case HK_LOAD_STATE_SLOT_2:
|
||||
case HK_LOAD_STATE_SLOT_3:
|
||||
@ -392,6 +397,28 @@ wxString CFrame::GetMenuLabel(int Id)
|
||||
Label = wxString::Format(_("Slot %i"),
|
||||
Id - HK_SAVE_STATE_SLOT_1 + 1);
|
||||
break;
|
||||
case HK_SAVE_STATE_FILE:
|
||||
Label = _("Save State...");
|
||||
break;
|
||||
|
||||
case HK_LOAD_LAST_STATE_1:
|
||||
case HK_LOAD_LAST_STATE_2:
|
||||
case HK_LOAD_LAST_STATE_3:
|
||||
case HK_LOAD_LAST_STATE_4:
|
||||
case HK_LOAD_LAST_STATE_5:
|
||||
case HK_LOAD_LAST_STATE_6:
|
||||
case HK_LOAD_LAST_STATE_7:
|
||||
case HK_LOAD_LAST_STATE_8:
|
||||
Label = wxString::Format(_("Last %i"),
|
||||
Id - HK_LOAD_LAST_STATE_1 + 1);
|
||||
break;
|
||||
case HK_LOAD_STATE_FILE:
|
||||
Label = _("Load State...");
|
||||
break;
|
||||
|
||||
case HK_SAVE_FIRST_STATE: Label = wxString("Save Oldest State"); break;
|
||||
case HK_UNDO_LOAD_STATE: Label = wxString("Undo Load State"); break;
|
||||
case HK_UNDO_SAVE_STATE: Label = wxString("Undo Save State"); break;
|
||||
|
||||
default:
|
||||
Label = wxString::Format(_("Undefined %i"), Id);
|
||||
@ -620,7 +647,16 @@ void CFrame::OnRecordReadOnly(wxCommandEvent& event)
|
||||
|
||||
void CFrame::OnTASInput(wxCommandEvent& event)
|
||||
{
|
||||
g_TASInputDlg->Show(true);
|
||||
std::string number[4] = {"1","2","3","4"};
|
||||
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
if (SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_CONTROLLER || SConfig::GetInstance().m_SIDevice[i] == SIDEVICE_GC_TARUKONGA)
|
||||
{
|
||||
g_TASInputDlg[i]->Show(true);
|
||||
g_TASInputDlg[i]->SetTitle("TAS Input - Controller " + number[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CFrame::OnTogglePauseMovie(wxCommandEvent& WXUNUSED (event))
|
||||
@ -768,8 +804,10 @@ void CFrame::OnRenderParentResize(wxSizeEvent& event)
|
||||
}
|
||||
#if defined(HAVE_X11) && HAVE_X11
|
||||
wxRect client_rect = m_RenderParent->GetClientRect();
|
||||
X11Utils::SendClientEvent(X11Utils::XDisplayFromHandle(GetHandle()),
|
||||
"RESIZE", client_rect.x, client_rect.y, client_rect.width, client_rect.height);
|
||||
XMoveResizeWindow(X11Utils::XDisplayFromHandle(GetHandle()),
|
||||
(Window) Core::GetWindowHandle(),
|
||||
client_rect.x, client_rect.y,
|
||||
client_rect.width, client_rect.height);
|
||||
#endif
|
||||
m_LogWindow->Refresh();
|
||||
m_LogWindow->Update();
|
||||
@ -780,7 +818,7 @@ void CFrame::OnRenderParentResize(wxSizeEvent& event)
|
||||
void CFrame::ToggleDisplayMode(bool bFullscreen)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
if (bFullscreen)
|
||||
if (bFullscreen && SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution != "Auto")
|
||||
{
|
||||
DEVMODE dmScreenSettings;
|
||||
memset(&dmScreenSettings,0,sizeof(dmScreenSettings));
|
||||
@ -799,7 +837,8 @@ void CFrame::ToggleDisplayMode(bool bFullscreen)
|
||||
ChangeDisplaySettings(NULL, CDS_FULLSCREEN);
|
||||
}
|
||||
#elif defined(HAVE_XRANDR) && HAVE_XRANDR
|
||||
m_XRRConfig->ToggleDisplayMode(bFullscreen);
|
||||
if (SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution != "Auto")
|
||||
m_XRRConfig->ToggleDisplayMode(bFullscreen);
|
||||
#elif defined __APPLE__
|
||||
if(bFullscreen)
|
||||
CGDisplayHideCursor(CGMainDisplayID());
|
||||
@ -1115,6 +1154,7 @@ void CFrame::OnConfigMain(wxCommandEvent& WXUNUSED (event))
|
||||
CConfigMain ConfigMain(this);
|
||||
if (ConfigMain.ShowModal() == wxID_OK)
|
||||
m_GameListCtrl->Update();
|
||||
UpdateGUI();
|
||||
}
|
||||
|
||||
void CFrame::OnConfigGFX(wxCommandEvent& WXUNUSED (event))
|
||||
@ -1437,10 +1477,20 @@ void CFrame::OnSaveStateToFile(wxCommandEvent& WXUNUSED (event))
|
||||
State::SaveAs(WxStrToStr(path));
|
||||
}
|
||||
|
||||
void CFrame::OnLoadLastState(wxCommandEvent& WXUNUSED (event))
|
||||
void CFrame::OnLoadLastState(wxCommandEvent& event)
|
||||
{
|
||||
if (Core::IsRunningAndStarted())
|
||||
State::LoadLastSaved();
|
||||
{
|
||||
int id = event.GetId();
|
||||
int slot = id - IDM_LOADLAST1 + 1;
|
||||
State::LoadLastSaved(slot);
|
||||
}
|
||||
}
|
||||
|
||||
void CFrame::OnSaveFirstState(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||
State::SaveFirstSaved();
|
||||
}
|
||||
|
||||
void CFrame::OnUndoLoadState(wxCommandEvent& WXUNUSED (event))
|
||||
@ -1540,10 +1590,14 @@ void CFrame::UpdateGUI()
|
||||
if (DiscIO::CNANDContentManager::Access().GetNANDLoader(TITLEID_SYSMENU).IsValid())
|
||||
GetMenuBar()->FindItem(IDM_LOAD_WII_MENU)->Enable(!Initialized);
|
||||
|
||||
// Tools
|
||||
GetMenuBar()->FindItem(IDM_CHEATS)->Enable(SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats);
|
||||
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE1)->Enable(RunningWii);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE2)->Enable(RunningWii);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE3)->Enable(RunningWii);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE4)->Enable(RunningWii);
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_BALANCEBOARD)->Enable(RunningWii);
|
||||
GetMenuBar()->FindItem(IDM_CONFIG_WIIMOTE_PLUGIN)->Enable(!RunningGamecube);
|
||||
if (RunningWii)
|
||||
{
|
||||
@ -1555,6 +1609,8 @@ void CFrame::UpdateGUI()
|
||||
AccessWiiMote(0x0102)->IsConnected());
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_WIIMOTE4)->Check(GetUsbPointer()->
|
||||
AccessWiiMote(0x0103)->IsConnected());
|
||||
GetMenuBar()->FindItem(IDM_CONNECT_BALANCEBOARD)->Check(GetUsbPointer()->
|
||||
AccessWiiMote(0x0104)->IsConnected());
|
||||
}
|
||||
|
||||
if (Running)
|
||||
@ -1647,6 +1703,15 @@ void CFrame::UpdateGUI()
|
||||
|
||||
// Commit changes to manager
|
||||
m_Mgr->Update();
|
||||
|
||||
// Update non-modal windows
|
||||
if (g_CheatsWindow)
|
||||
{
|
||||
if (SConfig::GetInstance().m_LocalCoreStartupParameter.bEnableCheats)
|
||||
g_CheatsWindow->UpdateGUI();
|
||||
else
|
||||
g_CheatsWindow->Close();
|
||||
}
|
||||
}
|
||||
|
||||
void CFrame::UpdateGameList()
|
||||
|
@ -2,8 +2,8 @@
|
||||
// Licensed under GPLv2
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#ifndef __HOTKEYDIALOG_h__
|
||||
#define __HOTKEYDIALOG_h__
|
||||
#ifndef __GCMICDIALOG_h__
|
||||
#define __GCMICDIALOG_h__
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <wx/textctrl.h>
|
||||
|
@ -52,7 +52,16 @@ bool cInterfaceEGL::Create(void *&window_handle)
|
||||
EGL_BLUE_SIZE, 8,
|
||||
EGL_DEPTH_SIZE, 24,
|
||||
#ifdef USE_GLES
|
||||
#ifdef USE_GLES3
|
||||
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
|
||||
|
||||
// OpenGL ES 3 bit is disabled for now, until we have a way to select it from runtime
|
||||
// Qualcomm drivers don't even care if it is ES2 or ES3 bit set.
|
||||
// Intel drivers /might/ not care, but that code path is untested
|
||||
// EGL_RENDERABLE_TYPE, (1 << 6) /* EGL_OPENGL_ES3_BIT */,
|
||||
#else
|
||||
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
|
||||
#endif
|
||||
#else
|
||||
EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
|
||||
#endif
|
||||
|
@ -18,7 +18,11 @@
|
||||
#define _INTERFACEEGL_H_
|
||||
|
||||
#if USE_GLES
|
||||
#ifdef USE_GLES3
|
||||
#include <GLES3/gl3.h>
|
||||
#else
|
||||
#include <GLES2/gl2.h>
|
||||
#endif
|
||||
#else
|
||||
#include <GL/glxew.h>
|
||||
#include <GL/gl.h>
|
||||
|
@ -25,7 +25,7 @@
|
||||
// Show the current FPS
|
||||
void cInterfaceGLX::UpdateFPSDisplay(const char *text)
|
||||
{
|
||||
XStoreName(GLWin.dpy, GLWin.win, text);
|
||||
XStoreName(GLWin.evdpy, GLWin.win, text);
|
||||
}
|
||||
|
||||
void cInterfaceGLX::SwapInterval(int Interval)
|
||||
@ -136,7 +136,7 @@ bool cInterfaceGLX::MakeCurrent()
|
||||
#if defined(HAVE_WX) && (HAVE_WX)
|
||||
Host_GetRenderWindowSize(GLWin.x, GLWin.y,
|
||||
(int&)GLWin.width, (int&)GLWin.height);
|
||||
XMoveResizeWindow(GLWin.dpy, GLWin.win, GLWin.x, GLWin.y,
|
||||
XMoveResizeWindow(GLWin.evdpy, GLWin.win, GLWin.x, GLWin.y,
|
||||
GLWin.width, GLWin.height);
|
||||
#endif
|
||||
return glXMakeCurrent(GLWin.dpy, GLWin.win, GLWin.ctx);
|
||||
|
@ -115,7 +115,10 @@ out:
|
||||
#if HAVE_X11
|
||||
if (selected_platform != EGL_PLATFORM_X11) {
|
||||
if (GLWin.dpy)
|
||||
{
|
||||
XCloseDisplay(GLWin.dpy);
|
||||
XCloseDisplay(GLWin.evdpy);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (selected_platform == EGL_PLATFORM_NONE)
|
||||
|
@ -16,7 +16,6 @@
|
||||
// http://code.google.com/p/dolphin-emu/
|
||||
|
||||
#include "Host.h"
|
||||
#include "RenderBase.h"
|
||||
#include "VideoConfig.h"
|
||||
#include "../GLInterface.h"
|
||||
#include "VertexShaderManager.h"
|
||||
@ -24,9 +23,9 @@
|
||||
#if USE_EGL
|
||||
bool cXInterface::ServerConnect(void)
|
||||
{
|
||||
GLWin.evdpy = XOpenDisplay(NULL);
|
||||
GLWin.dpy = XOpenDisplay(NULL);
|
||||
|
||||
if (!GLWin.evdpy)
|
||||
if (!GLWin.dpy)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@ -39,7 +38,7 @@ bool cXInterface::Initialize(void *config)
|
||||
int num_visuals;
|
||||
EGLint vid;
|
||||
|
||||
if (!GLWin.evdpy) {
|
||||
if (!GLWin.dpy) {
|
||||
printf("Error: couldn't open X display\n");
|
||||
return false;
|
||||
}
|
||||
@ -51,7 +50,7 @@ bool cXInterface::Initialize(void *config)
|
||||
|
||||
/* The X window visual must match the EGL config */
|
||||
visTemplate.visualid = vid;
|
||||
GLWin.vi = XGetVisualInfo(GLWin.evdpy, VisualIDMask, &visTemplate, &num_visuals);
|
||||
GLWin.vi = XGetVisualInfo(GLWin.dpy, VisualIDMask, &visTemplate, &num_visuals);
|
||||
if (!GLWin.vi) {
|
||||
printf("Error: couldn't get X visual\n");
|
||||
exit(1);
|
||||
@ -64,12 +63,12 @@ bool cXInterface::Initialize(void *config)
|
||||
GLWin.width = _twidth;
|
||||
GLWin.height = _theight;
|
||||
|
||||
GLWin.dpy = XOpenDisplay(NULL);
|
||||
GLWin.evdpy = XOpenDisplay(NULL);
|
||||
GLWin.parent = GLWin.win;
|
||||
GLWin.screen = DefaultScreen(GLWin.evdpy);
|
||||
GLWin.screen = DefaultScreen(GLWin.dpy);
|
||||
|
||||
if (GLWin.parent == 0)
|
||||
GLWin.parent = RootWindow(GLWin.evdpy, GLWin.screen);
|
||||
GLWin.parent = RootWindow(GLWin.dpy, GLWin.screen);
|
||||
|
||||
/* Set initial projection/viewing transformation.
|
||||
* We can't be sure we'll get a ConfigureNotify event when the window
|
||||
@ -82,7 +81,7 @@ bool cXInterface::Initialize(void *config)
|
||||
|
||||
void *cXInterface::EGLGetDisplay(void)
|
||||
{
|
||||
return eglGetDisplay(GLWin.evdpy);
|
||||
return eglGetDisplay(GLWin.dpy);
|
||||
}
|
||||
|
||||
void *cXInterface::CreateWindow(void)
|
||||
@ -90,22 +89,22 @@ void *cXInterface::CreateWindow(void)
|
||||
Atom wmProtocols[1];
|
||||
|
||||
// Setup window attributes
|
||||
GLWin.attr.colormap = XCreateColormap(GLWin.dpy,
|
||||
GLWin.attr.colormap = XCreateColormap(GLWin.evdpy,
|
||||
GLWin.parent, GLWin.vi->visual, AllocNone);
|
||||
GLWin.attr.event_mask = KeyPressMask | StructureNotifyMask | FocusChangeMask;
|
||||
GLWin.attr.background_pixel = BlackPixel(GLWin.dpy, GLWin.screen);
|
||||
GLWin.attr.background_pixel = BlackPixel(GLWin.evdpy, GLWin.screen);
|
||||
GLWin.attr.border_pixel = 0;
|
||||
|
||||
// Create the window
|
||||
GLWin.win = XCreateWindow(GLWin.dpy, GLWin.parent,
|
||||
GLWin.win = XCreateWindow(GLWin.evdpy, GLWin.parent,
|
||||
GLWin.x, GLWin.y, GLWin.width, GLWin.height, 0,
|
||||
GLWin.vi->depth, InputOutput, GLWin.vi->visual,
|
||||
CWBorderPixel | CWBackPixel | CWColormap | CWEventMask, &GLWin.attr);
|
||||
wmProtocols[0] = XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", True);
|
||||
XSetWMProtocols(GLWin.dpy, GLWin.win, wmProtocols, 1);
|
||||
XSetStandardProperties(GLWin.dpy, GLWin.win, "GPU", "GPU", None, NULL, 0, NULL);
|
||||
XMapRaised(GLWin.dpy, GLWin.win);
|
||||
XSync(GLWin.dpy, True);
|
||||
wmProtocols[0] = XInternAtom(GLWin.evdpy, "WM_DELETE_WINDOW", True);
|
||||
XSetWMProtocols(GLWin.evdpy, GLWin.win, wmProtocols, 1);
|
||||
XSetStandardProperties(GLWin.evdpy, GLWin.win, "GPU", "GPU", None, NULL, 0, NULL);
|
||||
XMapRaised(GLWin.evdpy, GLWin.win);
|
||||
XSync(GLWin.evdpy, True);
|
||||
|
||||
GLWin.xEventThread = std::thread(&cXInterface::XEventThread, this);
|
||||
// Control window size and picture scaling
|
||||
@ -116,16 +115,16 @@ void *cXInterface::CreateWindow(void)
|
||||
|
||||
void cXInterface::DestroyWindow(void)
|
||||
{
|
||||
XDestroyWindow(GLWin.dpy, GLWin.win);
|
||||
XDestroyWindow(GLWin.evdpy, GLWin.win);
|
||||
GLWin.win = 0;
|
||||
if (GLWin.xEventThread.joinable())
|
||||
GLWin.xEventThread.join();
|
||||
XFreeColormap(GLWin.dpy, GLWin.attr.colormap);
|
||||
XFreeColormap(GLWin.evdpy, GLWin.attr.colormap);
|
||||
}
|
||||
|
||||
void cXInterface::UpdateFPSDisplay(const char *text)
|
||||
{
|
||||
XStoreName(GLWin.dpy, GLWin.win, text);
|
||||
XStoreName(GLWin.evdpy, GLWin.win, text);
|
||||
}
|
||||
|
||||
void cXInterface::XEventThread()
|
||||
@ -157,7 +156,7 @@ void cX11Window::CreateXWindow(void)
|
||||
|
||||
void cX11Window::DestroyXWindow(void)
|
||||
{
|
||||
XUnmapWindow(GLWin.dpy, GLWin.win);
|
||||
XUnmapWindow(GLWin.evdpy, GLWin.win);
|
||||
GLWin.win = 0;
|
||||
if (GLWin.xEventThread.joinable())
|
||||
GLWin.xEventThread.join();
|
||||
@ -174,82 +173,10 @@ void cX11Window::XEventThread()
|
||||
while (GLWin.win)
|
||||
{
|
||||
XEvent event;
|
||||
KeySym key;
|
||||
for (int num_events = XPending(GLWin.dpy); num_events > 0; num_events--)
|
||||
for (int num_events = XPending(GLWin.evdpy); num_events > 0; num_events--)
|
||||
{
|
||||
XNextEvent(GLWin.dpy, &event);
|
||||
XNextEvent(GLWin.evdpy, &event);
|
||||
switch(event.type) {
|
||||
case KeyPress:
|
||||
key = XLookupKeysym((XKeyEvent*)&event, 0);
|
||||
if (g_Config.bOSDHotKey)
|
||||
{
|
||||
switch (key)
|
||||
{
|
||||
case XK_3:
|
||||
OSDChoice = 1;
|
||||
// Toggle native resolution
|
||||
g_Config.iEFBScale = g_Config.iEFBScale + 1;
|
||||
if (g_Config.iEFBScale > 7) g_Config.iEFBScale = 0;
|
||||
break;
|
||||
|
||||
case XK_4:
|
||||
OSDChoice = 2;
|
||||
// Toggle aspect ratio
|
||||
g_Config.iAspectRatio = (g_Config.iAspectRatio + 1) & 3;
|
||||
break;
|
||||
|
||||
case XK_5:
|
||||
OSDChoice = 3;
|
||||
// Toggle EFB copy
|
||||
if (!g_Config.bEFBCopyEnable || g_Config.bCopyEFBToTexture)
|
||||
{
|
||||
g_Config.bEFBCopyEnable ^= true;
|
||||
g_Config.bCopyEFBToTexture = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
g_Config.bCopyEFBToTexture = !g_Config.bCopyEFBToTexture;
|
||||
}
|
||||
break;
|
||||
|
||||
case XK_6:
|
||||
OSDChoice = 4;
|
||||
g_Config.bDisableFog = !g_Config.bDisableFog;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (g_Config.bFreeLook)
|
||||
{
|
||||
static float debugSpeed = 1.0f;
|
||||
switch (key)
|
||||
{
|
||||
case XK_parenleft:
|
||||
debugSpeed /= 2.0f;
|
||||
break;
|
||||
case XK_parenright:
|
||||
debugSpeed *= 2.0f;
|
||||
break;
|
||||
case XK_w:
|
||||
VertexShaderManager::TranslateView(0.0f, debugSpeed);
|
||||
break;
|
||||
case XK_s:
|
||||
VertexShaderManager::TranslateView(0.0f, -debugSpeed);
|
||||
break;
|
||||
case XK_a:
|
||||
VertexShaderManager::TranslateView(debugSpeed, 0.0f);
|
||||
break;
|
||||
case XK_d:
|
||||
VertexShaderManager::TranslateView(-debugSpeed, 0.0f);
|
||||
break;
|
||||
case XK_r:
|
||||
VertexShaderManager::ResetView();
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ButtonPress:
|
||||
if (g_Config.bFreeLook)
|
||||
{
|
||||
@ -303,21 +230,12 @@ void cX11Window::XEventThread()
|
||||
}
|
||||
break;
|
||||
case ConfigureNotify:
|
||||
Window winDummy;
|
||||
unsigned int borderDummy, depthDummy;
|
||||
XGetGeometry(GLWin.dpy, GLWin.win, &winDummy, &GLWin.x, &GLWin.y,
|
||||
&GLWin.width, &GLWin.height, &borderDummy, &depthDummy);
|
||||
GLInterface->SetBackBufferDimensions(GLWin.width, GLWin.height);
|
||||
GLInterface->SetBackBufferDimensions(event.xconfigure.width, event.xconfigure.height);
|
||||
break;
|
||||
case ClientMessage:
|
||||
if ((unsigned long) event.xclient.data.l[0] ==
|
||||
XInternAtom(GLWin.dpy, "WM_DELETE_WINDOW", False))
|
||||
XInternAtom(GLWin.evdpy, "WM_DELETE_WINDOW", False))
|
||||
Host_Message(WM_USER_STOP);
|
||||
if ((unsigned long) event.xclient.data.l[0] ==
|
||||
XInternAtom(GLWin.dpy, "RESIZE", False))
|
||||
XMoveResizeWindow(GLWin.dpy, GLWin.win,
|
||||
event.xclient.data.l[1], event.xclient.data.l[2],
|
||||
event.xclient.data.l[3], event.xclient.data.l[4]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "WxUtils.h"
|
||||
#include "Main.h"
|
||||
#include "MathUtil.h"
|
||||
#include "HW/DVDInterface.h"
|
||||
|
||||
#include "../resources/Flag_Europe.xpm"
|
||||
#include "../resources/Flag_Germany.xpm"
|
||||
@ -174,6 +175,8 @@ CGameListCtrl::CGameListCtrl(wxWindow* parent, const wxWindowID id, const
|
||||
wxPoint& pos, const wxSize& size, long style)
|
||||
: wxListCtrl(parent, id, pos, size, style), toolTip(0)
|
||||
{
|
||||
DragAcceptFiles(true);
|
||||
Connect(wxEVT_DROP_FILES, wxDropFilesEventHandler(CGameListCtrl::OnDropFiles), NULL, this);
|
||||
}
|
||||
|
||||
CGameListCtrl::~CGameListCtrl()
|
||||
@ -1298,4 +1301,36 @@ void CGameListCtrl::UnselectAll()
|
||||
}
|
||||
}
|
||||
|
||||
void CGameListCtrl::OnDropFiles(wxDropFilesEvent& event)
|
||||
{
|
||||
if (event.GetNumberOfFiles() != 1)
|
||||
return;
|
||||
if (File::IsDirectory(WxStrToStr(event.GetFiles()[0])))
|
||||
return;
|
||||
|
||||
wxFileName file = event.GetFiles()[0];
|
||||
|
||||
if (file.GetExt() == "dtm")
|
||||
{
|
||||
if (Core::IsRunning())
|
||||
return;
|
||||
|
||||
if (!Movie::IsReadOnly())
|
||||
{
|
||||
// let's make the read-only flag consistent at the start of a movie.
|
||||
Movie::SetReadOnly(true);
|
||||
main_frame->GetMenuBar()->FindItem(IDM_RECORDREADONLY)->Check(true);
|
||||
}
|
||||
|
||||
if (Movie::PlayInput(file.GetFullPath().c_str()))
|
||||
main_frame->BootGame(std::string(""));
|
||||
}
|
||||
else if (!Core::IsRunning())
|
||||
{
|
||||
main_frame->BootGame(WxStrToStr(file.GetFullPath()));
|
||||
}
|
||||
else
|
||||
{
|
||||
DVDInterface::ChangeDisc(WxStrToStr(file.GetFullPath()).c_str());
|
||||
}
|
||||
}
|
||||
|
@ -97,6 +97,7 @@ private:
|
||||
void OnMultiCompressGCM(wxCommandEvent& event);
|
||||
void OnMultiDecompressGCM(wxCommandEvent& event);
|
||||
void OnInstallWAD(wxCommandEvent& event);
|
||||
void OnDropFiles(wxDropFilesEvent& event);
|
||||
|
||||
void CompressSelection(bool _compress);
|
||||
void AutomaticColumnWidth();
|
||||
|
@ -3,6 +3,7 @@
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include "GeckoCodeDiag.h"
|
||||
#include "Core.h"
|
||||
#include "WxUtils.h"
|
||||
|
||||
#include <SFML/Network/Http.hpp>
|
||||
@ -41,7 +42,8 @@ CodeConfigPanel::CodeConfigPanel(wxWindow* const parent)
|
||||
|
||||
// button sizer
|
||||
wxBoxSizer* const sizer_buttons = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxButton* const btn_download = new wxButton(this, -1, _("Download Codes (WiiRD Database)"), wxDefaultPosition, wxSize(128, -1));
|
||||
btn_download = new wxButton(this, -1, _("Download Codes (WiiRD Database)"), wxDefaultPosition, wxSize(128, -1));
|
||||
btn_download->Enable(false);
|
||||
btn_download->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &CodeConfigPanel::DownloadCodes, this);
|
||||
sizer_buttons->AddStretchSpacer(1);
|
||||
sizer_buttons->Add(btn_download, 1, wxEXPAND);
|
||||
@ -58,8 +60,11 @@ CodeConfigPanel::CodeConfigPanel(wxWindow* const parent)
|
||||
SetSizerAndFit(sizer_main);
|
||||
}
|
||||
|
||||
void CodeConfigPanel::UpdateCodeList()
|
||||
void CodeConfigPanel::UpdateCodeList(bool checkRunning)
|
||||
{
|
||||
// disable the button if it doesn't have an effect
|
||||
btn_download->Enable((!checkRunning || Core::IsRunning()) && !m_gameid.empty());
|
||||
|
||||
m_listbox_gcodes->Clear();
|
||||
// add the codes to the listbox
|
||||
std::vector<GeckoCode>::const_iterator
|
||||
@ -76,14 +81,15 @@ void CodeConfigPanel::UpdateCodeList()
|
||||
UpdateInfoBox(evt);
|
||||
}
|
||||
|
||||
void CodeConfigPanel::LoadCodes(const IniFile& inifile, const std::string& gameid)
|
||||
void CodeConfigPanel::LoadCodes(const IniFile& inifile, const std::string& gameid, bool checkRunning)
|
||||
{
|
||||
m_gameid = gameid;
|
||||
|
||||
m_gcodes.clear();
|
||||
Gecko::LoadCodes(inifile, m_gcodes);
|
||||
if (!checkRunning || Core::IsRunning())
|
||||
Gecko::LoadCodes(inifile, m_gcodes);
|
||||
|
||||
UpdateCodeList();
|
||||
UpdateCodeList(checkRunning);
|
||||
}
|
||||
|
||||
void CodeConfigPanel::ToggleCode(wxCommandEvent& evt)
|
||||
@ -277,9 +283,8 @@ void CodeConfigPanel::DownloadCodes(wxCommandEvent&)
|
||||
break;
|
||||
}
|
||||
|
||||
// code with this name+creator exists
|
||||
if (existing_gcodes_iter->name == gcodes_iter->name &&
|
||||
existing_gcodes_iter->creator == gcodes_iter->creator)
|
||||
// code exists
|
||||
if (existing_gcodes_iter->Compare(*gcodes_iter))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ public:
|
||||
CodeConfigPanel(wxWindow* const parent);
|
||||
|
||||
|
||||
void LoadCodes(const IniFile& inifile, const std::string& gameid = "");
|
||||
void LoadCodes(const IniFile& inifile, const std::string& gameid = "", bool checkRunning = false);
|
||||
const std::vector<GeckoCode>& GetCodes() const { return m_gcodes; }
|
||||
|
||||
protected:
|
||||
@ -29,7 +29,7 @@ protected:
|
||||
void DownloadCodes(wxCommandEvent&);
|
||||
//void ApplyChanges(wxCommandEvent&);
|
||||
|
||||
void UpdateCodeList();
|
||||
void UpdateCodeList(bool checkRunning = false);
|
||||
|
||||
private:
|
||||
std::vector<GeckoCode> m_gcodes;
|
||||
@ -44,7 +44,7 @@ private:
|
||||
wxTextCtrl *textctrl_notes;
|
||||
wxListBox *listbox_codes;
|
||||
} m_infobox;
|
||||
|
||||
wxButton* btn_download;
|
||||
};
|
||||
|
||||
|
||||
|
@ -25,7 +25,7 @@ enum
|
||||
{
|
||||
IDM_LOADSTATE = 200, // File menu
|
||||
IDM_SAVESTATE,
|
||||
IDM_LOADLASTSTATE,
|
||||
IDM_SAVEFIRSTSTATE,
|
||||
IDM_UNDOLOADSTATE,
|
||||
IDM_UNDOSAVESTATE,
|
||||
IDM_LOADSTATEFILE,
|
||||
@ -46,6 +46,14 @@ enum
|
||||
IDM_LOADSLOT6,
|
||||
IDM_LOADSLOT7,
|
||||
IDM_LOADSLOT8,
|
||||
IDM_LOADLAST1,
|
||||
IDM_LOADLAST2,
|
||||
IDM_LOADLAST3,
|
||||
IDM_LOADLAST4,
|
||||
IDM_LOADLAST5,
|
||||
IDM_LOADLAST6,
|
||||
IDM_LOADLAST7,
|
||||
IDM_LOADLAST8,
|
||||
IDM_FRAMESKIP0,
|
||||
IDM_FRAMESKIP1,
|
||||
IDM_FRAMESKIP2,
|
||||
@ -89,6 +97,7 @@ enum
|
||||
IDM_CONNECT_WIIMOTE2,
|
||||
IDM_CONNECT_WIIMOTE3,
|
||||
IDM_CONNECT_WIIMOTE4,
|
||||
IDM_CONNECT_BALANCEBOARD,
|
||||
|
||||
IDM_LISTWAD,
|
||||
IDM_LISTWII,
|
||||
|
@ -179,11 +179,13 @@ void HotkeyConfigDialog::CreateHotkeyGUIControls(void)
|
||||
|
||||
_("Toggle Fullscreen"),
|
||||
_("Take Screenshot"),
|
||||
_("Exit"),
|
||||
|
||||
_("Connect Wiimote 1"),
|
||||
_("Connect Wiimote 2"),
|
||||
_("Connect Wiimote 3"),
|
||||
_("Connect Wiimote 4"),
|
||||
_("Connect Balance Board"),
|
||||
|
||||
_("Load State Slot 1"),
|
||||
_("Load State Slot 2"),
|
||||
@ -201,7 +203,22 @@ void HotkeyConfigDialog::CreateHotkeyGUIControls(void)
|
||||
_("Save State Slot 5"),
|
||||
_("Save State Slot 6"),
|
||||
_("Save State Slot 7"),
|
||||
_("Save State Slot 8")
|
||||
_("Save State Slot 8"),
|
||||
|
||||
_("Load State Last 1"),
|
||||
_("Load State Last 2"),
|
||||
_("Load State Last 3"),
|
||||
_("Load State Last 4"),
|
||||
_("Load State Last 5"),
|
||||
_("Load State Last 6"),
|
||||
_("Load State Last 7"),
|
||||
_("Load State Last 8"),
|
||||
|
||||
_("Save Oldest State"),
|
||||
_("Undo Load State"),
|
||||
_("Undo Save State"),
|
||||
_("Save State"),
|
||||
_("Load State"),
|
||||
};
|
||||
|
||||
const int page_breaks[3] = {HK_OPEN, HK_LOAD_STATE_SLOT_1, NUM_HOTKEYS};
|
||||
|
@ -615,24 +615,26 @@ void CISOProperties::OnRightClickOnTree(wxTreeEvent& event)
|
||||
|
||||
if (m_Treectrl->GetItemImage(m_Treectrl->GetSelection()) == 0
|
||||
&& m_Treectrl->GetFirstVisibleItem() != m_Treectrl->GetSelection())
|
||||
{
|
||||
popupMenu->Append(IDM_EXTRACTDIR, _("Extract Partition..."));
|
||||
}
|
||||
else if (m_Treectrl->GetItemImage(m_Treectrl->GetSelection()) == 1)
|
||||
popupMenu->Append(IDM_EXTRACTDIR, _("Extract Directory..."));
|
||||
else if (m_Treectrl->GetItemImage(m_Treectrl->GetSelection()) == 2)
|
||||
popupMenu->Append(IDM_EXTRACTFILE, _("Extract File..."));
|
||||
|
||||
|
||||
popupMenu->Append(IDM_EXTRACTALL, _("Extract All Files..."));
|
||||
popupMenu->AppendSeparator();
|
||||
popupMenu->Append(IDM_EXTRACTAPPLOADER, _("Extract Apploader..."));
|
||||
popupMenu->Append(IDM_EXTRACTDOL, _("Extract DOL..."));
|
||||
|
||||
|
||||
if (m_Treectrl->GetItemImage(m_Treectrl->GetSelection()) == 0
|
||||
&& m_Treectrl->GetFirstVisibleItem() != m_Treectrl->GetSelection())
|
||||
{
|
||||
popupMenu->AppendSeparator();
|
||||
popupMenu->Append(IDM_EXTRACTAPPLOADER, _("Extract Apploader..."));
|
||||
popupMenu->Append(IDM_EXTRACTDOL, _("Extract DOL..."));
|
||||
popupMenu->AppendSeparator();
|
||||
popupMenu->Append(IDM_CHECKINTEGRITY, _("Check Partition Integrity"));
|
||||
}
|
||||
|
||||
|
||||
PopupMenu(popupMenu);
|
||||
|
||||
event.Skip();
|
||||
@ -818,17 +820,34 @@ void CISOProperties::OnExtractDir(wxCommandEvent& event)
|
||||
void CISOProperties::OnExtractDataFromHeader(wxCommandEvent& event)
|
||||
{
|
||||
std::vector<const DiscIO::SFileInfo *> fst;
|
||||
DiscIO::IFileSystem *FS = 0;
|
||||
DiscIO::IFileSystem *FS = NULL;
|
||||
wxString Path = wxDirSelector(_("Choose the folder to extract to"));
|
||||
|
||||
if (Path.empty())
|
||||
return;
|
||||
|
||||
if (DiscIO::IsVolumeWiiDisc(OpenISO))
|
||||
FS = WiiDisc.at(1).FileSystem;
|
||||
{
|
||||
wxString Directory = m_Treectrl->GetItemText(m_Treectrl->GetSelection());
|
||||
std::size_t partitionNum = (std::size_t)wxAtoi(Directory.Mid(Directory.find_first_of("/"), 1));
|
||||
Directory.Remove(0, Directory.find_first_of("/") +1); // Remove "Partition x/"
|
||||
|
||||
if(WiiDisc.size() > partitionNum)
|
||||
{
|
||||
// Get the filesystem of the LAST partition
|
||||
FS = WiiDisc.at(partitionNum).FileSystem;
|
||||
}
|
||||
else
|
||||
{
|
||||
PanicAlertT("Partition doesn't exist: %lu", partitionNum);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FS = pFileSystem;
|
||||
|
||||
}
|
||||
|
||||
bool ret = false;
|
||||
if (event.GetId() == IDM_EXTRACTAPPLOADER)
|
||||
{
|
||||
|
@ -5,6 +5,10 @@
|
||||
#include "InputConfigDiag.h"
|
||||
#include "UDPConfigDiag.h"
|
||||
#include "WxUtils.h"
|
||||
#include "HW/Wiimote.h"
|
||||
#include "ControllerInterface/ExpressionParser.h"
|
||||
|
||||
using namespace ciface::ExpressionParser;
|
||||
|
||||
void GamepadPage::ConfigUDPWii(wxCommandEvent &event)
|
||||
{
|
||||
@ -183,13 +187,13 @@ void ControlDialog::UpdateListContents()
|
||||
{
|
||||
control_lbox->Clear();
|
||||
|
||||
ControllerInterface::Device* const dev = g_controller_interface.FindDevice(m_devq);
|
||||
Device* const dev = g_controller_interface.FindDevice(m_devq);
|
||||
if (dev)
|
||||
{
|
||||
if (control_reference->is_input)
|
||||
{
|
||||
// for inputs
|
||||
std::vector<ControllerInterface::Device::Input*>::const_iterator
|
||||
std::vector<Device::Input*>::const_iterator
|
||||
i = dev->Inputs().begin(),
|
||||
e = dev->Inputs().end();
|
||||
for (; i!=e; ++i)
|
||||
@ -198,7 +202,7 @@ void ControlDialog::UpdateListContents()
|
||||
else
|
||||
{
|
||||
// for outputs
|
||||
std::vector<ControllerInterface::Device::Output*>::const_iterator
|
||||
std::vector<Device::Output*>::const_iterator
|
||||
i = dev->Outputs().begin(),
|
||||
e = dev->Outputs().end();
|
||||
for (; i!=e; ++i)
|
||||
@ -224,6 +228,18 @@ void ControlDialog::UpdateGUI()
|
||||
// updates the "bound controls:" label
|
||||
m_bound_label->SetLabel(wxString::Format(_("Bound Controls: %lu"),
|
||||
(unsigned long)control_reference->BoundCount()));
|
||||
|
||||
switch (control_reference->parse_error)
|
||||
{
|
||||
case EXPRESSION_PARSE_SYNTAX_ERROR:
|
||||
m_error_label->SetLabel("Syntax error");
|
||||
break;
|
||||
case EXPRESSION_PARSE_NO_DEVICE:
|
||||
m_error_label->SetLabel("Device not found");
|
||||
break;
|
||||
default:
|
||||
m_error_label->SetLabel("");
|
||||
}
|
||||
};
|
||||
|
||||
void GamepadPage::UpdateGUI()
|
||||
@ -237,11 +253,11 @@ void GamepadPage::UpdateGUI()
|
||||
// buttons
|
||||
std::vector<ControlButton*>::const_iterator i = (*g)->control_buttons.begin()
|
||||
, e = (*g)->control_buttons.end();
|
||||
for (; i!=e; ++i)
|
||||
//if (std::string::npos == (*i)->control_reference->expression.find_first_of("`|&!#"))
|
||||
(*i)->SetLabel(StrToWxStr((*i)->control_reference->expression));
|
||||
//else
|
||||
//(*i)->SetLabel(wxT("..."));
|
||||
for (; i!=e; ++i) {
|
||||
wxString expr = StrToWxStr((*i)->control_reference->expression);
|
||||
expr.Replace("&", "&&");
|
||||
(*i)->SetLabel(expr);
|
||||
}
|
||||
|
||||
// cboxes
|
||||
std::vector<PadSetting*>::const_iterator si = (*g)->options.begin()
|
||||
@ -276,7 +292,7 @@ void GamepadPage::LoadDefaults(wxCommandEvent&)
|
||||
UpdateGUI();
|
||||
}
|
||||
|
||||
void ControlDialog::SetControl(wxCommandEvent&)
|
||||
bool ControlDialog::Validate()
|
||||
{
|
||||
control_reference->expression = WxStrToStr(textctrl->GetValue());
|
||||
|
||||
@ -284,6 +300,8 @@ void ControlDialog::SetControl(wxCommandEvent&)
|
||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||
|
||||
UpdateGUI();
|
||||
|
||||
return (control_reference->parse_error == EXPRESSION_PARSE_SUCCESS);
|
||||
}
|
||||
|
||||
void GamepadPage::SetDevice(wxCommandEvent&)
|
||||
@ -322,23 +340,60 @@ void ControlDialog::ClearControl(wxCommandEvent&)
|
||||
UpdateGUI();
|
||||
}
|
||||
|
||||
void ControlDialog::SetSelectedControl(wxCommandEvent&)
|
||||
inline bool IsAlphabetic(wxString &str)
|
||||
{
|
||||
for (wxString::const_iterator it = str.begin(); it != str.end(); ++it)
|
||||
if (!isalpha(*it))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline void GetExpressionForControl(wxString &expr,
|
||||
wxString &control_name,
|
||||
DeviceQualifier *control_device = NULL,
|
||||
DeviceQualifier *default_device = NULL)
|
||||
{
|
||||
expr = "";
|
||||
|
||||
// non-default device
|
||||
if (control_device && default_device && !(*control_device == *default_device))
|
||||
{
|
||||
expr += control_device->ToString();
|
||||
expr += ":";
|
||||
}
|
||||
|
||||
// append the control name
|
||||
expr += control_name;
|
||||
|
||||
if (!IsAlphabetic(expr))
|
||||
expr = wxString::Format("`%s`", expr);
|
||||
}
|
||||
|
||||
bool ControlDialog::GetExpressionForSelectedControl(wxString &expr)
|
||||
{
|
||||
const int num = control_lbox->GetSelection();
|
||||
|
||||
if (num < 0)
|
||||
return;
|
||||
return false;
|
||||
|
||||
wxString control_name = control_lbox->GetString(num);
|
||||
GetExpressionForControl(expr,
|
||||
control_name,
|
||||
&m_devq,
|
||||
&m_parent->controller->default_device);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void ControlDialog::SetSelectedControl(wxCommandEvent&)
|
||||
{
|
||||
wxString expr;
|
||||
|
||||
// non-default device
|
||||
if (false == (m_devq == m_parent->controller->default_device))
|
||||
expr.append(wxT('`')).append(StrToWxStr(m_devq.ToString())).append(wxT('`'));
|
||||
if (!GetExpressionForSelectedControl(expr))
|
||||
return;
|
||||
|
||||
// append the control name
|
||||
expr += control_lbox->GetString(num);
|
||||
|
||||
control_reference->expression = WxStrToStr(expr);
|
||||
textctrl->WriteText(expr);
|
||||
control_reference->expression = textctrl->GetValue();
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||
@ -348,28 +403,30 @@ void ControlDialog::SetSelectedControl(wxCommandEvent&)
|
||||
|
||||
void ControlDialog::AppendControl(wxCommandEvent& event)
|
||||
{
|
||||
const int num = control_lbox->GetSelection();
|
||||
wxString device_expr, expr;
|
||||
|
||||
if (num < 0)
|
||||
const wxString lbl = ((wxButton*)event.GetEventObject())->GetLabel();
|
||||
char op = lbl[0];
|
||||
|
||||
if (!GetExpressionForSelectedControl(device_expr))
|
||||
return;
|
||||
|
||||
// o boy!, hax
|
||||
const wxString lbl = ((wxButton*)event.GetEventObject())->GetLabel();
|
||||
// Unary ops (that is, '!') are a special case. When there's a selection,
|
||||
// put parens around it and prepend it with a '!', but when there's nothing,
|
||||
// just add a '!device'.
|
||||
if (op == '!')
|
||||
{
|
||||
wxString selection = textctrl->GetStringSelection();
|
||||
if (selection == "")
|
||||
expr = wxString::Format("%c%s", op, device_expr);
|
||||
else
|
||||
expr = wxString::Format("%c(%s)", op, selection);
|
||||
}
|
||||
else
|
||||
expr = wxString::Format(" %c %s", op, device_expr);
|
||||
|
||||
wxString expr = textctrl->GetValue();
|
||||
|
||||
// append the operator to the expression
|
||||
if (wxT('!') == lbl[0] || false == expr.empty())
|
||||
expr += lbl[0];
|
||||
|
||||
// non-default device
|
||||
if (false == (m_devq == m_parent->controller->default_device))
|
||||
expr.append(wxT('`')).append(StrToWxStr(m_devq.ToString())).append(wxT('`'));
|
||||
|
||||
// append the control name
|
||||
expr += control_lbox->GetString(num);
|
||||
|
||||
control_reference->expression = WxStrToStr(expr);
|
||||
textctrl->WriteText(expr);
|
||||
control_reference->expression = textctrl->GetValue();
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
||||
g_controller_interface.UpdateReference(control_reference, m_parent->controller->default_device);
|
||||
@ -417,7 +474,7 @@ void ControlDialog::DetectControl(wxCommandEvent& event)
|
||||
wxButton* const btn = (wxButton*)event.GetEventObject();
|
||||
const wxString lbl = btn->GetLabel();
|
||||
|
||||
ControllerInterface::Device* const dev = g_controller_interface.FindDevice(m_devq);
|
||||
Device* const dev = g_controller_interface.FindDevice(m_devq);
|
||||
if (dev)
|
||||
{
|
||||
btn->SetLabel(_("[ waiting ]"));
|
||||
@ -426,7 +483,7 @@ void ControlDialog::DetectControl(wxCommandEvent& event)
|
||||
wxTheApp->Yield();
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
||||
ControllerInterface::Device::Control* const ctrl = control_reference->Detect(DETECT_WAIT_TIME, dev);
|
||||
Device::Control* const ctrl = control_reference->Detect(DETECT_WAIT_TIME, dev);
|
||||
|
||||
// if we got input, select it in the list
|
||||
if (ctrl)
|
||||
@ -441,7 +498,7 @@ void GamepadPage::DetectControl(wxCommandEvent& event)
|
||||
ControlButton* btn = (ControlButton*)event.GetEventObject();
|
||||
|
||||
// find device :/
|
||||
ControllerInterface::Device* const dev = g_controller_interface.FindDevice(controller->default_device);
|
||||
Device* const dev = g_controller_interface.FindDevice(controller->default_device);
|
||||
if (dev)
|
||||
{
|
||||
btn->SetLabel(_("[ waiting ]"));
|
||||
@ -450,33 +507,41 @@ void GamepadPage::DetectControl(wxCommandEvent& event)
|
||||
wxTheApp->Yield();
|
||||
|
||||
std::lock_guard<std::recursive_mutex> lk(m_plugin.controls_lock);
|
||||
ControllerInterface::Device::Control* const ctrl = btn->control_reference->Detect(DETECT_WAIT_TIME, dev);
|
||||
Device::Control* const ctrl = btn->control_reference->Detect(DETECT_WAIT_TIME, dev);
|
||||
|
||||
// if we got input, update expression and reference
|
||||
if (ctrl)
|
||||
{
|
||||
btn->control_reference->expression = ctrl->GetName();
|
||||
wxString control_name = ctrl->GetName();
|
||||
wxString expr;
|
||||
GetExpressionForControl(expr, control_name);
|
||||
btn->control_reference->expression = expr;
|
||||
g_controller_interface.UpdateReference(btn->control_reference, controller->default_device);
|
||||
}
|
||||
|
||||
btn->SetLabel(StrToWxStr(btn->control_reference->expression));
|
||||
}
|
||||
|
||||
UpdateGUI();
|
||||
}
|
||||
|
||||
wxStaticBoxSizer* ControlDialog::CreateControlChooser(GamepadPage* const parent)
|
||||
{
|
||||
wxStaticBoxSizer* const main_szr = new wxStaticBoxSizer(wxVERTICAL, this, control_reference->is_input ? _("Input") : _("Output"));
|
||||
|
||||
textctrl = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 48), wxTE_MULTILINE);
|
||||
textctrl = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxSize(-1, 48), wxTE_MULTILINE | wxTE_RICH2);
|
||||
wxFont font = textctrl->GetFont();
|
||||
font.SetFamily(wxFONTFAMILY_MODERN);
|
||||
textctrl->SetFont(font);
|
||||
|
||||
wxButton* const detect_button = new wxButton(this, -1, control_reference->is_input ? _("Detect") : _("Test"));
|
||||
|
||||
wxButton* const clear_button = new wxButton(this, -1, _("Clear"));
|
||||
wxButton* const set_button = new wxButton(this, -1, _("Set"));
|
||||
|
||||
wxButton* const select_button = new wxButton(this, -1, _("Select"));
|
||||
select_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::SetSelectedControl, this);
|
||||
|
||||
wxButton* const not_button = new wxButton(this, -1, _("! NOT"), wxDefaultPosition);
|
||||
not_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
|
||||
|
||||
wxButton* const or_button = new wxButton(this, -1, _("| OR"), wxDefaultPosition);
|
||||
or_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
|
||||
|
||||
@ -491,11 +556,9 @@ wxStaticBoxSizer* ControlDialog::CreateControlChooser(GamepadPage* const parent)
|
||||
{
|
||||
// TODO: check if && is good on other OS
|
||||
wxButton* const and_button = new wxButton(this, -1, _("&& AND"), wxDefaultPosition);
|
||||
wxButton* const not_button = new wxButton(this, -1, _("! NOT"), wxDefaultPosition);
|
||||
wxButton* const add_button = new wxButton(this, -1, _("^ ADD"), wxDefaultPosition);
|
||||
wxButton* const add_button = new wxButton(this, -1, _("+ ADD"), wxDefaultPosition);
|
||||
|
||||
and_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
|
||||
not_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
|
||||
add_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::AppendControl, this);
|
||||
|
||||
button_sizer->Add(and_button, 1, 0, 5);
|
||||
@ -509,11 +572,12 @@ wxStaticBoxSizer* ControlDialog::CreateControlChooser(GamepadPage* const parent)
|
||||
|
||||
detect_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::DetectControl, this);
|
||||
clear_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::ClearControl, this);
|
||||
set_button->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &ControlDialog::SetControl, this);
|
||||
|
||||
range_slider->Bind(wxEVT_SCROLL_CHANGED, &GamepadPage::AdjustControlOption, parent);
|
||||
wxStaticText* const range_label = new wxStaticText(this, -1, _("Range"));
|
||||
|
||||
m_bound_label = new wxStaticText(this, -1, wxT(""));
|
||||
m_error_label = new wxStaticText(this, -1, wxT(""));
|
||||
|
||||
wxBoxSizer* const range_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
range_sizer->Add(range_label, 0, wxCENTER|wxLEFT, 5);
|
||||
@ -523,8 +587,7 @@ wxStaticBoxSizer* ControlDialog::CreateControlChooser(GamepadPage* const parent)
|
||||
ctrls_sizer->Add(control_lbox, 1, wxEXPAND, 0);
|
||||
ctrls_sizer->Add(button_sizer, 0, wxEXPAND, 0);
|
||||
|
||||
wxSizer* const bottom_btns_sizer = CreateButtonSizer(wxOK);
|
||||
bottom_btns_sizer->Prepend(set_button, 0, wxRIGHT, 5);
|
||||
wxSizer* const bottom_btns_sizer = CreateButtonSizer(wxOK|wxAPPLY);
|
||||
bottom_btns_sizer->Prepend(clear_button, 0, wxLEFT, 5);
|
||||
|
||||
main_szr->Add(range_sizer, 0, wxEXPAND|wxLEFT|wxRIGHT, 5);
|
||||
@ -532,6 +595,7 @@ wxStaticBoxSizer* ControlDialog::CreateControlChooser(GamepadPage* const parent)
|
||||
main_szr->Add(textctrl, 1, wxEXPAND|wxLEFT|wxRIGHT|wxBOTTOM, 5);
|
||||
main_szr->Add(bottom_btns_sizer, 0, wxEXPAND|wxBOTTOM|wxRIGHT, 5);
|
||||
main_szr->Add(m_bound_label, 0, wxCENTER, 0);
|
||||
main_szr->Add(m_error_label, 0, wxCENTER, 0);
|
||||
|
||||
UpdateListContents();
|
||||
|
||||
@ -613,11 +677,11 @@ void InputConfigDialog::UpdateDeviceComboBox()
|
||||
{
|
||||
std::vector< GamepadPage* >::iterator i = m_padpages.begin(),
|
||||
e = m_padpages.end();
|
||||
ControllerInterface::DeviceQualifier dq;
|
||||
DeviceQualifier dq;
|
||||
for (; i != e; ++i)
|
||||
{
|
||||
(*i)->device_cbox->Clear();
|
||||
std::vector<ControllerInterface::Device*>::const_iterator
|
||||
std::vector<Device*>::const_iterator
|
||||
di = g_controller_interface.Devices().begin(),
|
||||
de = g_controller_interface.Devices().end();
|
||||
for (; di!=de; ++di)
|
||||
@ -947,7 +1011,7 @@ InputConfigDialog::InputConfigDialog(wxWindow* const parent, InputPlugin& plugin
|
||||
, m_plugin(plugin)
|
||||
{
|
||||
m_pad_notebook = new wxNotebook(this, -1, wxDefaultPosition, wxDefaultSize, wxNB_DEFAULT);
|
||||
for (unsigned int i = 0; i < plugin.controllers.size(); ++i)
|
||||
for (unsigned int i = 0; i < std::min(plugin.controllers.size(), (size_t)MAX_WIIMOTES); ++i)
|
||||
{
|
||||
GamepadPage* gp = new GamepadPage(m_pad_notebook, m_plugin, i, this);
|
||||
m_padpages.push_back(gp);
|
||||
|
@ -89,9 +89,10 @@ public:
|
||||
|
||||
wxStaticBoxSizer* CreateControlChooser(GamepadPage* const parent);
|
||||
|
||||
virtual bool Validate();
|
||||
|
||||
void DetectControl(wxCommandEvent& event);
|
||||
void ClearControl(wxCommandEvent& event);
|
||||
void SetControl(wxCommandEvent& event);
|
||||
void SetDevice(wxCommandEvent& event);
|
||||
|
||||
void UpdateGUI();
|
||||
@ -112,7 +113,9 @@ public:
|
||||
private:
|
||||
GamepadPage* const m_parent;
|
||||
wxStaticText* m_bound_label;
|
||||
ControllerInterface::DeviceQualifier m_devq;
|
||||
wxStaticText* m_error_label;
|
||||
DeviceQualifier m_devq;
|
||||
bool GetExpressionForSelectedControl(wxString &expr);
|
||||
};
|
||||
|
||||
class ExtensionButton : public wxButton
|
||||
|
@ -89,13 +89,53 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||
dc.DrawRectangle( 0, 31 - z*31, 64, 2);
|
||||
}
|
||||
|
||||
// circle for visual aid for diagonal adjustment
|
||||
// octagon 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);
|
||||
// outline and fill colors
|
||||
wxBrush LightGrayBrush(_T("#dddddd"));
|
||||
wxPen LightGrayPen(_T("#bfbfbf"));
|
||||
dc.SetBrush(LightGrayBrush);
|
||||
dc.SetPen(LightGrayPen);
|
||||
|
||||
// polygon offset
|
||||
float max
|
||||
, diagonal
|
||||
, box = 64
|
||||
, d_of = box / 256.0
|
||||
, x_of = box / 2.0;
|
||||
|
||||
if (strcmp((*g)->control_group->name, "Main Stick") == 0)
|
||||
{
|
||||
max = (87.0 / 127.0) * 100;
|
||||
diagonal = (55.0 / 127.0) * 100.0;
|
||||
}
|
||||
else if (strcmp((*g)->control_group->name,"C-Stick") == 0)
|
||||
{
|
||||
max = (74.0 / 127.0) * 100;
|
||||
diagonal = (46.0 / 127.0) * 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
max = (82.0 / 127.0) * 100;
|
||||
diagonal = (58.0 / 127.0) * 100;
|
||||
}
|
||||
|
||||
// polygon corners
|
||||
wxPoint Points[8];
|
||||
Points[0].x = (int)(0.0 * d_of + x_of); Points[0].y = (int)(max * d_of + x_of);
|
||||
Points[1].x = (int)(diagonal * d_of + x_of); Points[1].y = (int)(diagonal * d_of + x_of);
|
||||
Points[2].x = (int)(max * d_of + x_of); Points[2].y = (int)(0.0 * d_of + x_of);
|
||||
Points[3].x = (int)(diagonal * d_of + x_of); Points[3].y = (int)(-diagonal * d_of + x_of);
|
||||
Points[4].x = (int)(0.0 * d_of + x_of); Points[4].y = (int)(-max * d_of + x_of);
|
||||
Points[5].x = (int)(-diagonal * d_of + x_of); Points[5].y = (int)(-diagonal * d_of + x_of);
|
||||
Points[6].x = (int)(-max * d_of + x_of); Points[6].y = (int)(0.0 * d_of + x_of);
|
||||
Points[7].x = (int)(-diagonal * d_of + x_of); Points[7].y = (int)(diagonal * d_of + x_of);
|
||||
|
||||
// draw polygon
|
||||
dc.DrawPolygon(8, Points);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -106,7 +146,7 @@ void InputConfigDialog::UpdateBitmaps(wxTimerEvent& WXUNUSED(event))
|
||||
{
|
||||
// deadzone circle
|
||||
dc.SetBrush(*wxLIGHT_GREY_BRUSH);
|
||||
dc.DrawCircle( 32, 32, ((*g)->control_group)->settings[0]->value * 32 );
|
||||
dc.DrawCircle( 32, 32, ((*g)->control_group)->settings[SETTING_DEADZONE]->value * 32 );
|
||||
}
|
||||
|
||||
// raw dot
|
||||
|
@ -64,7 +64,7 @@ private:
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
|
||||
wxTextCtrl * CreateTextCtrl(wxPanel* parent, wxWindowID id = wxID_ANY, long Style = NULL);
|
||||
wxTextCtrl * CreateTextCtrl(wxPanel* parent, wxWindowID id, long Style);
|
||||
void CreateGUIControls();
|
||||
void PopulateBottom();
|
||||
void UnPopulateBottom();
|
||||
|
@ -658,6 +658,8 @@ void Host_SetWiiMoteConnectionState(int _State)
|
||||
// Update field 1 or 2
|
||||
event.SetInt(1);
|
||||
|
||||
NOTICE_LOG(WIIMOTE, "%s", static_cast<const char*>(event.GetString().c_str()));
|
||||
|
||||
main_frame->GetEventHandler()->AddPendingEvent(event);
|
||||
}
|
||||
|
||||
|
@ -113,7 +113,7 @@ void Host_SysMessage(const char *fmt, ...)
|
||||
char msg[512];
|
||||
|
||||
va_start(list, fmt);
|
||||
vsprintf(msg, fmt, list);
|
||||
vsnprintf(msg, 512, fmt, list);
|
||||
va_end(list);
|
||||
|
||||
size_t len = strlen(msg);
|
||||
@ -200,26 +200,39 @@ std::string GetName(std::string filename)
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeGLSurfaceView_UnPauseEmulation(JNIEnv *env, jobject obj)
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_UnPauseEmulation(JNIEnv *env, jobject obj)
|
||||
{
|
||||
PowerPC::Start();
|
||||
}
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeGLSurfaceView_PauseEmulation(JNIEnv *env, jobject obj)
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_PauseEmulation(JNIEnv *env, jobject obj)
|
||||
{
|
||||
PowerPC::Pause();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeGLSurfaceView_StopEmulation(JNIEnv *env, jobject obj)
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_StopEmulation(JNIEnv *env, jobject obj)
|
||||
{
|
||||
PowerPC::Stop();
|
||||
}
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_DolphinEmulator_onTouchEvent(JNIEnv *env, jobject obj, jint Action, jfloat X, jfloat Y)
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onTouchEvent(JNIEnv *env, jobject obj, jint Action, jfloat X, jfloat Y)
|
||||
{
|
||||
ButtonManager::TouchEvent(Action, X, Y);
|
||||
}
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onGamePadEvent(JNIEnv *env, jobject obj, jstring jDevice, jint Button, jint Action)
|
||||
{
|
||||
const char *Device = env->GetStringUTFChars(jDevice, NULL);
|
||||
std::string strDevice = std::string(Device);
|
||||
ButtonManager::GamepadEvent(strDevice, Button, Action);
|
||||
env->ReleaseStringUTFChars(jDevice, Device);
|
||||
}
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_onGamePadMoveEvent(JNIEnv *env, jobject obj, jstring jDevice, jint Axis, jfloat Value)
|
||||
{
|
||||
const char *Device = env->GetStringUTFChars(jDevice, NULL);
|
||||
std::string strDevice = std::string(Device);
|
||||
ButtonManager::GamepadAxisEvent(strDevice, Axis, Value);
|
||||
env->ReleaseStringUTFChars(jDevice, Device);
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT jintArray JNICALL Java_org_dolphinemu_dolphinemu_GameListItem_GetBanner(JNIEnv *env, jobject obj, jstring jFile)
|
||||
JNIEXPORT jintArray JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetBanner(JNIEnv *env, jobject obj, jstring jFile)
|
||||
{
|
||||
const char *File = env->GetStringUTFChars(jFile, NULL);
|
||||
jintArray Banner = env->NewIntArray(DVD_BANNER_WIDTH * DVD_BANNER_HEIGHT);
|
||||
@ -231,7 +244,7 @@ JNIEXPORT jintArray JNICALL Java_org_dolphinemu_dolphinemu_GameListItem_GetBanne
|
||||
env->ReleaseStringUTFChars(jFile, File);
|
||||
return Banner;
|
||||
}
|
||||
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_GameListItem_GetTitle(JNIEnv *env, jobject obj, jstring jFile)
|
||||
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetTitle(JNIEnv *env, jobject obj, jstring jFile)
|
||||
{
|
||||
const char *File = env->GetStringUTFChars(jFile, NULL);
|
||||
std::string Name = GetName(File);
|
||||
@ -241,41 +254,50 @@ JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_GameListItem_GetTitle(J
|
||||
env->ReleaseStringUTFChars(jFile, File);
|
||||
return env->NewStringUTF(Name.c_str());
|
||||
}
|
||||
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_GameListView_GetConfig(JNIEnv *env, jobject obj, jstring jKey, jstring jValue, jstring jDefault)
|
||||
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetVersionString(JNIEnv *env, jobject obj)
|
||||
{
|
||||
return env->NewStringUTF(scm_rev_str);
|
||||
}
|
||||
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetConfig(JNIEnv *env, jobject obj, jstring jFile, jstring jKey, jstring jValue, jstring jDefault)
|
||||
{
|
||||
IniFile ini;
|
||||
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
|
||||
const char *File = env->GetStringUTFChars(jFile, NULL);
|
||||
const char *Key = env->GetStringUTFChars(jKey, NULL);
|
||||
const char *Value = env->GetStringUTFChars(jValue, NULL);
|
||||
const char *Default = env->GetStringUTFChars(jDefault, NULL);
|
||||
|
||||
ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(File));
|
||||
std::string value;
|
||||
|
||||
ini.Get(Key, Value, &value, Default);
|
||||
|
||||
|
||||
env->ReleaseStringUTFChars(jFile, File);
|
||||
env->ReleaseStringUTFChars(jKey, Key);
|
||||
env->ReleaseStringUTFChars(jValue, Value);
|
||||
env->ReleaseStringUTFChars(jDefault, Default);
|
||||
|
||||
return env->NewStringUTF(value.c_str());
|
||||
}
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_GameListView_SetConfig(JNIEnv *env, jobject obj, jstring jKey, jstring jValue, jstring jDefault)
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetConfig(JNIEnv *env, jobject obj, jstring jFile, jstring jKey, jstring jValue, jstring jDefault)
|
||||
{
|
||||
IniFile ini;
|
||||
ini.Load(File::GetUserPath(F_DOLPHINCONFIG_IDX));
|
||||
const char *File = env->GetStringUTFChars(jFile, NULL);
|
||||
const char *Key = env->GetStringUTFChars(jKey, NULL);
|
||||
const char *Value = env->GetStringUTFChars(jValue, NULL);
|
||||
const char *Default = env->GetStringUTFChars(jDefault, NULL);
|
||||
|
||||
ini.Set(Key, Value, Default);
|
||||
ini.Save(File::GetUserPath(F_DOLPHINCONFIG_IDX));
|
||||
ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string(File));
|
||||
|
||||
ini.Set(Key, Value, Default);
|
||||
ini.Save(File::GetUserPath(D_CONFIG_IDX) + std::string(File));
|
||||
|
||||
env->ReleaseStringUTFChars(jFile, File);
|
||||
env->ReleaseStringUTFChars(jKey, Key);
|
||||
env->ReleaseStringUTFChars(jValue, Value);
|
||||
env->ReleaseStringUTFChars(jDefault, Default);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeGLSurfaceView_main(JNIEnv *env, jobject obj, jstring jFile, jobject _surf, jint _width, jint _height)
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run(JNIEnv *env, jobject obj, jstring jFile, jobject _surf, jint _width, jint _height)
|
||||
{
|
||||
surf = ANativeWindow_fromSurface(env, _surf);
|
||||
g_width = (int)_width;
|
||||
@ -283,7 +305,6 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeGLSurfaceView_main(J
|
||||
|
||||
// Install our callbacks
|
||||
OSD::AddCallback(OSD::OSD_INIT, OSDCallbacks, 0);
|
||||
OSD::AddCallback(OSD::OSD_ONFRAME, OSDCallbacks, 1);
|
||||
OSD::AddCallback(OSD::OSD_SHUTDOWN, OSDCallbacks, 2);
|
||||
|
||||
LogManager::Init();
|
||||
@ -292,6 +313,15 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeGLSurfaceView_main(J
|
||||
VideoBackend::ActivateBackend(SConfig::GetInstance().m_LocalCoreStartupParameter.m_strVideoBackend);
|
||||
WiimoteReal::LoadSettings();
|
||||
|
||||
// Load our Android specific settings
|
||||
IniFile ini;
|
||||
bool onscreencontrols = true;
|
||||
ini.Load(File::GetUserPath(D_CONFIG_IDX) + std::string("Dolphin.ini"));
|
||||
ini.Get("Android", "ScreenControls", &onscreencontrols, true);
|
||||
|
||||
if (onscreencontrols)
|
||||
OSD::AddCallback(OSD::OSD_ONFRAME, OSDCallbacks, 1);
|
||||
|
||||
const char *File = env->GetStringUTFChars(jFile, NULL);
|
||||
// No use running the loop when booting fails
|
||||
if ( BootManager::BootCore( File ) )
|
||||
|
@ -149,6 +149,10 @@ NetPlaySetupDiag::NetPlaySetupDiag(wxWindow* const parent, const CGameListCtrl*
|
||||
wxBoxSizer* const top_szr = new wxBoxSizer(wxHORIZONTAL);
|
||||
top_szr->Add(port_lbl, 0, wxCENTER | wxRIGHT, 5);
|
||||
top_szr->Add(m_host_port_text, 0);
|
||||
#ifdef USE_UPNP
|
||||
m_upnp_chk = new wxCheckBox(host_tab, wxID_ANY, _("Forward port (UPnP)"));
|
||||
top_szr->Add(m_upnp_chk, 0, wxALL | wxALIGN_RIGHT, 5);
|
||||
#endif
|
||||
|
||||
wxBoxSizer* const host_szr = new wxBoxSizer(wxVERTICAL);
|
||||
host_szr->Add(top_szr, 0, wxALL | wxEXPAND, 5);
|
||||
@ -216,10 +220,14 @@ void NetPlaySetupDiag::OnHost(wxCommandEvent&)
|
||||
npd = new NetPlayDiag(m_parent, m_game_list, game, true);
|
||||
unsigned long port = 0;
|
||||
m_host_port_text->GetValue().ToULong(&port);
|
||||
netplay_ptr = new NetPlayServer(u16(port)
|
||||
, WxStrToStr(m_nickname_text->GetValue()), npd, game);
|
||||
netplay_ptr = new NetPlayServer(u16(port), WxStrToStr(m_nickname_text->GetValue()), npd);
|
||||
netplay_ptr->ChangeGame(game);
|
||||
if (netplay_ptr->is_connected)
|
||||
{
|
||||
#ifdef USE_UPNP
|
||||
if(m_upnp_chk->GetValue())
|
||||
((NetPlayServer*)netplay_ptr)->TryPortmapping(port);
|
||||
#endif
|
||||
npd->Show();
|
||||
Destroy();
|
||||
}
|
||||
|
@ -48,6 +48,9 @@ private:
|
||||
*m_connect_ip_text;
|
||||
|
||||
wxListBox* m_game_lbox;
|
||||
#ifdef USE_UPNP
|
||||
wxCheckBox* m_upnp_chk;
|
||||
#endif
|
||||
|
||||
const CGameListCtrl* const m_game_list;
|
||||
};
|
||||
|
@ -31,7 +31,7 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title,
|
||||
{
|
||||
A_turbo = B_turbo = X_turbo = Y_turbo = Z_turbo = L_turbo = R_turbo = START_turbo = DL_turbo = DR_turbo = DD_turbo = DU_turbo = false;
|
||||
xaxis = yaxis = c_xaxis = c_yaxis = 128;
|
||||
A_cont = B_cont = X_cont = Y_cont = Z_cont = L_cont = R_cont = START_cont = DL_cont = DR_cont = DD_cont = DU_cont = mstickx = msticky = cstickx = csticky = false;
|
||||
A_cont = B_cont = X_cont = Y_cont = Z_cont = L_cont = L_button_cont = R_cont = R_button_cont = START_cont = DL_cont = DR_cont = DD_cont = DU_cont = mstickx = msticky = cstickx = csticky = false;
|
||||
|
||||
wxBoxSizer* const top_box = new wxBoxSizer(wxHORIZONTAL);
|
||||
wxBoxSizer* const bottom_box = new wxBoxSizer(wxHORIZONTAL);
|
||||
@ -41,7 +41,8 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title,
|
||||
wxBoxSizer* const main_stick_box = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
static_bitmap_main = new wxStaticBitmap(this, ID_MAIN_STICK, TASInputDlg::CreateStickBitmap(128,128), wxDefaultPosition, wxDefaultSize);
|
||||
static_bitmap_main->Bind(wxEVT_LEFT_UP, &TASInputDlg::OnMouseUpL, this);
|
||||
static_bitmap_main->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::OnMouseDownL, this);
|
||||
static_bitmap_main->Bind(wxEVT_MOTION, &TASInputDlg::OnMouseDownL, this);
|
||||
static_bitmap_main->Bind(wxEVT_RIGHT_UP, &TASInputDlg::OnMouseUpR, this);
|
||||
wx_mainX_s = new wxSlider(this, ID_MAIN_X_SLIDER, 128, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL);
|
||||
wx_mainX_s->SetMinSize(wxSize(120,-1));
|
||||
@ -67,7 +68,8 @@ TASInputDlg::TASInputDlg(wxWindow *parent, wxWindowID id, const wxString &title,
|
||||
wxBoxSizer* const c_stick_box = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
static_bitmap_c = new wxStaticBitmap(this, ID_C_STICK, TASInputDlg::CreateStickBitmap(128,128), wxDefaultPosition, wxDefaultSize);
|
||||
static_bitmap_c->Bind(wxEVT_LEFT_UP, &TASInputDlg::OnMouseUpL, this);
|
||||
static_bitmap_c->Bind(wxEVT_LEFT_DOWN, &TASInputDlg::OnMouseDownL, this);
|
||||
static_bitmap_c->Bind(wxEVT_MOTION, &TASInputDlg::OnMouseDownL, this);
|
||||
static_bitmap_c->Bind(wxEVT_RIGHT_UP, &TASInputDlg::OnMouseUpR, this);
|
||||
wx_cX_s = new wxSlider(this, ID_C_X_SLIDER, 128, 0, 255, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL);
|
||||
wx_cX_s->SetMinSize(wxSize(120,-1));
|
||||
@ -362,25 +364,53 @@ void TASInputDlg::GetKeyBoardInput(SPADStatus *PadStatus)
|
||||
Y_cont = false;
|
||||
}
|
||||
|
||||
if(((PadStatus->button & PAD_TRIGGER_L) != 0))
|
||||
if(((PadStatus->triggerLeft) != 0))
|
||||
{
|
||||
wx_l_button->SetValue(true);
|
||||
if (PadStatus->triggerLeft == 255)
|
||||
{
|
||||
wx_l_button->SetValue(true);
|
||||
L_button_cont = true;
|
||||
}
|
||||
else if (L_button_cont)
|
||||
{
|
||||
wx_l_button->SetValue(false);
|
||||
L_button_cont = false;
|
||||
}
|
||||
|
||||
wx_l_s->SetValue(PadStatus->triggerLeft);
|
||||
wx_l_t->SetValue(wxString::Format(wxT("%i"), PadStatus->triggerLeft));
|
||||
L_cont = true;
|
||||
}
|
||||
else if(L_cont)
|
||||
{
|
||||
wx_l_button->SetValue(false);
|
||||
wx_l_s->SetValue(0);
|
||||
wx_l_t->SetValue(wxT("0"));
|
||||
L_cont = false;
|
||||
}
|
||||
|
||||
if(((PadStatus->button & PAD_TRIGGER_R) != 0))
|
||||
if(((PadStatus->triggerRight) != 0))
|
||||
{
|
||||
wx_r_button->SetValue(true);
|
||||
if (PadStatus->triggerRight == 255)
|
||||
{
|
||||
wx_r_button->SetValue(true);
|
||||
R_button_cont = true;
|
||||
}
|
||||
else if (R_button_cont)
|
||||
{
|
||||
wx_r_button->SetValue(false);
|
||||
R_button_cont = false;
|
||||
}
|
||||
|
||||
wx_r_s->SetValue(PadStatus->triggerRight);
|
||||
wx_r_t->SetValue(wxString::Format(wxT("%i"), PadStatus->triggerRight));
|
||||
R_cont = true;
|
||||
}
|
||||
else if(R_cont)
|
||||
{
|
||||
wx_r_button->SetValue(false);
|
||||
wx_r_s->SetValue(0);
|
||||
wx_r_t->SetValue(wxT("0"));
|
||||
R_cont = false;
|
||||
}
|
||||
|
||||
@ -407,6 +437,19 @@ void TASInputDlg::GetKeyBoardInput(SPADStatus *PadStatus)
|
||||
}
|
||||
}
|
||||
|
||||
void TASInputDlg::SetLandRTriggers()
|
||||
{
|
||||
if (wx_l_button->GetValue())
|
||||
lTrig = 255;
|
||||
else
|
||||
lTrig = wx_l_s->GetValue();
|
||||
|
||||
if (wx_r_button->GetValue())
|
||||
rTrig = 255;
|
||||
else
|
||||
rTrig = wx_r_s->GetValue();
|
||||
}
|
||||
|
||||
void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID)
|
||||
{
|
||||
if (!IsShown())
|
||||
@ -414,10 +457,7 @@ void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID)
|
||||
|
||||
//TODO:: Make this instant not when polled.
|
||||
GetKeyBoardInput(PadStatus);
|
||||
|
||||
// TODO: implement support for more controllers
|
||||
if (controllerID != 0)
|
||||
return;
|
||||
SetLandRTriggers();
|
||||
|
||||
PadStatus->stickX = mainX;
|
||||
PadStatus->stickY = mainY;
|
||||
@ -478,16 +518,6 @@ void TASInputDlg::GetValues(SPADStatus *PadStatus, int controllerID)
|
||||
else
|
||||
PadStatus->button &= ~PAD_BUTTON_Y;
|
||||
|
||||
if(wx_l_button->IsChecked())
|
||||
PadStatus->button |= PAD_TRIGGER_L;
|
||||
else
|
||||
PadStatus->button &= ~PAD_TRIGGER_L;
|
||||
|
||||
if(wx_r_button->IsChecked())
|
||||
PadStatus->button |= PAD_TRIGGER_R;
|
||||
else
|
||||
PadStatus->button &= ~PAD_TRIGGER_R;
|
||||
|
||||
if(wx_z_button->IsChecked())
|
||||
PadStatus->button |= PAD_TRIGGER_Z;
|
||||
else
|
||||
@ -752,8 +782,11 @@ void TASInputDlg::OnMouseUpR(wxMouseEvent& event)
|
||||
|
||||
}
|
||||
|
||||
void TASInputDlg::OnMouseUpL(wxMouseEvent& event)
|
||||
void TASInputDlg::OnMouseDownL(wxMouseEvent& event)
|
||||
{
|
||||
if (event.GetEventType() == wxEVT_MOTION && !event.LeftIsDown())
|
||||
return;
|
||||
|
||||
wxSlider *sliderX,*sliderY;
|
||||
wxStaticBitmap *sbitmap;
|
||||
wxTextCtrl *textX, *textY;
|
||||
|
@ -24,7 +24,7 @@ class TASInputDlg : public wxDialog
|
||||
void OnCloseWindow(wxCloseEvent& event);
|
||||
void UpdateFromSliders(wxCommandEvent& event);
|
||||
void UpdateFromText(wxCommandEvent& event);
|
||||
void OnMouseUpL(wxMouseEvent& event);
|
||||
void OnMouseDownL(wxMouseEvent& event);
|
||||
void OnMouseUpR(wxMouseEvent& event);
|
||||
void ResetValues();
|
||||
void GetValues(SPADStatus *PadStatus, int controllerID);
|
||||
@ -33,6 +33,7 @@ class TASInputDlg : public wxDialog
|
||||
void ButtonTurbo();
|
||||
void GetKeyBoardInput(SPADStatus *PadStatus);
|
||||
bool TextBoxHasFocus();
|
||||
void SetLandRTriggers();
|
||||
bool HasFocus();
|
||||
|
||||
wxBitmap CreateStickBitmap(int x, int y);
|
||||
@ -78,7 +79,7 @@ class TASInputDlg : public wxDialog
|
||||
wxStaticBitmap* static_bitmap_main, *static_bitmap_c;
|
||||
wxBitmap bitmap;
|
||||
bool A_turbo,B_turbo, X_turbo, Y_turbo, Z_turbo, L_turbo, R_turbo, START_turbo,DL_turbo,DR_turbo,DD_turbo,DU_turbo;
|
||||
bool A_cont,B_cont, X_cont, Y_cont, Z_cont, L_cont, R_cont, START_cont,DL_cont,DR_cont,DD_cont,DU_cont,mstickx,msticky,cstickx,csticky;
|
||||
bool A_cont,B_cont, X_cont, Y_cont, Z_cont, L_cont, L_button_cont, R_cont, R_button_cont, START_cont,DL_cont,DR_cont,DD_cont,DU_cont,mstickx,msticky,cstickx,csticky;
|
||||
int xaxis,yaxis,c_xaxis,c_yaxis,update,update_axis;
|
||||
|
||||
DECLARE_EVENT_TABLE();
|
||||
|
@ -87,6 +87,7 @@ wxString aa_desc = wxTRANSLATE("Reduces the amount of aliasing caused by rasteri
|
||||
wxString scaled_efb_copy_desc = wxTRANSLATE("Greatly increases quality of textures generated using render to texture effects.\nRaising the internal resolution will improve the effect of this setting.\nSlightly decreases performance and possibly causes issues (although unlikely).\n\nIf unsure, leave this checked.");
|
||||
wxString pixel_lighting_desc = wxTRANSLATE("Calculate lighting of 3D graphics per-pixel rather than per vertex.\nDecreases emulation speed by some percent (depending on your GPU).\nThis usually is a safe enhancement, but might cause issues sometimes.\n\nIf unsure, leave this unchecked.");
|
||||
wxString hacked_buffer_upload_desc = wxTRANSLATE("Use a hacked upload strategy to stream vertices.\nThis usually speed up, but is forbidden by OpenGL specification and may causes heavy glitches.\n\nIf unsure, leave this unchecked.");
|
||||
wxString fast_depth_calc_desc = wxTRANSLATE("Use a less accurate algorithm to calculate depth values.\nCauses issues in a few games but might give a decent speedup.\n\nIf unsure, leave this checked.");
|
||||
wxString force_filtering_desc = wxTRANSLATE("Force texture filtering even if the emulated game explicitly disabled it.\nImproves texture quality slightly but causes glitches in some games.\n\nIf unsure, leave this unchecked.");
|
||||
wxString _3d_vision_desc = wxTRANSLATE("Enable 3D effects via stereoscopy using Nvidia 3D Vision technology if it's supported by your GPU.\nPossibly causes issues.\nRequires fullscreen to work.\n\nIf unsure, leave this unchecked.");
|
||||
wxString internal_res_desc = wxTRANSLATE("Specifies the resolution used to render at. A high resolution will improve visual quality a lot but is also quite heavy on performance and might cause glitches in certain games.\n\"Multiple of 640x528\" is a bit slower than \"Window Size\" but yields less issues. Generally speaking, the lower the internal resolution is, the better your performance will be.\n\nIf unsure, select 640x528.");
|
||||
@ -130,6 +131,7 @@ wxString shader_errors_desc = wxTRANSLATE("Usually if shader compilation fails,
|
||||
wxArrayString GetListOfResolutions()
|
||||
{
|
||||
wxArrayString retlist;
|
||||
retlist.Add("Auto");
|
||||
#ifdef _WIN32
|
||||
DWORD iModeNum = 0;
|
||||
DEVMODE dmi;
|
||||
@ -496,15 +498,12 @@ VideoConfigDiag::VideoConfigDiag(wxWindow* parent, const std::string &title, con
|
||||
// - other hacks
|
||||
{
|
||||
wxGridSizer* const szr_other = new wxGridSizer(2, 5, 5);
|
||||
SettingCheckBox* hacked_buffer_upload_cb;
|
||||
szr_other->Add(CreateCheckBox(page_hacks, _("Cache Display Lists"), wxGetTranslation(dlc_desc), vconfig.bDlistCachingEnable));
|
||||
szr_other->Add(CreateCheckBox(page_hacks, _("Disable Destination Alpha"), wxGetTranslation(disable_dstalpha_desc), vconfig.bDstAlphaPass));
|
||||
szr_other->Add(CreateCheckBox(page_hacks, _("OpenCL Texture Decoder"), wxGetTranslation(opencl_desc), vconfig.bEnableOpenCL));
|
||||
szr_other->Add(CreateCheckBox(page_hacks, _("OpenMP Texture Decoder"), wxGetTranslation(omp_desc), vconfig.bOMPDecoder));
|
||||
szr_other->Add(hacked_buffer_upload_cb = CreateCheckBox(page_hacks, _("Hacked Buffer Upload"), wxGetTranslation(hacked_buffer_upload_desc), vconfig.bHackedBufferUpload));
|
||||
|
||||
if (Core::GetState() != Core::CORE_UNINITIALIZED)
|
||||
hacked_buffer_upload_cb->Disable();
|
||||
szr_other->Add(CreateCheckBox(page_hacks, _("Fast Depth Calculation"), wxGetTranslation(fast_depth_calc_desc), vconfig.bFastDepthCalc));
|
||||
szr_other->Add(hacked_buffer_upload = CreateCheckBox(page_hacks, _("Hacked Buffer Upload"), wxGetTranslation(hacked_buffer_upload_desc), vconfig.bHackedBufferUpload));
|
||||
|
||||
wxStaticBoxSizer* const group_other = new wxStaticBoxSizer(wxVERTICAL, page_hacks, _("Other"));
|
||||
group_other->Add(szr_other, 1, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
|
@ -8,6 +8,7 @@
|
||||
|
||||
#include "ConfigManager.h"
|
||||
#include "VideoConfig.h"
|
||||
#include "Core.h"
|
||||
|
||||
#include <wx/wx.h>
|
||||
#include <wx/textctrl.h>
|
||||
@ -165,6 +166,10 @@ protected:
|
||||
// XFB
|
||||
virtual_xfb->Enable(vconfig.bUseXFB);
|
||||
real_xfb->Enable(vconfig.bUseXFB);
|
||||
|
||||
// OGL Hacked buffer
|
||||
hacked_buffer_upload->Enable(Core::GetState() == Core::CORE_UNINITIALIZED && vconfig.backend_info.APIType == API_OPENGL);
|
||||
hacked_buffer_upload->Show(vconfig.backend_info.APIType == API_OPENGL);
|
||||
|
||||
ev.Skip();
|
||||
}
|
||||
@ -194,6 +199,7 @@ protected:
|
||||
SettingRadioButton* efbcopy_ram;
|
||||
SettingCheckBox* cache_efb_copies;
|
||||
SettingCheckBox* emulate_efb_format_changes;
|
||||
SettingCheckBox* hacked_buffer_upload;
|
||||
|
||||
SettingRadioButton* virtual_xfb;
|
||||
SettingRadioButton* real_xfb;
|
||||
|
@ -15,7 +15,7 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
|
||||
wxStaticText* wiimote_label[4];
|
||||
wxChoice* wiimote_source_ch[4];
|
||||
|
||||
for (unsigned int i = 0; i < 4; ++i)
|
||||
for (unsigned int i = 0; i < MAX_WIIMOTES; ++i)
|
||||
{
|
||||
wxString str;
|
||||
str.Printf(_("Wiimote %i"), i + 1);
|
||||
@ -54,8 +54,25 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
|
||||
wiimote_sizer->Add(wiimote_configure_bt[i]);
|
||||
}
|
||||
wiimote_group->Add(wiimote_sizer, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
// "BalanceBoard" layout
|
||||
wxStaticBoxSizer* const bb_group = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Balance Board"));
|
||||
wxFlexGridSizer* const bb_sizer = new wxFlexGridSizer(1, 5, 5);
|
||||
int source_ctrl_id = wxWindow::NewControlId();
|
||||
m_wiimote_index_from_ctrl_id.insert(std::pair<wxWindowID, unsigned int>(source_ctrl_id, WIIMOTE_BALANCE_BOARD));
|
||||
const wxString src_choices[] = { _("None"), _("Real Balance Board") };
|
||||
wxChoice* bb_source = new wxChoice(this, source_ctrl_id, wxDefaultPosition, wxDefaultSize, sizeof(src_choices)/sizeof(*src_choices), src_choices);
|
||||
bb_source->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &WiimoteConfigDiag::SelectSource, this);
|
||||
|
||||
m_orig_wiimote_sources[WIIMOTE_BALANCE_BOARD] = g_wiimote_sources[WIIMOTE_BALANCE_BOARD];
|
||||
bb_source->Select(m_orig_wiimote_sources[WIIMOTE_BALANCE_BOARD] ? 1 : 0);
|
||||
|
||||
bb_sizer->Add(bb_source, 0, wxALIGN_CENTER_VERTICAL);
|
||||
|
||||
bb_group->Add(bb_sizer, 1, wxEXPAND, 5 );
|
||||
|
||||
|
||||
|
||||
// "Real wiimotes" controls
|
||||
wxButton* const refresh_btn = new wxButton(this, -1, _("Refresh"), wxDefaultPosition);
|
||||
refresh_btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &WiimoteConfigDiag::RefreshRealWiimotes, this);
|
||||
@ -89,7 +106,6 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
|
||||
wxSlider* const WiiSensBarSens = new wxSlider(this, wxID_ANY, 0, 0, 4, wxDefaultPosition, wxDefaultSize, wxSL_HORIZONTAL);
|
||||
wxSlider* const WiimoteSpkVolume = new wxSlider(this, wxID_ANY, 0, 0, 127);
|
||||
wxCheckBox* const WiimoteMotor = new wxCheckBox(this, wxID_ANY, _("Wiimote Motor"));
|
||||
wxCheckBox* const WiimoteReconnectOnLoad = new wxCheckBox(this, wxID_ANY, _("Reconnect Wiimote on State Loading"));
|
||||
|
||||
wxStaticText* const WiiSensBarPosText = new wxStaticText(this, wxID_ANY, _("Sensor Bar Position:"));
|
||||
wxStaticText* const WiiSensBarSensText = new wxStaticText(this, wxID_ANY, _("IR Sensitivity:"));
|
||||
@ -126,13 +142,11 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
|
||||
WiiSensBarSens->SetValue(SConfig::GetInstance().m_SYSCONF->GetData<u32>("BT.SENS"));
|
||||
WiimoteSpkVolume->SetValue(SConfig::GetInstance().m_SYSCONF->GetData<u8>("BT.SPKV"));
|
||||
WiimoteMotor->SetValue(SConfig::GetInstance().m_SYSCONF->GetData<bool>("BT.MOT"));
|
||||
WiimoteReconnectOnLoad->SetValue(SConfig::GetInstance().m_WiimoteReconnectOnLoad);
|
||||
|
||||
WiiSensBarPos->Bind(wxEVT_COMMAND_CHOICE_SELECTED, &WiimoteConfigDiag::OnSensorBarPos, this);
|
||||
WiiSensBarSens->Bind(wxEVT_COMMAND_SLIDER_UPDATED, &WiimoteConfigDiag::OnSensorBarSensitivity, this);
|
||||
WiimoteSpkVolume->Bind(wxEVT_COMMAND_SLIDER_UPDATED, &WiimoteConfigDiag::OnSpeakerVolume, this);
|
||||
WiimoteMotor->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &WiimoteConfigDiag::OnMotor, this);
|
||||
WiimoteReconnectOnLoad->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &WiimoteConfigDiag::OnReconnectOnLoad, this);
|
||||
|
||||
|
||||
// "General Settings" layout
|
||||
@ -158,7 +172,6 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
|
||||
|
||||
wxGridSizer* const general_wiimote_sizer = new wxGridSizer(1, 5, 5);
|
||||
general_wiimote_sizer->Add(WiimoteMotor);
|
||||
general_wiimote_sizer->Add(WiimoteReconnectOnLoad);
|
||||
|
||||
general_sizer->Add(choice_sizer);
|
||||
general_sizer->Add(general_wiimote_sizer);
|
||||
@ -166,6 +179,7 @@ WiimoteConfigDiag::WiimoteConfigDiag(wxWindow* const parent, InputPlugin& plugin
|
||||
|
||||
// Dialog layout
|
||||
main_sizer->Add(wiimote_group, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->Add(bb_group, 0, wxEXPAND | wxALL, 5);
|
||||
main_sizer->Add(real_wiimotes_group, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
main_sizer->Add(general_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
main_sizer->Add(CreateButtonSizer(wxOK | wxCANCEL), 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 5);
|
||||
@ -196,17 +210,23 @@ void WiimoteConfigDiag::SelectSource(wxCommandEvent& event)
|
||||
// Revert if the dialog is canceled.
|
||||
int index = m_wiimote_index_from_ctrl_id[event.GetId()];
|
||||
|
||||
WiimoteReal::ChangeWiimoteSource(index, event.GetInt());
|
||||
|
||||
if (g_wiimote_sources[index] != WIIMOTE_SRC_EMU && g_wiimote_sources[index] != WIIMOTE_SRC_HYBRID)
|
||||
wiimote_configure_bt[index]->Disable();
|
||||
if(index != WIIMOTE_BALANCE_BOARD)
|
||||
{
|
||||
WiimoteReal::ChangeWiimoteSource(index, event.GetInt());
|
||||
if (g_wiimote_sources[index] != WIIMOTE_SRC_EMU && g_wiimote_sources[index] != WIIMOTE_SRC_HYBRID)
|
||||
wiimote_configure_bt[index]->Disable();
|
||||
else
|
||||
wiimote_configure_bt[index]->Enable();
|
||||
}
|
||||
else
|
||||
wiimote_configure_bt[index]->Enable();
|
||||
{
|
||||
WiimoteReal::ChangeWiimoteSource(index, event.GetInt() ? WIIMOTE_SRC_REAL : WIIMOTE_SRC_NONE);
|
||||
}
|
||||
}
|
||||
|
||||
void WiimoteConfigDiag::RevertSource()
|
||||
{
|
||||
for (int i = 0; i < 4; ++i)
|
||||
for (int i = 0; i < MAX_BBMOTES; ++i)
|
||||
g_wiimote_sources[i] = m_orig_wiimote_sources[i];
|
||||
}
|
||||
|
||||
@ -225,6 +245,10 @@ void WiimoteConfigDiag::Save(wxCommandEvent& event)
|
||||
|
||||
sec.Set("Source", (int)g_wiimote_sources[i]);
|
||||
}
|
||||
|
||||
std::string secname("BalanceBoard");
|
||||
IniFile::Section& sec = *inifile.GetOrCreateSection(secname.c_str());
|
||||
sec.Set("Source", (int)g_wiimote_sources[WIIMOTE_BALANCE_BOARD]);
|
||||
|
||||
inifile.Save(ini_filename);
|
||||
|
||||
|
@ -52,11 +52,6 @@ public:
|
||||
SConfig::GetInstance().m_SYSCONF->SetData("BT.MOT", event.GetInt());
|
||||
event.Skip();
|
||||
}
|
||||
void OnReconnectOnLoad(wxCommandEvent& event)
|
||||
{
|
||||
SConfig::GetInstance().m_WiimoteReconnectOnLoad = event.IsChecked();
|
||||
event.Skip();
|
||||
}
|
||||
void OnContinuousScanning(wxCommandEvent& event)
|
||||
{
|
||||
SConfig::GetInstance().m_WiimoteContinuousScanning = event.IsChecked();
|
||||
@ -76,9 +71,9 @@ private:
|
||||
wxNotebook* m_pad_notebook;
|
||||
|
||||
std::map<wxWindowID, unsigned int> m_wiimote_index_from_ctrl_id;
|
||||
unsigned int m_orig_wiimote_sources[4];
|
||||
unsigned int m_orig_wiimote_sources[MAX_BBMOTES];
|
||||
|
||||
wxButton* wiimote_configure_bt[4];
|
||||
wxButton* wiimote_configure_bt[MAX_WIIMOTES];
|
||||
std::map<wxWindowID, unsigned int> m_wiimote_index_from_conf_bt_id;
|
||||
};
|
||||
|
||||
|
@ -32,42 +32,6 @@ extern char **environ;
|
||||
namespace X11Utils
|
||||
{
|
||||
|
||||
void SendClientEvent(Display *dpy, const char *message,
|
||||
int data1, int data2, int data3, int data4)
|
||||
{
|
||||
XEvent event;
|
||||
Window win = (Window)Core::GetWindowHandle();
|
||||
|
||||
// Init X event structure for client message
|
||||
event.xclient.type = ClientMessage;
|
||||
event.xclient.format = 32;
|
||||
event.xclient.data.l[0] = XInternAtom(dpy, message, False);
|
||||
event.xclient.data.l[1] = data1;
|
||||
event.xclient.data.l[2] = data2;
|
||||
event.xclient.data.l[3] = data3;
|
||||
event.xclient.data.l[4] = data4;
|
||||
|
||||
// Send the event
|
||||
if (!XSendEvent(dpy, win, False, False, &event))
|
||||
ERROR_LOG(VIDEO, "Failed to send message %s to the emulator window.", message);
|
||||
}
|
||||
|
||||
void SendKeyEvent(Display *dpy, int key)
|
||||
{
|
||||
XEvent event;
|
||||
Window win = (Window)Core::GetWindowHandle();
|
||||
|
||||
// Init X event structure for key press event
|
||||
event.xkey.type = KeyPress;
|
||||
// WARNING: This works for ASCII keys. If in the future other keys are needed
|
||||
// convert with InputCommon::wxCharCodeWXToX from X11InputBase.cpp.
|
||||
event.xkey.keycode = XKeysymToKeycode(dpy, key);
|
||||
|
||||
// Send the event
|
||||
if (!XSendEvent(dpy, win, False, False, &event))
|
||||
ERROR_LOG(VIDEO, "Failed to send key press event to the emulator window.");
|
||||
}
|
||||
|
||||
void SendButtonEvent(Display *dpy, int button, int x, int y, bool pressed)
|
||||
{
|
||||
XEvent event;
|
||||
@ -200,6 +164,9 @@ XRRConfiguration::~XRRConfiguration()
|
||||
|
||||
void XRRConfiguration::Update()
|
||||
{
|
||||
if(SConfig::GetInstance().m_LocalCoreStartupParameter.strFullscreenResolution == "Auto")
|
||||
return;
|
||||
|
||||
if (!bValid)
|
||||
return;
|
||||
|
||||
|
@ -43,9 +43,6 @@
|
||||
namespace X11Utils
|
||||
{
|
||||
|
||||
void SendClientEvent(Display *dpy, const char *message,
|
||||
int data1, int data2, int data3, int data4);
|
||||
void SendKeyEvent(Display *dpy, int key);
|
||||
void SendButtonEvent(Display *dpy, int button, int x, int y, bool pressed);
|
||||
void SendMotionEvent(Display *dpy, int x, int y);
|
||||
void EWMH_Fullscreen(Display *dpy, int action);
|
||||
|
@ -1,514 +1,206 @@
|
||||
static const unsigned char dolphin_ico32x32[] = {
|
||||
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00,
|
||||
0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20,
|
||||
0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73,
|
||||
0x7A, 0x7A, 0xF4, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
|
||||
0x73, 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B, 0x13, 0x01,
|
||||
0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x0A, 0x4F, 0x69, 0x43,
|
||||
0x43, 0x50, 0x50, 0x68, 0x6F, 0x74, 0x6F, 0x73, 0x68, 0x6F,
|
||||
0x70, 0x20, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6F, 0x66,
|
||||
0x69, 0x6C, 0x65, 0x00, 0x00, 0x78, 0xDA, 0x9D, 0x53, 0x67,
|
||||
0x54, 0x53, 0xE9, 0x16, 0x3D, 0xF7, 0xDE, 0xF4, 0x42, 0x4B,
|
||||
0x88, 0x80, 0x94, 0x4B, 0x6F, 0x52, 0x15, 0x08, 0x20, 0x52,
|
||||
0x42, 0x8B, 0x80, 0x14, 0x91, 0x26, 0x2A, 0x21, 0x09, 0x10,
|
||||
0x4A, 0x88, 0x21, 0xA1, 0xD9, 0x15, 0x51, 0xC1, 0x11, 0x45,
|
||||
0x45, 0x04, 0x1B, 0xC8, 0xA0, 0x88, 0x03, 0x8E, 0x8E, 0x80,
|
||||
0x8C, 0x15, 0x51, 0x2C, 0x0C, 0x8A, 0x0A, 0xD8, 0x07, 0xE4,
|
||||
0x21, 0xA2, 0x8E, 0x83, 0xA3, 0x88, 0x8A, 0xCA, 0xFB, 0xE1,
|
||||
0x7B, 0xA3, 0x6B, 0xD6, 0xBC, 0xF7, 0xE6, 0xCD, 0xFE, 0xB5,
|
||||
0xD7, 0x3E, 0xE7, 0xAC, 0xF3, 0x9D, 0xB3, 0xCF, 0x07, 0xC0,
|
||||
0x08, 0x0C, 0x96, 0x48, 0x33, 0x51, 0x35, 0x80, 0x0C, 0xA9,
|
||||
0x42, 0x1E, 0x11, 0xE0, 0x83, 0xC7, 0xC4, 0xC6, 0xE1, 0xE4,
|
||||
0x2E, 0x40, 0x81, 0x0A, 0x24, 0x70, 0x00, 0x10, 0x08, 0xB3,
|
||||
0x64, 0x21, 0x73, 0xFD, 0x23, 0x01, 0x00, 0xF8, 0x7E, 0x3C,
|
||||
0x3C, 0x2B, 0x22, 0xC0, 0x07, 0xBE, 0x00, 0x01, 0x78, 0xD3,
|
||||
0x0B, 0x08, 0x00, 0xC0, 0x4D, 0x9B, 0xC0, 0x30, 0x1C, 0x87,
|
||||
0xFF, 0x0F, 0xEA, 0x42, 0x99, 0x5C, 0x01, 0x80, 0x84, 0x01,
|
||||
0xC0, 0x74, 0x91, 0x38, 0x4B, 0x08, 0x80, 0x14, 0x00, 0x40,
|
||||
0x7A, 0x8E, 0x42, 0xA6, 0x00, 0x40, 0x46, 0x01, 0x80, 0x9D,
|
||||
0x98, 0x26, 0x53, 0x00, 0xA0, 0x04, 0x00, 0x60, 0xCB, 0x63,
|
||||
0x62, 0xE3, 0x00, 0x50, 0x2D, 0x00, 0x60, 0x27, 0x7F, 0xE6,
|
||||
0xD3, 0x00, 0x80, 0x9D, 0xF8, 0x99, 0x7B, 0x01, 0x00, 0x5B,
|
||||
0x94, 0x21, 0x15, 0x01, 0xA0, 0x91, 0x00, 0x20, 0x13, 0x65,
|
||||
0x88, 0x44, 0x00, 0x68, 0x3B, 0x00, 0xAC, 0xCF, 0x56, 0x8A,
|
||||
0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4B, 0xC4, 0x39,
|
||||
0x00, 0xD8, 0x2D, 0x00, 0x30, 0x49, 0x57, 0x66, 0x48, 0x00,
|
||||
0xB0, 0xB7, 0x00, 0xC0, 0xCE, 0x10, 0x0B, 0xB2, 0x00, 0x08,
|
||||
0x0C, 0x00, 0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7B,
|
||||
0x00, 0x60, 0xC8, 0x23, 0x23, 0x78, 0x00, 0x84, 0x99, 0x00,
|
||||
0x14, 0x46, 0xF2, 0x57, 0x3C, 0xF1, 0x2B, 0xAE, 0x10, 0xE7,
|
||||
0x2A, 0x00, 0x00, 0x78, 0x99, 0xB2, 0x3C, 0xB9, 0x24, 0x39,
|
||||
0x45, 0x81, 0x5B, 0x08, 0x2D, 0x71, 0x07, 0x57, 0x57, 0x2E,
|
||||
0x1E, 0x28, 0xCE, 0x49, 0x17, 0x2B, 0x14, 0x36, 0x61, 0x02,
|
||||
0x61, 0x9A, 0x40, 0x2E, 0xC2, 0x79, 0x99, 0x19, 0x32, 0x81,
|
||||
0x34, 0x0F, 0xE0, 0xF3, 0xCC, 0x00, 0x00, 0xA0, 0x91, 0x15,
|
||||
0x11, 0xE0, 0x83, 0xF3, 0xFD, 0x78, 0xCE, 0x0E, 0xAE, 0xCE,
|
||||
0xCE, 0x36, 0x8E, 0xB6, 0x0E, 0x5F, 0x2D, 0xEA, 0xBF, 0x06,
|
||||
0xFF, 0x22, 0x62, 0x62, 0xE3, 0xFE, 0xE5, 0xCF, 0xAB, 0x70,
|
||||
0x40, 0x00, 0x00, 0xE1, 0x74, 0x7E, 0xD1, 0xFE, 0x2C, 0x2F,
|
||||
0xB3, 0x1A, 0x80, 0x3B, 0x06, 0x80, 0x6D, 0xFE, 0xA2, 0x25,
|
||||
0xEE, 0x04, 0x68, 0x5E, 0x0B, 0xA0, 0x75, 0xF7, 0x8B, 0x66,
|
||||
0xB2, 0x0F, 0x40, 0xB5, 0x00, 0xA0, 0xE9, 0xDA, 0x57, 0xF3,
|
||||
0x70, 0xF8, 0x7E, 0x3C, 0x3C, 0x45, 0xA1, 0x90, 0xB9, 0xD9,
|
||||
0xD9, 0xE5, 0xE4, 0xE4, 0xD8, 0x4A, 0xC4, 0x42, 0x5B, 0x61,
|
||||
0xCA, 0x57, 0x7D, 0xFE, 0x67, 0xC2, 0x5F, 0xC0, 0x57, 0xFD,
|
||||
0x6C, 0xF9, 0x7E, 0x3C, 0xFC, 0xF7, 0xF5, 0xE0, 0xBE, 0xE2,
|
||||
0x24, 0x81, 0x32, 0x5D, 0x81, 0x47, 0x04, 0xF8, 0xE0, 0xC2,
|
||||
0xCC, 0xF4, 0x4C, 0xA5, 0x1C, 0xCF, 0x92, 0x09, 0x84, 0x62,
|
||||
0xDC, 0xE6, 0x8F, 0x47, 0xFC, 0xB7, 0x0B, 0xFF, 0xFC, 0x1D,
|
||||
0xD3, 0x22, 0xC4, 0x49, 0x62, 0xB9, 0x58, 0x2A, 0x14, 0xE3,
|
||||
0x51, 0x12, 0x71, 0x8E, 0x44, 0x9A, 0x8C, 0xF3, 0x32, 0xA5,
|
||||
0x22, 0x89, 0x42, 0x92, 0x29, 0xC5, 0x25, 0xD2, 0xFF, 0x64,
|
||||
0xE2, 0xDF, 0x2C, 0xFB, 0x03, 0x3E, 0xDF, 0x35, 0x00, 0xB0,
|
||||
0x6A, 0x3E, 0x01, 0x7B, 0x91, 0x2D, 0xA8, 0x5D, 0x63, 0x03,
|
||||
0xF6, 0x4B, 0x27, 0x10, 0x58, 0x74, 0xC0, 0xE2, 0xF7, 0x00,
|
||||
0x00, 0xF2, 0xBB, 0x6F, 0xC1, 0xD4, 0x28, 0x08, 0x03, 0x80,
|
||||
0x68, 0x83, 0xE1, 0xCF, 0x77, 0xFF, 0xEF, 0x3F, 0xFD, 0x47,
|
||||
0xA0, 0x25, 0x00, 0x80, 0x66, 0x49, 0x92, 0x71, 0x00, 0x00,
|
||||
0x5E, 0x44, 0x24, 0x2E, 0x54, 0xCA, 0xB3, 0x3F, 0xC7, 0x08,
|
||||
0x00, 0x00, 0x44, 0xA0, 0x81, 0x2A, 0xB0, 0x41, 0x1B, 0xF4,
|
||||
0xC1, 0x18, 0x2C, 0xC0, 0x06, 0x1C, 0xC1, 0x05, 0xDC, 0xC1,
|
||||
0x0B, 0xFC, 0x60, 0x36, 0x84, 0x42, 0x24, 0xC4, 0xC2, 0x42,
|
||||
0x10, 0x42, 0x0A, 0x64, 0x80, 0x1C, 0x72, 0x60, 0x29, 0xAC,
|
||||
0x82, 0x42, 0x28, 0x86, 0xCD, 0xB0, 0x1D, 0x2A, 0x60, 0x2F,
|
||||
0xD4, 0x40, 0x1D, 0x34, 0xC0, 0x51, 0x68, 0x86, 0x93, 0x70,
|
||||
0x0E, 0x2E, 0xC2, 0x55, 0xB8, 0x0E, 0x3D, 0x70, 0x0F, 0xFA,
|
||||
0x61, 0x08, 0x9E, 0xC1, 0x28, 0xBC, 0x81, 0x09, 0x04, 0x41,
|
||||
0xC8, 0x08, 0x13, 0x61, 0x21, 0xDA, 0x88, 0x01, 0x62, 0x8A,
|
||||
0x58, 0x23, 0x8E, 0x08, 0x17, 0x99, 0x85, 0xF8, 0x21, 0xC1,
|
||||
0x48, 0x04, 0x12, 0x8B, 0x24, 0x20, 0xC9, 0x88, 0x14, 0x51,
|
||||
0x22, 0x4B, 0x91, 0x35, 0x48, 0x31, 0x52, 0x8A, 0x54, 0x20,
|
||||
0x55, 0x48, 0x1D, 0xF2, 0x3D, 0x72, 0x02, 0x39, 0x87, 0x5C,
|
||||
0x46, 0xBA, 0x91, 0x3B, 0xC8, 0x00, 0x32, 0x82, 0xFC, 0x86,
|
||||
0xBC, 0x47, 0x31, 0x94, 0x81, 0xB2, 0x51, 0x3D, 0xD4, 0x0C,
|
||||
0xB5, 0x43, 0xB9, 0xA8, 0x37, 0x1A, 0x84, 0x46, 0xA2, 0x0B,
|
||||
0xD0, 0x64, 0x74, 0x31, 0x9A, 0x8F, 0x16, 0xA0, 0x9B, 0xD0,
|
||||
0x72, 0xB4, 0x1A, 0x3D, 0x8C, 0x36, 0xA1, 0xE7, 0xD0, 0xAB,
|
||||
0x68, 0x0F, 0xDA, 0x8F, 0x3E, 0x43, 0xC7, 0x30, 0xC0, 0xE8,
|
||||
0x18, 0x07, 0x33, 0xC4, 0x6C, 0x30, 0x2E, 0xC6, 0xC3, 0x42,
|
||||
0xB1, 0x38, 0x2C, 0x09, 0x93, 0x63, 0xCB, 0xB1, 0x22, 0xAC,
|
||||
0x0C, 0xAB, 0xC6, 0x1A, 0xB0, 0x56, 0xAC, 0x03, 0xBB, 0x89,
|
||||
0xF5, 0x63, 0xCF, 0xB1, 0x77, 0x04, 0x12, 0x81, 0x45, 0xC0,
|
||||
0x09, 0x36, 0x04, 0x77, 0x42, 0x20, 0x61, 0x1E, 0x41, 0x48,
|
||||
0x58, 0x4C, 0x58, 0x4E, 0xD8, 0x48, 0xA8, 0x20, 0x1C, 0x24,
|
||||
0x34, 0x11, 0xDA, 0x09, 0x37, 0x09, 0x03, 0x84, 0x51, 0xC2,
|
||||
0x27, 0x22, 0x93, 0xA8, 0x4B, 0xB4, 0x26, 0xBA, 0x11, 0xF9,
|
||||
0xC4, 0x18, 0x62, 0x32, 0x31, 0x87, 0x58, 0x48, 0x2C, 0x23,
|
||||
0xD6, 0x12, 0x8F, 0x13, 0x2F, 0x10, 0x7B, 0x88, 0x43, 0xC4,
|
||||
0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xB9, 0x90, 0x02,
|
||||
0x49, 0xB1, 0xA4, 0x54, 0xD2, 0x12, 0xD2, 0x46, 0xD2, 0x6E,
|
||||
0x52, 0x23, 0xE9, 0x2C, 0xA9, 0x9B, 0x34, 0x48, 0x1A, 0x23,
|
||||
0x93, 0xC9, 0xDA, 0x64, 0x6B, 0xB2, 0x07, 0x39, 0x94, 0x2C,
|
||||
0x20, 0x2B, 0xC8, 0x85, 0xE4, 0x9D, 0xE4, 0xC3, 0xE4, 0x33,
|
||||
0xE4, 0x1B, 0xE4, 0x21, 0xF2, 0x5B, 0x0A, 0x9D, 0x62, 0x40,
|
||||
0x71, 0xA4, 0xF8, 0x53, 0xE2, 0x28, 0x52, 0xCA, 0x6A, 0x4A,
|
||||
0x19, 0xE5, 0x10, 0xE5, 0x34, 0xE5, 0x06, 0x65, 0x98, 0x32,
|
||||
0x41, 0x55, 0xA3, 0x9A, 0x52, 0xDD, 0xA8, 0xA1, 0x54, 0x11,
|
||||
0x35, 0x8F, 0x5A, 0x42, 0xAD, 0xA1, 0xB6, 0x52, 0xAF, 0x51,
|
||||
0x87, 0xA8, 0x13, 0x34, 0x75, 0x9A, 0x39, 0xCD, 0x83, 0x16,
|
||||
0x49, 0x4B, 0xA5, 0xAD, 0xA2, 0x95, 0xD3, 0x1A, 0x68, 0x17,
|
||||
0x68, 0xF7, 0x69, 0xAF, 0xE8, 0x74, 0xBA, 0x11, 0xDD, 0x95,
|
||||
0x1E, 0x4E, 0x97, 0xD0, 0x57, 0xD2, 0xCB, 0xE9, 0x47, 0xE8,
|
||||
0x97, 0xE8, 0x03, 0xF4, 0x77, 0x0C, 0x0D, 0x86, 0x15, 0x83,
|
||||
0xC7, 0x88, 0x67, 0x28, 0x19, 0x9B, 0x18, 0x07, 0x18, 0x67,
|
||||
0x19, 0x77, 0x18, 0xAF, 0x98, 0x4C, 0xA6, 0x19, 0xD3, 0x8B,
|
||||
0x19, 0xC7, 0x54, 0x30, 0x37, 0x31, 0xEB, 0x98, 0xE7, 0x99,
|
||||
0x0F, 0x99, 0x6F, 0x55, 0x58, 0x2A, 0xB6, 0x2A, 0x7C, 0x15,
|
||||
0x91, 0xCA, 0x0A, 0x95, 0x4A, 0x95, 0x26, 0x95, 0x1B, 0x2A,
|
||||
0x2F, 0x54, 0xA9, 0xAA, 0xA6, 0xAA, 0xDE, 0xAA, 0x0B, 0x55,
|
||||
0xF3, 0x55, 0xCB, 0x54, 0x8F, 0xA9, 0x5E, 0x53, 0x7D, 0xAE,
|
||||
0x46, 0x55, 0x33, 0x53, 0xE3, 0xA9, 0x09, 0xD4, 0x96, 0xAB,
|
||||
0x55, 0xAA, 0x9D, 0x50, 0xEB, 0x53, 0x1B, 0x53, 0x67, 0xA9,
|
||||
0x3B, 0xA8, 0x87, 0xAA, 0x67, 0xA8, 0x6F, 0x54, 0x3F, 0xA4,
|
||||
0x7E, 0x59, 0xFD, 0x89, 0x06, 0x59, 0xC3, 0x4C, 0xC3, 0x4F,
|
||||
0x43, 0xA4, 0x51, 0xA0, 0xB1, 0x5F, 0xE3, 0xBC, 0xC6, 0x20,
|
||||
0x0B, 0x63, 0x19, 0xB3, 0x78, 0x2C, 0x21, 0x6B, 0x0D, 0xAB,
|
||||
0x86, 0x75, 0x81, 0x35, 0xC4, 0x26, 0xB1, 0xCD, 0xD9, 0x7C,
|
||||
0x76, 0x2A, 0xBB, 0x98, 0xFD, 0x1D, 0xBB, 0x8B, 0x3D, 0xAA,
|
||||
0xA9, 0xA1, 0x39, 0x43, 0x33, 0x4A, 0x33, 0x57, 0xB3, 0x52,
|
||||
0xF3, 0x94, 0x66, 0x3F, 0x07, 0xE3, 0x98, 0x71, 0xF8, 0x9C,
|
||||
0x74, 0x4E, 0x09, 0xE7, 0x28, 0xA7, 0x97, 0xF3, 0x7E, 0x8A,
|
||||
0xDE, 0x14, 0xEF, 0x29, 0xE2, 0x29, 0x1B, 0xA6, 0x34, 0x4C,
|
||||
0xB9, 0x31, 0x65, 0x5C, 0x6B, 0xAA, 0x96, 0x97, 0x96, 0x58,
|
||||
0xAB, 0x48, 0xAB, 0x51, 0xAB, 0x47, 0xEB, 0xBD, 0x36, 0xAE,
|
||||
0xED, 0xA7, 0x9D, 0xA6, 0xBD, 0x45, 0xBB, 0x59, 0xFB, 0x81,
|
||||
0x0E, 0x41, 0xC7, 0x4A, 0x27, 0x5C, 0x27, 0x47, 0x67, 0x8F,
|
||||
0xCE, 0x05, 0x9D, 0xE7, 0x53, 0xD9, 0x53, 0xDD, 0xA7, 0x0A,
|
||||
0xA7, 0x16, 0x4D, 0x3D, 0x3A, 0xF5, 0xAE, 0x2E, 0xAA, 0x6B,
|
||||
0xA5, 0x1B, 0xA1, 0xBB, 0x44, 0x77, 0xBF, 0x6E, 0xA7, 0xEE,
|
||||
0x98, 0x9E, 0xBE, 0x5E, 0x80, 0x9E, 0x4C, 0x6F, 0xA7, 0xDE,
|
||||
0x79, 0xBD, 0xE7, 0xFA, 0x1C, 0x7D, 0x2F, 0xFD, 0x54, 0xFD,
|
||||
0x6D, 0xFA, 0xA7, 0xF5, 0x47, 0x0C, 0x58, 0x06, 0xB3, 0x0C,
|
||||
0x24, 0x06, 0xDB, 0x0C, 0xCE, 0x18, 0x3C, 0xC5, 0x35, 0x71,
|
||||
0x6F, 0x3C, 0x1D, 0x2F, 0xC7, 0xDB, 0xF1, 0x51, 0x43, 0x5D,
|
||||
0xC3, 0x40, 0x43, 0xA5, 0x61, 0x95, 0x61, 0x97, 0xE1, 0x84,
|
||||
0x91, 0xB9, 0xD1, 0x3C, 0xA3, 0xD5, 0x46, 0x8D, 0x46, 0x0F,
|
||||
0x8C, 0x69, 0xC6, 0x5C, 0xE3, 0x24, 0xE3, 0x6D, 0xC6, 0x6D,
|
||||
0xC6, 0xA3, 0x26, 0x06, 0x26, 0x21, 0x26, 0x4B, 0x4D, 0xEA,
|
||||
0x4D, 0xEE, 0x9A, 0x52, 0x4D, 0xB9, 0xA6, 0x29, 0xA6, 0x3B,
|
||||
0x4C, 0x3B, 0x4C, 0xC7, 0xCD, 0xCC, 0xCD, 0xA2, 0xCD, 0xD6,
|
||||
0x99, 0x35, 0x9B, 0x3D, 0x31, 0xD7, 0x32, 0xE7, 0x9B, 0xE7,
|
||||
0x9B, 0xD7, 0x9B, 0xDF, 0xB7, 0x60, 0x5A, 0x78, 0x5A, 0x2C,
|
||||
0xB6, 0xA8, 0xB6, 0xB8, 0x65, 0x49, 0xB2, 0xE4, 0x5A, 0xA6,
|
||||
0x59, 0xEE, 0xB6, 0xBC, 0x6E, 0x85, 0x5A, 0x39, 0x59, 0xA5,
|
||||
0x58, 0x55, 0x5A, 0x5D, 0xB3, 0x46, 0xAD, 0x9D, 0xAD, 0x25,
|
||||
0xD6, 0xBB, 0xAD, 0xBB, 0xA7, 0x11, 0xA7, 0xB9, 0x4E, 0x93,
|
||||
0x4E, 0xAB, 0x9E, 0xD6, 0x67, 0xC3, 0xB0, 0xF1, 0xB6, 0xC9,
|
||||
0xB6, 0xA9, 0xB7, 0x19, 0xB0, 0xE5, 0xD8, 0x06, 0xDB, 0xAE,
|
||||
0xB6, 0x6D, 0xB6, 0x7D, 0x61, 0x67, 0x62, 0x17, 0x67, 0xB7,
|
||||
0xC5, 0xAE, 0xC3, 0xEE, 0x93, 0xBD, 0x93, 0x7D, 0xBA, 0x7D,
|
||||
0x8D, 0xFD, 0x3D, 0x07, 0x0D, 0x87, 0xD9, 0x0E, 0xAB, 0x1D,
|
||||
0x5A, 0x1D, 0x7E, 0x73, 0xB4, 0x72, 0x14, 0x3A, 0x56, 0x3A,
|
||||
0xDE, 0x9A, 0xCE, 0x9C, 0xEE, 0x3F, 0x7D, 0xC5, 0xF4, 0x96,
|
||||
0xE9, 0x2F, 0x67, 0x58, 0xCF, 0x10, 0xCF, 0xD8, 0x33, 0xE3,
|
||||
0xB6, 0x13, 0xCB, 0x29, 0xC4, 0x69, 0x9D, 0x53, 0x9B, 0xD3,
|
||||
0x47, 0x67, 0x17, 0x67, 0xB9, 0x73, 0x83, 0xF3, 0x88, 0x8B,
|
||||
0x89, 0x4B, 0x82, 0xCB, 0x2E, 0x97, 0x3E, 0x2E, 0x9B, 0x1B,
|
||||
0xC6, 0xDD, 0xC8, 0xBD, 0xE4, 0x4A, 0x74, 0xF5, 0x71, 0x5D,
|
||||
0xE1, 0x7A, 0xD2, 0xF5, 0x9D, 0x9B, 0xB3, 0x9B, 0xC2, 0xED,
|
||||
0xA8, 0xDB, 0xAF, 0xEE, 0x36, 0xEE, 0x69, 0xEE, 0x87, 0xDC,
|
||||
0x9F, 0xCC, 0x34, 0x9F, 0x29, 0x9E, 0x59, 0x33, 0x73, 0xD0,
|
||||
0xC3, 0xC8, 0x43, 0xE0, 0x51, 0xE5, 0xD1, 0x3F, 0x0B, 0x9F,
|
||||
0x95, 0x30, 0x6B, 0xDF, 0xAC, 0x7E, 0x4F, 0x43, 0x4F, 0x81,
|
||||
0x67, 0xB5, 0xE7, 0x23, 0x2F, 0x63, 0x2F, 0x91, 0x57, 0xAD,
|
||||
0xD7, 0xB0, 0xB7, 0xA5, 0x77, 0xAA, 0xF7, 0x61, 0xEF, 0x17,
|
||||
0x3E, 0xF6, 0x3E, 0x72, 0x9F, 0xE3, 0x3E, 0xE3, 0x3C, 0x37,
|
||||
0xDE, 0x32, 0xDE, 0x59, 0x5F, 0xCC, 0x37, 0xC0, 0xB7, 0xC8,
|
||||
0xB7, 0xCB, 0x4F, 0xC3, 0x6F, 0x9E, 0x5F, 0x85, 0xDF, 0x43,
|
||||
0x7F, 0x23, 0xFF, 0x64, 0xFF, 0x7A, 0xFF, 0xD1, 0x00, 0xA7,
|
||||
0x80, 0x25, 0x01, 0x67, 0x03, 0x89, 0x81, 0x41, 0x81, 0x5B,
|
||||
0x02, 0xFB, 0xF8, 0x7A, 0x7C, 0x21, 0xBF, 0x8E, 0x3F, 0x3A,
|
||||
0xDB, 0x65, 0xF6, 0xB2, 0xD9, 0xED, 0x41, 0x8C, 0xA0, 0xB9,
|
||||
0x41, 0x15, 0x41, 0x8F, 0x82, 0xAD, 0x82, 0xE5, 0xC1, 0xAD,
|
||||
0x21, 0x68, 0xC8, 0xEC, 0x90, 0xAD, 0x21, 0xF7, 0xE7, 0x98,
|
||||
0xCE, 0x91, 0xCE, 0x69, 0x0E, 0x85, 0x50, 0x7E, 0xE8, 0xD6,
|
||||
0xD0, 0x07, 0x61, 0xE6, 0x61, 0x8B, 0xC3, 0x7E, 0x0C, 0x27,
|
||||
0x85, 0x87, 0x85, 0x57, 0x86, 0x3F, 0x8E, 0x70, 0x88, 0x58,
|
||||
0x1A, 0xD1, 0x31, 0x97, 0x35, 0x77, 0xD1, 0xDC, 0x43, 0x73,
|
||||
0xDF, 0x44, 0xFA, 0x44, 0x96, 0x44, 0xDE, 0x9B, 0x67, 0x31,
|
||||
0x4F, 0x39, 0xAF, 0x2D, 0x4A, 0x35, 0x2A, 0x3E, 0xAA, 0x2E,
|
||||
0x6A, 0x3C, 0xDA, 0x37, 0xBA, 0x34, 0xBA, 0x3F, 0xC6, 0x2E,
|
||||
0x66, 0x59, 0xCC, 0xD5, 0x58, 0x9D, 0x58, 0x49, 0x6C, 0x4B,
|
||||
0x1C, 0x39, 0x2E, 0x2A, 0xAE, 0x36, 0x6E, 0x6C, 0xBE, 0xDF,
|
||||
0xFC, 0xED, 0xF3, 0x87, 0xE2, 0x9D, 0xE2, 0x0B, 0xE3, 0x7B,
|
||||
0x17, 0x98, 0x2F, 0xC8, 0x5D, 0x70, 0x79, 0xA1, 0xCE, 0xC2,
|
||||
0xF4, 0x85, 0xA7, 0x16, 0xA9, 0x2E, 0x12, 0x2C, 0x3A, 0x96,
|
||||
0x40, 0x4C, 0x88, 0x4E, 0x38, 0x94, 0xF0, 0x41, 0x10, 0x2A,
|
||||
0xA8, 0x16, 0x8C, 0x25, 0xF2, 0x13, 0x77, 0x25, 0x8E, 0x0A,
|
||||
0x79, 0xC2, 0x1D, 0xC2, 0x67, 0x22, 0x2F, 0xD1, 0x36, 0xD1,
|
||||
0x88, 0xD8, 0x43, 0x5C, 0x2A, 0x1E, 0x4E, 0xF2, 0x48, 0x2A,
|
||||
0x4D, 0x7A, 0x92, 0xEC, 0x91, 0xBC, 0x35, 0x79, 0x24, 0xC5,
|
||||
0x33, 0xA5, 0x2C, 0xE5, 0xB9, 0x84, 0x27, 0xA9, 0x90, 0xBC,
|
||||
0x4C, 0x0D, 0x4C, 0xDD, 0x9B, 0x3A, 0x9E, 0x16, 0x9A, 0x76,
|
||||
0x20, 0x6D, 0x32, 0x3D, 0x3A, 0xBD, 0x31, 0x83, 0x92, 0x91,
|
||||
0x90, 0x71, 0x42, 0xAA, 0x21, 0x4D, 0x93, 0xB6, 0x67, 0xEA,
|
||||
0x67, 0xE6, 0x66, 0x76, 0xCB, 0xAC, 0x65, 0x85, 0xB2, 0xFE,
|
||||
0xC5, 0x6E, 0x8B, 0xB7, 0x2F, 0x1E, 0x95, 0x07, 0xC9, 0x6B,
|
||||
0xB3, 0x90, 0xAC, 0x05, 0x59, 0x2D, 0x0A, 0xB6, 0x42, 0xA6,
|
||||
0xE8, 0x54, 0x5A, 0x28, 0xD7, 0x2A, 0x07, 0xB2, 0x67, 0x65,
|
||||
0x57, 0x66, 0xBF, 0xCD, 0x89, 0xCA, 0x39, 0x96, 0xAB, 0x9E,
|
||||
0x2B, 0xCD, 0xED, 0xCC, 0xB3, 0xCA, 0xDB, 0x90, 0x37, 0x9C,
|
||||
0xEF, 0x9F, 0xFF, 0xED, 0x12, 0xC2, 0x12, 0xE1, 0x92, 0xB6,
|
||||
0xA5, 0x86, 0x4B, 0x57, 0x2D, 0x1D, 0x58, 0xE6, 0xBD, 0xAC,
|
||||
0x6A, 0x39, 0xB2, 0x3C, 0x71, 0x79, 0xDB, 0x0A, 0xE3, 0x15,
|
||||
0x05, 0x2B, 0x86, 0x56, 0x06, 0xAC, 0x3C, 0xB8, 0x8A, 0xB6,
|
||||
0x2A, 0x6D, 0xD5, 0x4F, 0xAB, 0xED, 0x57, 0x97, 0xAE, 0x7E,
|
||||
0xBD, 0x26, 0x7A, 0x4D, 0x6B, 0x81, 0x5E, 0xC1, 0xCA, 0x82,
|
||||
0xC1, 0xB5, 0x01, 0x6B, 0xEB, 0x0B, 0x55, 0x0A, 0xE5, 0x85,
|
||||
0x7D, 0xEB, 0xDC, 0xD7, 0xED, 0x5D, 0x4F, 0x58, 0x2F, 0x59,
|
||||
0xDF, 0xB5, 0x61, 0xFA, 0x86, 0x9D, 0x1B, 0x3E, 0x15, 0x89,
|
||||
0x8A, 0xAE, 0x14, 0xDB, 0x17, 0x97, 0x15, 0x7F, 0xD8, 0x28,
|
||||
0xDC, 0x78, 0xE5, 0x1B, 0x87, 0x6F, 0xCA, 0xBF, 0x99, 0xDC,
|
||||
0x94, 0xB4, 0xA9, 0xAB, 0xC4, 0xB9, 0x64, 0xCF, 0x66, 0xD2,
|
||||
0x66, 0xE9, 0xE6, 0xDE, 0x2D, 0x9E, 0x5B, 0x0E, 0x96, 0xAA,
|
||||
0x97, 0xE6, 0x97, 0x0E, 0x6E, 0x0D, 0xD9, 0xDA, 0xB4, 0x0D,
|
||||
0xDF, 0x56, 0xB4, 0xED, 0xF5, 0xF6, 0x45, 0xDB, 0x2F, 0x97,
|
||||
0xCD, 0x28, 0xDB, 0xBB, 0x83, 0xB6, 0x43, 0xB9, 0xA3, 0xBF,
|
||||
0x3C, 0xB8, 0xBC, 0x65, 0xA7, 0xC9, 0xCE, 0xCD, 0x3B, 0x3F,
|
||||
0x54, 0xA4, 0x54, 0xF4, 0x54, 0xFA, 0x54, 0x36, 0xEE, 0xD2,
|
||||
0xDD, 0xB5, 0x61, 0xD7, 0xF8, 0x6E, 0xD1, 0xEE, 0x1B, 0x7B,
|
||||
0xBC, 0xF6, 0x34, 0xEC, 0xD5, 0xDB, 0x5B, 0xBC, 0xF7, 0xFD,
|
||||
0x3E, 0xC9, 0xBE, 0xDB, 0x55, 0x01, 0x55, 0x4D, 0xD5, 0x66,
|
||||
0xD5, 0x65, 0xFB, 0x49, 0xFB, 0xB3, 0xF7, 0x3F, 0xAE, 0x89,
|
||||
0xAA, 0xE9, 0xF8, 0x96, 0xFB, 0x6D, 0x5D, 0xAD, 0x4E, 0x6D,
|
||||
0x71, 0xED, 0xC7, 0x03, 0xD2, 0x03, 0xFD, 0x07, 0x23, 0x0E,
|
||||
0xB6, 0xD7, 0xB9, 0xD4, 0xD5, 0x1D, 0xD2, 0x3D, 0x54, 0x52,
|
||||
0x8F, 0xD6, 0x2B, 0xEB, 0x47, 0x0E, 0xC7, 0x1F, 0xBE, 0xFE,
|
||||
0x9D, 0xEF, 0x77, 0x2D, 0x0D, 0x36, 0x0D, 0x55, 0x8D, 0x9C,
|
||||
0xC6, 0xE2, 0x23, 0x70, 0x44, 0x79, 0xE4, 0xE9, 0xF7, 0x09,
|
||||
0xDF, 0xF7, 0x1E, 0x0D, 0x3A, 0xDA, 0x76, 0x8C, 0x7B, 0xAC,
|
||||
0xE1, 0x07, 0xD3, 0x1F, 0x76, 0x1D, 0x67, 0x1D, 0x2F, 0x6A,
|
||||
0x42, 0x9A, 0xF2, 0x9A, 0x46, 0x9B, 0x53, 0x9A, 0xFB, 0x5B,
|
||||
0x62, 0x5B, 0xBA, 0x4F, 0xCC, 0x3E, 0xD1, 0xD6, 0xEA, 0xDE,
|
||||
0x7A, 0xFC, 0x47, 0xDB, 0x1F, 0x0F, 0x9C, 0x34, 0x3C, 0x59,
|
||||
0x79, 0x4A, 0xF3, 0x54, 0xC9, 0x69, 0xDA, 0xE9, 0x82, 0xD3,
|
||||
0x93, 0x67, 0xF2, 0xCF, 0x8C, 0x9D, 0x95, 0x9D, 0x7D, 0x7E,
|
||||
0x2E, 0xF9, 0xDC, 0x60, 0xDB, 0xA2, 0xB6, 0x7B, 0xE7, 0x63,
|
||||
0xCE, 0xDF, 0x6A, 0x0F, 0x6F, 0xEF, 0xBA, 0x10, 0x74, 0xE1,
|
||||
0xD2, 0x45, 0xFF, 0x8B, 0xE7, 0x3B, 0xBC, 0x3B, 0xCE, 0x5C,
|
||||
0xF2, 0xB8, 0x74, 0xF2, 0xB2, 0xDB, 0xE5, 0x13, 0x57, 0xB8,
|
||||
0x57, 0x9A, 0xAF, 0x3A, 0x5F, 0x6D, 0xEA, 0x74, 0xEA, 0x3C,
|
||||
0xFE, 0x93, 0xD3, 0x4F, 0xC7, 0xBB, 0x9C, 0xBB, 0x9A, 0xAE,
|
||||
0xB9, 0x5C, 0x6B, 0xB9, 0xEE, 0x7A, 0xBD, 0xB5, 0x7B, 0x66,
|
||||
0xF7, 0xE9, 0x1B, 0x9E, 0x37, 0xCE, 0xDD, 0xF4, 0xBD, 0x79,
|
||||
0xF1, 0x16, 0xFF, 0xD6, 0xD5, 0x9E, 0x39, 0x3D, 0xDD, 0xBD,
|
||||
0xF3, 0x7A, 0x6F, 0xF7, 0xC5, 0xF7, 0xF5, 0xDF, 0x16, 0xDD,
|
||||
0x7E, 0x72, 0x27, 0xFD, 0xCE, 0xCB, 0xBB, 0xD9, 0x77, 0x27,
|
||||
0xEE, 0xAD, 0xBC, 0x4F, 0xBC, 0x5F, 0xF4, 0x40, 0xED, 0x41,
|
||||
0xD9, 0x43, 0xDD, 0x87, 0xD5, 0x3F, 0x5B, 0xFE, 0xDC, 0xD8,
|
||||
0xEF, 0xDC, 0x7F, 0x6A, 0xC0, 0x77, 0xA0, 0xF3, 0xD1, 0xDC,
|
||||
0x47, 0xF7, 0x06, 0x85, 0x83, 0xCF, 0xFE, 0x91, 0xF5, 0x8F,
|
||||
0x0F, 0x43, 0x05, 0x8F, 0x99, 0x8F, 0xCB, 0x86, 0x0D, 0x86,
|
||||
0xEB, 0x9E, 0x38, 0x3E, 0x39, 0x39, 0xE2, 0x3F, 0x72, 0xFD,
|
||||
0xE9, 0xFC, 0xA7, 0x43, 0xCF, 0x64, 0xCF, 0x26, 0x9E, 0x17,
|
||||
0xFE, 0xA2, 0xFE, 0xCB, 0xAE, 0x17, 0x16, 0x2F, 0x7E, 0xF8,
|
||||
0xD5, 0xEB, 0xD7, 0xCE, 0xD1, 0x98, 0xD1, 0xA1, 0x97, 0xF2,
|
||||
0x97, 0x93, 0xBF, 0x6D, 0x7C, 0xA5, 0xFD, 0xEA, 0xC0, 0xEB,
|
||||
0x19, 0xAF, 0xDB, 0xC6, 0xC2, 0xC6, 0x1E, 0xBE, 0xC9, 0x78,
|
||||
0x33, 0x31, 0x5E, 0xF4, 0x56, 0xFB, 0xED, 0xC1, 0x77, 0xDC,
|
||||
0x77, 0x1D, 0xEF, 0xA3, 0xDF, 0x0F, 0x4F, 0xE4, 0x7C, 0x20,
|
||||
0x7F, 0x28, 0xFF, 0x68, 0xF9, 0xB1, 0xF5, 0x53, 0xD0, 0xA7,
|
||||
0xFB, 0x93, 0x19, 0x93, 0x93, 0xFF, 0x04, 0x03, 0x98, 0xF3,
|
||||
0xFC, 0x63, 0x33, 0x2D, 0xDB, 0x00, 0x00, 0x00, 0x20, 0x63,
|
||||
0x48, 0x52, 0x4D, 0x00, 0x00, 0x7A, 0x25, 0x00, 0x00, 0x80,
|
||||
0x83, 0x00, 0x00, 0xF9, 0xFF, 0x00, 0x00, 0x80, 0xE9, 0x00,
|
||||
0x00, 0x75, 0x30, 0x00, 0x00, 0xEA, 0x60, 0x00, 0x00, 0x3A,
|
||||
0x98, 0x00, 0x00, 0x17, 0x6F, 0x92, 0x5F, 0xC5, 0x46, 0x00,
|
||||
0x00, 0x09, 0x20, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0x9C,
|
||||
0x97, 0x7F, 0x90, 0x5E, 0x65, 0x75, 0xC7, 0x3F, 0xE7, 0x3C,
|
||||
0x3F, 0xEE, 0x8F, 0xF7, 0x7D, 0xF7, 0x67, 0xC8, 0x86, 0xD0,
|
||||
0x95, 0x60, 0x48, 0x03, 0x6A, 0x90, 0x08, 0xE3, 0x80, 0x44,
|
||||
0x99, 0xA0, 0x16, 0xE5, 0x87, 0x05, 0x6B, 0x07, 0x61, 0xFC,
|
||||
0xC3, 0x01, 0x9D, 0x01, 0x95, 0x4E, 0xF9, 0xA3, 0xA5, 0x33,
|
||||
0xB6, 0x76, 0x3A, 0xC2, 0x50, 0x99, 0x71, 0x44, 0x51, 0x92,
|
||||
0x51, 0x0B, 0x28, 0x30, 0xAD, 0x75, 0x2A, 0x19, 0x61, 0x6C,
|
||||
0x1D, 0x48, 0x75, 0x87, 0x76, 0xA8, 0xA8, 0x24, 0x1A, 0x24,
|
||||
0x1A, 0xC2, 0xC6, 0x00, 0xD9, 0x24, 0xCB, 0x66, 0xB3, 0xBB,
|
||||
0xEF, 0xEE, 0xFB, 0xEB, 0xDE, 0xFB, 0x3C, 0xFD, 0xE3, 0x5D,
|
||||
0x62, 0x77, 0x5A, 0x65, 0xEB, 0x77, 0xE6, 0xCE, 0xDC, 0xE7,
|
||||
0xDC, 0x7B, 0x9F, 0xF3, 0x3D, 0xCF, 0x73, 0xEE, 0xF7, 0x9C,
|
||||
0x47, 0x1E, 0x7D, 0xF4, 0x51, 0x76, 0xEE, 0xD8, 0x71, 0xF1,
|
||||
0xA5, 0xEF, 0xBD, 0xE2, 0xF1, 0x10, 0x24, 0xB1, 0xCE, 0x11,
|
||||
0x45, 0x00, 0x20, 0xC6, 0xFE, 0xC5, 0xF2, 0xB8, 0x6F, 0x3C,
|
||||
0x75, 0x27, 0xA2, 0x88, 0x48, 0xFF, 0x71, 0x84, 0x18, 0x03,
|
||||
0x11, 0xF9, 0xCD, 0xEB, 0x21, 0xAE, 0xF8, 0x46, 0x80, 0xB2,
|
||||
0x2C, 0x50, 0xA1, 0x3B, 0xF1, 0xE4, 0xF7, 0xAE, 0xBA, 0xF9,
|
||||
0x96, 0x5B, 0x9E, 0xB6, 0xCE, 0xE8, 0xA5, 0x7B, 0x0E, 0xBE,
|
||||
0xBA, 0xAB, 0xB1, 0x61, 0x7A, 0xE8, 0xFA, 0x0F, 0xBC, 0x9B,
|
||||
0xA2, 0x0C, 0x20, 0x86, 0x28, 0x20, 0x21, 0x10, 0x89, 0xC8,
|
||||
0xF2, 0x8C, 0x71, 0x99, 0x94, 0x8A, 0xE0, 0xD3, 0x94, 0xB9,
|
||||
0xB9, 0x79, 0x9A, 0x0B, 0xF3, 0x20, 0x4A, 0x92, 0x24, 0x8C,
|
||||
0x8E, 0x8E, 0x22, 0x22, 0xF4, 0x8A, 0xA2, 0xEF, 0x30, 0x86,
|
||||
0x95, 0xA4, 0x63, 0xC4, 0x59, 0xE5, 0x1F, 0x77, 0x3D, 0x51,
|
||||
0xDB, 0x73, 0x60, 0xFA, 0x7B, 0xCE, 0xE8, 0x35, 0x76, 0xFF,
|
||||
0xE4, 0xD4, 0x63, 0xED, 0x90, 0x34, 0x6E, 0xBD, 0xE9, 0x3A,
|
||||
0xD2, 0xC4, 0xD3, 0x2B, 0x2A, 0x40, 0x41, 0x5E, 0x63, 0xFD,
|
||||
0x5A, 0x78, 0x10, 0x55, 0x50, 0xA0, 0x96, 0xD7, 0xF8, 0xF1,
|
||||
0x33, 0xFF, 0xC5, 0xA1, 0x83, 0xFB, 0xD1, 0x58, 0x22, 0xAA,
|
||||
0xF4, 0x8A, 0x92, 0xE3, 0x03, 0x43, 0x5C, 0xF2, 0xAE, 0xF7,
|
||||
0x30, 0x3C, 0x3C, 0xC2, 0xD2, 0xD2, 0x22, 0x88, 0xF4, 0xE3,
|
||||
0x0E, 0x11, 0x11, 0x88, 0x12, 0xF1, 0x2A, 0xDC, 0xFA, 0xF1,
|
||||
0xEB, 0xF9, 0xFE, 0xBF, 0x3F, 0x35, 0xB4, 0x7F, 0x72, 0xEA,
|
||||
0x31, 0xFB, 0xCA, 0xF1, 0x59, 0xBB, 0xE5, 0xBC, 0xB7, 0x30,
|
||||
0x7D, 0x62, 0x9E, 0xA5, 0x6E, 0x44, 0x8C, 0x25, 0xA2, 0x20,
|
||||
0x10, 0x43, 0x58, 0x5E, 0x6A, 0x21, 0x56, 0x15, 0x36, 0xF1,
|
||||
0x64, 0x69, 0xCE, 0x93, 0x8F, 0xFC, 0x03, 0x23, 0x59, 0xC5,
|
||||
0xC7, 0x6E, 0xBA, 0x91, 0xB3, 0xCE, 0x7A, 0x23, 0x00, 0x0B,
|
||||
0x0B, 0xF3, 0xEC, 0xDE, 0xBD, 0x9B, 0x1D, 0x5F, 0xFE, 0x02,
|
||||
0xEF, 0x78, 0xEF, 0x07, 0x19, 0xDF, 0xB0, 0x91, 0xE6, 0xC2,
|
||||
0x02, 0xC6, 0x18, 0x42, 0x08, 0x40, 0x44, 0x55, 0x08, 0x45,
|
||||
0x41, 0x3D, 0x81, 0x2D, 0xE7, 0xBD, 0x85, 0x57, 0x8E, 0x9F,
|
||||
0xB4, 0xD6, 0xF8, 0x7A, 0xE8, 0x52, 0xE7, 0xC8, 0x4C, 0x9B,
|
||||
0x66, 0x61, 0x50, 0x13, 0x29, 0x81, 0x10, 0x22, 0xCE, 0x19,
|
||||
0xAC, 0x4F, 0x89, 0x40, 0xD1, 0x29, 0xA9, 0x0F, 0x26, 0x3C,
|
||||
0xFD, 0xF8, 0xB7, 0xD9, 0xB6, 0x69, 0x88, 0x3F, 0xFB, 0xF3,
|
||||
0xDB, 0xF8, 0x9F, 0x18, 0x18, 0x18, 0xE4, 0xDA, 0x6B, 0x3F,
|
||||
0xC8, 0x39, 0x9B, 0x37, 0xF3, 0xE9, 0x3B, 0x3E, 0xCF, 0xE6,
|
||||
0x6D, 0x7F, 0x42, 0xBD, 0x31, 0x48, 0x51, 0xB6, 0x91, 0xE5,
|
||||
0x20, 0x8C, 0x2A, 0x45, 0xBB, 0xC5, 0x50, 0x0A, 0xBD, 0xD8,
|
||||
0xC0, 0x24, 0xF5, 0x60, 0xD5, 0xD5, 0x98, 0xEF, 0x35, 0x78,
|
||||
0x69, 0xA6, 0xCB, 0x52, 0x70, 0x88, 0x03, 0x49, 0x6A, 0xA8,
|
||||
0xB5, 0x34, 0x5F, 0x9D, 0x65, 0xEA, 0x3F, 0xBF, 0x81, 0xA9,
|
||||
0xAF, 0xE1, 0xDC, 0xCB, 0xAE, 0xE7, 0x27, 0x13, 0x4F, 0xB1,
|
||||
0x31, 0xEB, 0xF0, 0x89, 0x4F, 0x7C, 0x92, 0xDF, 0x86, 0x73,
|
||||
0xDF, 0xF4, 0x66, 0xFE, 0xF2, 0x53, 0x37, 0x72, 0xDB, 0xE7,
|
||||
0x1E, 0x64, 0xEB, 0xD5, 0x1F, 0xA7, 0x6A, 0x17, 0xFD, 0x44,
|
||||
0x05, 0x62, 0xD9, 0xA3, 0xE8, 0x74, 0x68, 0x26, 0x96, 0x66,
|
||||
0x39, 0x82, 0xBA, 0x1A, 0x56, 0xAD, 0x67, 0xB1, 0xDB, 0xE0,
|
||||
0xF0, 0x74, 0x97, 0xB6, 0x06, 0x74, 0x20, 0x67, 0xEE, 0xD0,
|
||||
0x3E, 0xDA, 0xD3, 0x2F, 0x33, 0x77, 0xE4, 0x30, 0x0F, 0xDD,
|
||||
0xF9, 0x31, 0x9E, 0x7A, 0xFA, 0xC7, 0x3C, 0xF2, 0x83, 0x1F,
|
||||
0x90, 0x4F, 0xFF, 0x94, 0xFB, 0x1F, 0xF8, 0x1C, 0xD6, 0x7B,
|
||||
0x7E, 0x17, 0x2E, 0x7A, 0xC7, 0x36, 0xAE, 0x7A, 0xFB, 0x04,
|
||||
0x8F, 0xEF, 0x7D, 0x96, 0x33, 0xCE, 0x7E, 0x1B, 0x9D, 0xA5,
|
||||
0x45, 0xAC, 0x31, 0x14, 0xDD, 0x82, 0xD0, 0x81, 0xA6, 0x96,
|
||||
0xB4, 0xCA, 0x51, 0xAC, 0x49, 0x50, 0x35, 0x86, 0xA5, 0x22,
|
||||
0x67, 0x6A, 0x36, 0x30, 0x5B, 0x64, 0xBC, 0x74, 0xE4, 0x28,
|
||||
0xE7, 0x96, 0x87, 0xB8, 0xF3, 0x86, 0x0B, 0xD9, 0x54, 0x5F,
|
||||
0x60, 0xBE, 0xB9, 0xC4, 0xAD, 0x9F, 0xBC, 0x99, 0x43, 0x4F,
|
||||
0xDC, 0xCF, 0x15, 0xEF, 0xBC, 0x80, 0xD1, 0xB5, 0xEB, 0x59,
|
||||
0x0D, 0xDE, 0x79, 0xD1, 0xDB, 0x99, 0x69, 0x2D, 0x31, 0xDD,
|
||||
0x35, 0xCC, 0xB4, 0x61, 0xBA, 0x15, 0x99, 0x5E, 0x8C, 0x4C,
|
||||
0x37, 0x23, 0x47, 0x4F, 0x0A, 0xAD, 0x22, 0x45, 0xAD, 0x60,
|
||||
0xAD, 0x85, 0x6E, 0x35, 0xC8, 0xD1, 0x79, 0x25, 0xC9, 0x32,
|
||||
0x16, 0x7B, 0x2D, 0xB0, 0x05, 0x97, 0x5F, 0xF9, 0x01, 0x2E,
|
||||
0xDE, 0xF6, 0x2E, 0x0E, 0xBF, 0xF4, 0x32, 0x59, 0x96, 0x73,
|
||||
0xD9, 0x85, 0x1B, 0x09, 0xDD, 0x05, 0x56, 0x8B, 0xD9, 0x93,
|
||||
0x73, 0x1C, 0x79, 0x65, 0x8A, 0xB8, 0x41, 0x31, 0x65, 0x42,
|
||||
0x59, 0x16, 0x48, 0x95, 0xA2, 0xD1, 0xD3, 0x6C, 0x16, 0x2C,
|
||||
0xF5, 0x12, 0x44, 0x4A, 0x14, 0x2A, 0x8A, 0x90, 0x33, 0xD7,
|
||||
0xAB, 0x71, 0xB2, 0x15, 0x89, 0x6B, 0x37, 0xF1, 0xCF, 0x87,
|
||||
0xC7, 0xD8, 0x71, 0xDF, 0x4E, 0x06, 0x06, 0x87, 0xD8, 0xB2,
|
||||
0x65, 0x0B, 0x00, 0xF7, 0xDE, 0xFB, 0x25, 0xCE, 0x3F, 0xFF,
|
||||
0x3C, 0xAA, 0xAA, 0x5A, 0x15, 0x81, 0x8B, 0x2E, 0xB9, 0x84,
|
||||
0xF7, 0x8F, 0xB5, 0x99, 0x3A, 0x72, 0x8C, 0xD9, 0xE0, 0x98,
|
||||
0xAF, 0x2C, 0x4D, 0x12, 0xE6, 0x0A, 0xC7, 0xCC, 0x52, 0xA4,
|
||||
0x53, 0x08, 0x22, 0x01, 0x2B, 0x52, 0x12, 0xC5, 0x82, 0x1D,
|
||||
0x82, 0x24, 0xA5, 0x52, 0x21, 0x0C, 0xAD, 0x67, 0x61, 0x71,
|
||||
0x6A, 0xC5, 0x84, 0xE3, 0xE3, 0xE3, 0x8C, 0x8F, 0x8F, 0x13,
|
||||
0x63, 0x5C, 0x15, 0x81, 0x75, 0xA7, 0xAF, 0xE7, 0xAA, 0x4B,
|
||||
0xDE, 0xC6, 0xEE, 0x89, 0x79, 0xF2, 0xB3, 0x37, 0x53, 0x2D,
|
||||
0x75, 0x28, 0x3B, 0x25, 0x65, 0xAB, 0x45, 0x37, 0x96, 0x40,
|
||||
0x1B, 0xA1, 0x85, 0x8A, 0x46, 0xCC, 0x60, 0x8A, 0xAB, 0x37,
|
||||
0x88, 0x46, 0x30, 0x3E, 0xA1, 0x1E, 0x8F, 0xF2, 0xEE, 0x4B,
|
||||
0xB7, 0xFE, 0x9F, 0x13, 0xBF, 0x96, 0xD1, 0xAB, 0xC1, 0x73,
|
||||
0x07, 0x0F, 0x12, 0xD7, 0xAF, 0xC3, 0xF9, 0x84, 0xA4, 0x5E,
|
||||
0xC3, 0xE5, 0x19, 0xB6, 0x56, 0x23, 0xA9, 0x0F, 0x83, 0xF7,
|
||||
0x7D, 0x6D, 0x80, 0x88, 0x6D, 0x24, 0xB8, 0xA1, 0x01, 0x92,
|
||||
0x7A, 0x4E, 0x96, 0x67, 0xB4, 0xCE, 0xB8, 0x90, 0xAF, 0x3E,
|
||||
0xF0, 0x5D, 0x28, 0xBB, 0xFC, 0x3E, 0x58, 0x9A, 0x9B, 0xE1,
|
||||
0xA1, 0x9D, 0x5F, 0xE6, 0x5F, 0x8F, 0x66, 0xAC, 0xD9, 0x7C,
|
||||
0x0E, 0x46, 0x05, 0x75, 0x16, 0x9F, 0xA7, 0x7D, 0x1F, 0xA7,
|
||||
0xAD, 0x41, 0x73, 0x0F, 0x02, 0x4A, 0x04, 0x5C, 0x44, 0x6C,
|
||||
0x85, 0xCF, 0x13, 0x94, 0x8A, 0xC6, 0x99, 0x6F, 0x64, 0x57,
|
||||
0xF1, 0x87, 0xFC, 0xC5, 0xA7, 0xEF, 0xE0, 0x97, 0x3F, 0xDF,
|
||||
0xCB, 0xD4, 0xE1, 0xC9, 0xFF, 0x17, 0x81, 0xBB, 0xBF, 0xB8,
|
||||
0x83, 0x1B, 0x27, 0x0A, 0xAA, 0xF7, 0xDC, 0x4C, 0x6E, 0x1D,
|
||||
0x6A, 0x04, 0xE7, 0x15, 0xE7, 0x2D, 0x62, 0x05, 0x4C, 0x40,
|
||||
0xFD, 0x72, 0x5D, 0x01, 0xB0, 0xA9, 0x80, 0x54, 0xA0, 0x81,
|
||||
0x24, 0x73, 0x0C, 0x58, 0x65, 0xE4, 0xB2, 0x0F, 0xF3, 0x2D,
|
||||
0x7B, 0x31, 0xEF, 0xBF, 0xFB, 0xBB, 0x5C, 0x76, 0xF3, 0x5D,
|
||||
0x7C, 0x6D, 0xE7, 0x4E, 0x62, 0xB1, 0x8A, 0x15, 0x89, 0x81,
|
||||
0x12, 0xC7, 0xA0, 0x7A, 0xAC, 0x17, 0x7C, 0x62, 0x70, 0x5E,
|
||||
0x11, 0x13, 0xA9, 0x42, 0x97, 0x10, 0x7A, 0x54, 0x55, 0x0B,
|
||||
0xC9, 0x40, 0x54, 0xFA, 0x2B, 0xA0, 0x99, 0x62, 0x32, 0x03,
|
||||
0x5A, 0xA1, 0x4E, 0x70, 0x4E, 0x91, 0x66, 0x93, 0xE1, 0x73,
|
||||
0x2E, 0x60, 0xE4, 0x8F, 0x6F, 0x43, 0xAF, 0xFB, 0x2C, 0xB7,
|
||||
0x3F, 0xD3, 0xE5, 0xF6, 0xBF, 0xB9, 0x83, 0xAA, 0xF7, 0x3A,
|
||||
0x24, 0x44, 0xB9, 0xF3, 0x6F, 0xFF, 0x8A, 0xAF, 0x5D, 0x39,
|
||||
0x48, 0xEF, 0x5F, 0xFE, 0x9E, 0x66, 0xB9, 0x80, 0x49, 0x95,
|
||||
0x48, 0x45, 0x94, 0x80, 0xDA, 0x88, 0xF1, 0x8A, 0xFA, 0x7E,
|
||||
0xAD, 0xD1, 0x18, 0x22, 0xB1, 0x2A, 0xF0, 0xB9, 0xC7, 0x18,
|
||||
0x41, 0x63, 0x85, 0xF3, 0x4A, 0xAD, 0x96, 0x52, 0x76, 0xDA,
|
||||
0x74, 0x4E, 0xCE, 0xE0, 0xA4, 0x62, 0xFD, 0xFB, 0x3E, 0xC2,
|
||||
0xFD, 0x33, 0x6B, 0x78, 0xF8, 0xE1, 0x47, 0x56, 0xB5, 0x0D,
|
||||
0xD7, 0xDE, 0xF0, 0x11, 0xBE, 0x72, 0xC3, 0x45, 0x94, 0x4F,
|
||||
0xDC, 0x4F, 0x17, 0xC1, 0x5A, 0xC1, 0x3B, 0xC1, 0x18, 0xC1,
|
||||
0x98, 0x88, 0x9A, 0x7E, 0x9F, 0xA1, 0x04, 0x50, 0x2A, 0x44,
|
||||
0xC0, 0x1A, 0x88, 0xA1, 0xC4, 0x02, 0xCE, 0x09, 0xA9, 0x33,
|
||||
0x24, 0x4E, 0xA1, 0xD7, 0xC5, 0x17, 0x1D, 0x06, 0x36, 0x5C,
|
||||
0xC8, 0x89, 0x66, 0x7B, 0xD5, 0xB9, 0xF0, 0x47, 0x1F, 0xBA,
|
||||
0x8E, 0xAB, 0xD7, 0x09, 0x9D, 0xE3, 0x87, 0x70, 0xDE, 0x62,
|
||||
0x8D, 0x62, 0x9D, 0xA0, 0xCE, 0x60, 0xAC, 0x20, 0x44, 0x2C,
|
||||
0x11, 0x62, 0x59, 0x62, 0x24, 0x90, 0xD5, 0x52, 0x92, 0xDC,
|
||||
0x82, 0x04, 0x08, 0x90, 0x26, 0x0E, 0x6B, 0x94, 0x4E, 0xA7,
|
||||
0x87, 0x58, 0x43, 0xBE, 0xF0, 0x0A, 0x1B, 0xCE, 0x1C, 0x5A,
|
||||
0x35, 0x81, 0xD0, 0x5E, 0xE0, 0xE5, 0xF9, 0x2E, 0xF9, 0xE6,
|
||||
0x61, 0x52, 0x03, 0xD9, 0x40, 0x8D, 0xD0, 0xAD, 0x20, 0x33,
|
||||
0xF8, 0x01, 0x07, 0x11, 0x34, 0xC6, 0x88, 0x18, 0x30, 0x89,
|
||||
0xC3, 0x3A, 0x8F, 0xA1, 0x5F, 0x36, 0xBD, 0x35, 0x28, 0x91,
|
||||
0x50, 0x95, 0xA4, 0xA9, 0x47, 0x55, 0x81, 0x80, 0xAE, 0x52,
|
||||
0x06, 0x4E, 0x1C, 0x3B, 0xCA, 0x2D, 0x7F, 0x7D, 0x37, 0xFB,
|
||||
0x37, 0x6C, 0x63, 0xF4, 0xB4, 0x35, 0x84, 0xAA, 0x42, 0x55,
|
||||
0x49, 0xB3, 0x0C, 0x11, 0xA1, 0xEC, 0xF4, 0x15, 0x55, 0x79,
|
||||
0xAD, 0xEF, 0x51, 0x45, 0x55, 0x40, 0x85, 0x10, 0x2A, 0xDA,
|
||||
0x9D, 0x0E, 0x65, 0x55, 0x50, 0x55, 0x25, 0x45, 0xAF, 0x87,
|
||||
0x12, 0x88, 0x6B, 0x36, 0x30, 0x39, 0x3B, 0xBF, 0x2A, 0x02,
|
||||
0x3F, 0xFA, 0xC9, 0x4F, 0xD9, 0xD5, 0x5E, 0xC7, 0xDA, 0xF3,
|
||||
0xB7, 0x53, 0x34, 0x17, 0x31, 0xC6, 0x40, 0x8C, 0x74, 0xDB,
|
||||
0x6D, 0x8C, 0x77, 0x18, 0xA7, 0x10, 0xC1, 0x02, 0xA8, 0x11,
|
||||
0x42, 0x08, 0x14, 0x45, 0x05, 0xAA, 0x58, 0xA3, 0x38, 0xE7,
|
||||
0x88, 0x21, 0xE0, 0xBC, 0x25, 0x84, 0x08, 0xD1, 0x21, 0xA3,
|
||||
0x23, 0x1C, 0x7C, 0x71, 0xB6, 0xDF, 0xA8, 0xBE, 0x8E, 0x22,
|
||||
0xCE, 0x2E, 0x75, 0x19, 0x1D, 0x1D, 0xC3, 0x55, 0x01, 0xBC,
|
||||
0x27, 0x8A, 0xD2, 0xED, 0x74, 0x89, 0x21, 0xA2, 0xCE, 0xA1,
|
||||
0xDE, 0x12, 0xE3, 0xB2, 0x10, 0x89, 0x80, 0x11, 0x08, 0x45,
|
||||
0x8F, 0x58, 0x15, 0xA8, 0x51, 0x8C, 0x0A, 0x84, 0x0A, 0xEF,
|
||||
0x2D, 0x02, 0xA8, 0x04, 0x12, 0x55, 0x8E, 0xB5, 0xA0, 0xAA,
|
||||
0x8A, 0xD7, 0xD1, 0x82, 0x8A, 0x3D, 0xFB, 0x7E, 0x41, 0x3A,
|
||||
0x3C, 0x86, 0xB3, 0x10, 0x42, 0x85, 0x55, 0x21, 0x96, 0x15,
|
||||
0xD6, 0x0A, 0xC6, 0x82, 0x51, 0xB3, 0xBC, 0x05, 0x22, 0xA8,
|
||||
0x82, 0x33, 0x81, 0x3C, 0x4B, 0xA8, 0xE7, 0x19, 0x59, 0xEA,
|
||||
0xF0, 0x56, 0xB0, 0x02, 0x86, 0x48, 0x96, 0x58, 0x9C, 0x01,
|
||||
0x35, 0x81, 0xB5, 0xB9, 0x62, 0xEC, 0xCA, 0x86, 0x64, 0xEF,
|
||||
0xDE, 0xBD, 0x34, 0x9B, 0xCD, 0x53, 0xE3, 0x93, 0xD3, 0xC7,
|
||||
0x99, 0x78, 0xE1, 0x55, 0x46, 0x36, 0xBE, 0x19, 0xAD, 0x7A,
|
||||
0xE4, 0x89, 0xC5, 0x68, 0x20, 0xF1, 0x86, 0x34, 0x71, 0xA4,
|
||||
0xDE, 0x22, 0x31, 0x10, 0x01, 0x15, 0x15, 0xAC, 0xB7, 0x78,
|
||||
0x13, 0x49, 0x13, 0x83, 0xB5, 0x91, 0xCC, 0x28, 0x79, 0xEA,
|
||||
0x70, 0x3E, 0x12, 0xCB, 0x2E, 0x96, 0x0A, 0xE3, 0x02, 0xA1,
|
||||
0xDD, 0x61, 0x7C, 0x28, 0xF9, 0x5F, 0x01, 0xDF, 0x73, 0xCF,
|
||||
0x3D, 0x1C, 0x38, 0x70, 0xE0, 0xD4, 0xF8, 0x97, 0xBF, 0x7A,
|
||||
0x9E, 0x13, 0xB6, 0x41, 0x7D, 0xA8, 0x86, 0x21, 0xE0, 0x14,
|
||||
0x24, 0x14, 0x64, 0x5E, 0x69, 0x34, 0x32, 0xBC, 0x06, 0x84,
|
||||
0xAA, 0xFF, 0x17, 0x84, 0x10, 0x70, 0x12, 0xA9, 0xD7, 0x12,
|
||||
0xBC, 0x89, 0xE4, 0x4E, 0x70, 0x2E, 0xE2, 0x4C, 0x24, 0xB3,
|
||||
0x86, 0xCC, 0x19, 0x52, 0x2F, 0x8C, 0x0C, 0x35, 0xE8, 0xED,
|
||||
0xFB, 0x0F, 0xB6, 0x6C, 0x38, 0x63, 0x85, 0xF3, 0xC5, 0xC5,
|
||||
0x45, 0xA6, 0xA7, 0xA7, 0x19, 0x1B, 0x1B, 0x3B, 0x65, 0x7B,
|
||||
0xD3, 0x96, 0xAD, 0x5C, 0xF3, 0x06, 0xE1, 0xD7, 0x0F, 0xDD,
|
||||
0x81, 0x4A, 0x9B, 0xD4, 0x43, 0xE6, 0x0D, 0x59, 0x6A, 0x30,
|
||||
0x94, 0xB8, 0xD8, 0x45, 0xCB, 0x62, 0x39, 0x07, 0x44, 0x30,
|
||||
0x22, 0xE4, 0x4E, 0x48, 0xAD, 0xA0, 0xA1, 0xC0, 0x11, 0xC8,
|
||||
0x9D, 0x52, 0x4B, 0x2D, 0xB9, 0x37, 0x9C, 0x36, 0xD2, 0x60,
|
||||
0xE6, 0x99, 0xDD, 0x9C, 0xB3, 0xF4, 0x0B, 0xB6, 0x5F, 0x7E,
|
||||
0xF9, 0x0A, 0x02, 0x93, 0x93, 0x93, 0xD4, 0x6A, 0x35, 0x46,
|
||||
0x46, 0x46, 0x4E, 0xD9, 0x06, 0x87, 0x47, 0xF9, 0xC2, 0x9D,
|
||||
0x7F, 0xC7, 0x7D, 0xD7, 0x5F, 0xCC, 0xFC, 0x13, 0x0F, 0x33,
|
||||
0x76, 0xDA, 0x30, 0x43, 0xF5, 0xAC, 0x1F, 0x8C, 0x8D, 0x64,
|
||||
0x36, 0x60, 0x35, 0xF6, 0xAB, 0x61, 0x8C, 0x11, 0x9F, 0x38,
|
||||
0x52, 0x2F, 0x68, 0xD9, 0x25, 0xB1, 0x7D, 0x05, 0x34, 0xB1,
|
||||
0xAF, 0x52, 0x89, 0x33, 0xF4, 0x4E, 0xCC, 0x30, 0xFA, 0xE2,
|
||||
0x04, 0xDF, 0xF8, 0xD2, 0x5D, 0x34, 0x06, 0x87, 0x57, 0x10,
|
||||
0xE8, 0xF6, 0x7A, 0x1C, 0x3F, 0x76, 0x94, 0x3C, 0x4B, 0x57,
|
||||
0xEE, 0x8B, 0x5A, 0xC6, 0xCF, 0xDA, 0x8C, 0x54, 0x3D, 0x5C,
|
||||
0x04, 0x2F, 0xB1, 0x2F, 0x46, 0xCE, 0x30, 0x50, 0xCF, 0xF0,
|
||||
0x56, 0x99, 0x6B, 0x15, 0xD8, 0xAA, 0x0A, 0x0A, 0x50, 0x4F,
|
||||
0x2D, 0xA5, 0x4D, 0x70, 0x56, 0x29, 0x5B, 0x2D, 0xD4, 0x28,
|
||||
0x99, 0x75, 0x78, 0xEF, 0x28, 0xDA, 0x15, 0x59, 0x9A, 0x90,
|
||||
0xE5, 0xB5, 0x15, 0x67, 0xC4, 0x76, 0x73, 0x9E, 0xE7, 0xF7,
|
||||
0xEC, 0x61, 0x52, 0xD6, 0xF0, 0xF5, 0x47, 0xBE, 0x8D, 0x35,
|
||||
0xCA, 0x70, 0xE6, 0xA8, 0x25, 0x96, 0x5E, 0x10, 0xBE, 0xF9,
|
||||
0xD8, 0x93, 0xAC, 0xDD, 0x7E, 0x13, 0xF4, 0x3A, 0xD8, 0x18,
|
||||
0x31, 0x46, 0x91, 0xE5, 0x46, 0x34, 0x02, 0xB9, 0x15, 0xB5,
|
||||
0xEB, 0x06, 0x6C, 0x79, 0xF4, 0xE0, 0x34, 0xCE, 0xA4, 0x64,
|
||||
0x26, 0xA2, 0xD6, 0x50, 0xC6, 0x88, 0xB1, 0x16, 0x63, 0x2D,
|
||||
0xAA, 0x86, 0xC6, 0xFA, 0x37, 0xF0, 0xDC, 0xC0, 0x46, 0xEE,
|
||||
0xFA, 0xCC, 0x67, 0x38, 0x6F, 0xEB, 0x05, 0xBC, 0x30, 0x75,
|
||||
0x84, 0x67, 0xF7, 0xFF, 0x9A, 0xCA, 0x0D, 0xD0, 0x49, 0x47,
|
||||
0xB9, 0xF2, 0xF6, 0x7B, 0xF9, 0xB7, 0x03, 0xCF, 0x01, 0x60,
|
||||
0xAA, 0x0E, 0x21, 0x2C, 0x81, 0x1A, 0x06, 0xB7, 0x7F, 0x94,
|
||||
0xB5, 0x67, 0x6F, 0xA6, 0xDB, 0xEE, 0x91, 0x79, 0x47, 0x08,
|
||||
0xE0, 0x10, 0xAA, 0x90, 0x70, 0x6C, 0xEA, 0x38, 0xEB, 0xCF,
|
||||
0xF4, 0xA5, 0xDD, 0xF4, 0x07, 0xC3, 0x57, 0xD7, 0xFF, 0xE9,
|
||||
0xC9, 0x5D, 0x13, 0xDF, 0x77, 0x43, 0x5B, 0xCF, 0x5E, 0x8F,
|
||||
0x7A, 0x07, 0xA1, 0x22, 0x86, 0x88, 0x18, 0x03, 0x46, 0x51,
|
||||
0x51, 0x06, 0xCF, 0x78, 0x2B, 0xDF, 0xF9, 0x59, 0xE4, 0xC1,
|
||||
0x6F, 0xBD, 0x40, 0x6D, 0x74, 0x98, 0x35, 0x63, 0xDB, 0x71,
|
||||
0x59, 0x4E, 0x6D, 0x68, 0x84, 0xF6, 0xB1, 0x39, 0xF2, 0xC1,
|
||||
0x71, 0xD4, 0x1A, 0xC4, 0x9A, 0xBE, 0xEC, 0x1A, 0x21, 0x04,
|
||||
0x78, 0x79, 0xDF, 0xF3, 0x08, 0x91, 0x10, 0x2A, 0x62, 0x59,
|
||||
0x11, 0x8B, 0x92, 0x3D, 0x93, 0x53, 0x34, 0x26, 0x7F, 0x38,
|
||||
0xB7, 0xE9, 0x4F, 0xAF, 0xB8, 0xC6, 0x06, 0x31, 0x13, 0xEB,
|
||||
0x8A, 0x5F, 0x5D, 0x71, 0xEC, 0xB9, 0xD3, 0x1F, 0xFF, 0xCE,
|
||||
0xB3, 0x3F, 0x4F, 0x92, 0x91, 0x7A, 0x9F, 0x40, 0xAB, 0x0B,
|
||||
0xA2, 0xFD, 0xC3, 0xA5, 0x11, 0x88, 0x60, 0x4C, 0x0A, 0x92,
|
||||
0x73, 0xFC, 0x70, 0x93, 0x17, 0x0F, 0xEE, 0xEB, 0x1F, 0xC5,
|
||||
0xAD, 0x05, 0x15, 0x62, 0xAF, 0x40, 0x8D, 0x40, 0x9E, 0x40,
|
||||
0xD9, 0x43, 0x7A, 0x65, 0xBF, 0xBC, 0x9E, 0x2A, 0x1E, 0x91,
|
||||
0x58, 0x55, 0x74, 0x5B, 0x1D, 0x86, 0x0D, 0xDD, 0xD3, 0xAB,
|
||||
0x17, 0xAF, 0x0A, 0x62, 0x9F, 0xFE, 0xEF, 0x01, 0x00, 0x46,
|
||||
0xBB, 0xB1, 0xB5, 0x3F, 0x50, 0x9D, 0x5B, 0x00, 0x00, 0x00,
|
||||
0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
|
||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
|
||||
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20,
|
||||
0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00,
|
||||
0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0,
|
||||
0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00,
|
||||
0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18,
|
||||
0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xdd, 0x07, 0x07,
|
||||
0x00, 0x25, 0x16, 0x51, 0xa4, 0x24, 0x4e, 0x00, 0x00, 0x09, 0x13, 0x49,
|
||||
0x44, 0x41, 0x54, 0x58, 0xc3, 0x9d, 0x97, 0x6b, 0x8c, 0x5d, 0x55, 0x15,
|
||||
0xc7, 0x7f, 0x6b, 0xed, 0xbd, 0xcf, 0xeb, 0xde, 0x99, 0xb9, 0x33, 0x53,
|
||||
0x3a, 0xa5, 0x64, 0xa4, 0x50, 0xb0, 0xa0, 0x96, 0x50, 0x20, 0x84, 0x47,
|
||||
0x95, 0x80, 0x0f, 0x10, 0x50, 0x41, 0x4d, 0x10, 0xe2, 0x07, 0xc3, 0x23,
|
||||
0xe1, 0x21, 0x46, 0x3e, 0x28, 0x26, 0x2a, 0xc6, 0x08, 0x41, 0x89, 0x46,
|
||||
0x14, 0xb5, 0x8d, 0x0f, 0x7c, 0x00, 0x31, 0x6a, 0x94, 0x2a, 0x8d, 0x8f,
|
||||
0x40, 0x35, 0x0d, 0x1a, 0x14, 0x95, 0x56, 0x41, 0x2a, 0xb5, 0x4c, 0x29,
|
||||
0xd0, 0x69, 0x67, 0x98, 0x4e, 0x67, 0xe6, 0xce, 0xdc, 0xc7, 0x79, 0xec,
|
||||
0xed, 0x87, 0x3b, 0x54, 0x27, 0x3e, 0x18, 0xfd, 0x27, 0x27, 0x39, 0x7b,
|
||||
0x9d, 0x73, 0xf6, 0xfe, 0xaf, 0xb5, 0xd7, 0xf9, 0xaf, 0xb5, 0xe5, 0xc1,
|
||||
0x07, 0x1f, 0x64, 0xf3, 0xa6, 0x4d, 0x67, 0x9f, 0xf7, 0xe6, 0x8b, 0xb7,
|
||||
0x7a, 0x2f, 0xb1, 0x75, 0x8e, 0x20, 0x02, 0x00, 0x21, 0xf4, 0x2e, 0x16,
|
||||
0xc7, 0x3d, 0xe3, 0x91, 0x3b, 0x11, 0x45, 0x44, 0x7a, 0x8f, 0x03, 0x84,
|
||||
0xe0, 0x09, 0xc8, 0x3f, 0x5e, 0xf7, 0x61, 0xc9, 0x37, 0x02, 0x94, 0x65,
|
||||
0x81, 0x0a, 0xdd, 0xed, 0x8f, 0xfc, 0xf4, 0xd2, 0xeb, 0x6f, 0xb8, 0xe1,
|
||||
0x31, 0xeb, 0x8c, 0x9e, 0xb7, 0x63, 0xcf, 0x4b, 0x5b, 0xfa, 0xd6, 0x4c,
|
||||
0x36, 0xae, 0x7c, 0xfb, 0x1b, 0x29, 0x4a, 0x0f, 0x62, 0x08, 0x02, 0xe2,
|
||||
0x3d, 0x81, 0x80, 0x2c, 0xce, 0x18, 0x16, 0x49, 0xa9, 0x08, 0x51, 0x92,
|
||||
0x30, 0x33, 0x33, 0x4b, 0x73, 0x6e, 0x16, 0x44, 0x89, 0xe3, 0x98, 0xe1,
|
||||
0xe1, 0x61, 0x44, 0x84, 0xbc, 0x28, 0x7a, 0x0b, 0x06, 0xbf, 0x94, 0x74,
|
||||
0x08, 0x38, 0xab, 0x7c, 0x77, 0xcb, 0xc3, 0xb5, 0x1d, 0xbb, 0x27, 0x7f,
|
||||
0xea, 0x8c, 0x5e, 0x66, 0x77, 0x8d, 0x8d, 0x3f, 0xd4, 0xf6, 0x71, 0xdf,
|
||||
0xcd, 0xd7, 0x5c, 0x41, 0x12, 0x47, 0xe4, 0x45, 0x05, 0x28, 0xc8, 0xcb,
|
||||
0xac, 0x5f, 0x76, 0x0f, 0x82, 0x0a, 0x0a, 0xd4, 0xb2, 0x1a, 0xbf, 0x7f,
|
||||
0xfc, 0xb7, 0xec, 0xdd, 0xb3, 0x0b, 0x0d, 0x25, 0xa2, 0x4a, 0x5e, 0x94,
|
||||
0x4c, 0xf4, 0x37, 0x38, 0xf7, 0x0d, 0x6f, 0x62, 0x70, 0x70, 0x88, 0x85,
|
||||
0x85, 0x79, 0x10, 0xe9, 0xf9, 0xed, 0x03, 0x22, 0x10, 0x24, 0x10, 0xa9,
|
||||
0x70, 0xf3, 0x75, 0x57, 0xf2, 0x8b, 0x5f, 0x3e, 0xda, 0xd8, 0x35, 0x36,
|
||||
0xfe, 0x90, 0x7d, 0x71, 0x62, 0xda, 0xae, 0x3f, 0xe5, 0x75, 0x4c, 0x1e,
|
||||
0x9a, 0x65, 0xa1, 0x1b, 0x10, 0x63, 0x09, 0x28, 0x08, 0x04, 0xef, 0x17,
|
||||
0x43, 0x2d, 0x84, 0xaa, 0xc2, 0xc6, 0x11, 0x69, 0x92, 0xf1, 0xc8, 0x03,
|
||||
0xdf, 0x60, 0x28, 0xad, 0xb8, 0xf6, 0x9a, 0xab, 0x39, 0xee, 0xb8, 0xe3,
|
||||
0x01, 0x98, 0x9b, 0x9b, 0x65, 0xdb, 0xb6, 0x6d, 0x6c, 0xfa, 0xd2, 0xe7,
|
||||
0x39, 0xe7, 0xcd, 0xef, 0x64, 0x74, 0xcd, 0x5a, 0x9a, 0x73, 0x73, 0x18,
|
||||
0x63, 0xf0, 0xde, 0x03, 0x01, 0x55, 0xc1, 0x17, 0x05, 0xf5, 0x18, 0xd6,
|
||||
0x9f, 0xf2, 0x3a, 0x5e, 0x9c, 0x38, 0x6c, 0xad, 0x89, 0xea, 0xbe, 0x4b,
|
||||
0x9d, 0xfd, 0x53, 0x6d, 0x9a, 0x85, 0x41, 0x4d, 0xa0, 0x04, 0xbc, 0x0f,
|
||||
0x38, 0x67, 0xb0, 0x51, 0x42, 0x00, 0x8a, 0x4e, 0x49, 0x7d, 0x20, 0xe6,
|
||||
0xb1, 0xad, 0x3f, 0x60, 0xe3, 0x89, 0x0d, 0x3e, 0xf0, 0xc1, 0x5b, 0xf8,
|
||||
0x67, 0xf4, 0xf7, 0x0f, 0x70, 0xf9, 0xe5, 0xef, 0xe4, 0xa4, 0x75, 0xeb,
|
||||
0xf8, 0xe8, 0xed, 0x9f, 0x63, 0xdd, 0xc6, 0x77, 0x51, 0xef, 0x1b, 0xa0,
|
||||
0x28, 0xdb, 0xc8, 0xa2, 0x13, 0x46, 0x95, 0xa2, 0xdd, 0xa2, 0x91, 0x40,
|
||||
0x1e, 0xfa, 0x30, 0x71, 0xdd, 0x5b, 0x75, 0x35, 0x66, 0xf3, 0x3e, 0x9e,
|
||||
0x9f, 0xea, 0xb2, 0xe0, 0x1d, 0xe2, 0x40, 0xe2, 0x1a, 0x6a, 0x2d, 0xcd,
|
||||
0x97, 0xa6, 0x19, 0xff, 0xcd, 0xb7, 0x31, 0xf5, 0x15, 0x9c, 0x7c, 0xc1,
|
||||
0x95, 0xfc, 0x61, 0xfb, 0xa3, 0xac, 0x4d, 0x3b, 0xdc, 0x78, 0xe3, 0x4d,
|
||||
0xfc, 0x27, 0x9c, 0xfc, 0x9a, 0xd7, 0xf2, 0xe1, 0xf7, 0x5f, 0xcd, 0x2d,
|
||||
0x9f, 0xf9, 0x16, 0x1b, 0xde, 0x76, 0x1d, 0x55, 0xbb, 0xe8, 0x25, 0x2a,
|
||||
0x10, 0xca, 0x9c, 0xa2, 0xd3, 0xa1, 0x19, 0x5b, 0x9a, 0xe5, 0x10, 0xea,
|
||||
0x6a, 0x58, 0xb5, 0x11, 0xf3, 0xdd, 0x3e, 0xf6, 0x4d, 0x76, 0x69, 0xab,
|
||||
0x47, 0xfb, 0x33, 0x66, 0xf6, 0x3e, 0x49, 0x7b, 0xf2, 0x05, 0x66, 0xf6,
|
||||
0xef, 0xe3, 0xbe, 0x3b, 0xae, 0xe5, 0xd1, 0xc7, 0x7e, 0xcf, 0x03, 0xbf,
|
||||
0xfa, 0x15, 0xd9, 0xe4, 0x1f, 0xb9, 0xf7, 0x9b, 0x9f, 0xc1, 0x46, 0x11,
|
||||
0xff, 0x0d, 0x67, 0x9d, 0xb3, 0x91, 0x4b, 0xcf, 0xdc, 0xce, 0xd6, 0x9d,
|
||||
0x4f, 0x70, 0xcc, 0x09, 0xa7, 0xd1, 0x59, 0x98, 0xc7, 0x1a, 0x43, 0xd1,
|
||||
0x2d, 0xf0, 0x1d, 0x68, 0x6a, 0x49, 0xab, 0x1c, 0xc6, 0x9a, 0x18, 0x55,
|
||||
0x63, 0x58, 0x28, 0x32, 0xc6, 0xa7, 0x3d, 0xd3, 0x45, 0xca, 0xf3, 0xfb,
|
||||
0x0f, 0x70, 0x72, 0xb9, 0x97, 0x3b, 0xae, 0x3a, 0x83, 0x13, 0xeb, 0x73,
|
||||
0xcc, 0x36, 0x17, 0xb8, 0xf9, 0xa6, 0xeb, 0xd9, 0xfb, 0xf0, 0xbd, 0x5c,
|
||||
0xfc, 0xfa, 0xd3, 0x19, 0x5e, 0xb9, 0x9a, 0xe5, 0xe0, 0xf5, 0x67, 0x9d,
|
||||
0xc9, 0x54, 0x6b, 0x81, 0xc9, 0xae, 0x61, 0xaa, 0x0d, 0x93, 0xad, 0xc0,
|
||||
0xe4, 0x7c, 0x60, 0xb2, 0x19, 0x38, 0x70, 0x58, 0x68, 0x15, 0x09, 0x6a,
|
||||
0x05, 0x6b, 0x2d, 0x74, 0xab, 0x01, 0x0e, 0xcc, 0x2a, 0x71, 0x9a, 0x32,
|
||||
0x9f, 0xb7, 0xc0, 0x16, 0x5c, 0x78, 0xc9, 0xdb, 0x39, 0x7b, 0xe3, 0x1b,
|
||||
0xd8, 0xf7, 0xfc, 0x0b, 0xa4, 0x69, 0xc6, 0x05, 0x67, 0xac, 0xc5, 0x77,
|
||||
0xe7, 0x58, 0x2e, 0xa6, 0x0f, 0xcf, 0xb0, 0xff, 0xc5, 0x71, 0xc2, 0x1a,
|
||||
0xc5, 0x94, 0x31, 0x65, 0x59, 0x20, 0x55, 0x82, 0x86, 0x88, 0x66, 0xb3,
|
||||
0x60, 0x21, 0x8f, 0x11, 0x29, 0x51, 0xa8, 0x28, 0x7c, 0xc6, 0x4c, 0x5e,
|
||||
0xe3, 0x70, 0x2b, 0x10, 0x56, 0x9e, 0xc8, 0xf7, 0xf7, 0x8d, 0xb0, 0xe9,
|
||||
0x2b, 0x9b, 0xe9, 0x1f, 0x68, 0xb0, 0x7e, 0xfd, 0x7a, 0x00, 0xee, 0xb9,
|
||||
0xe7, 0x8b, 0x9c, 0x7a, 0xea, 0x29, 0x54, 0x55, 0xb5, 0x2c, 0x02, 0x67,
|
||||
0x9d, 0x7b, 0x2e, 0x6f, 0x1d, 0x69, 0x33, 0xbe, 0xff, 0x20, 0xd3, 0xde,
|
||||
0x31, 0x5b, 0x59, 0x9a, 0xc4, 0xcc, 0x14, 0x8e, 0xa9, 0x85, 0x40, 0xa7,
|
||||
0x10, 0x44, 0x3c, 0x56, 0xa4, 0x24, 0x88, 0x05, 0xdb, 0x80, 0x38, 0xa1,
|
||||
0x52, 0xc1, 0x37, 0x56, 0x33, 0x37, 0x3f, 0xbe, 0x64, 0xc2, 0xd1, 0xd1,
|
||||
0x51, 0x46, 0x47, 0x47, 0x09, 0x21, 0x2c, 0x8b, 0xc0, 0xaa, 0xa3, 0x57,
|
||||
0x73, 0xe9, 0xb9, 0xa7, 0xb1, 0x6d, 0xfb, 0x2c, 0xd9, 0x09, 0xeb, 0xa8,
|
||||
0x16, 0x3a, 0x94, 0x9d, 0x92, 0xa2, 0xd5, 0xa2, 0x1b, 0x4a, 0xa0, 0x8d,
|
||||
0xd0, 0xc2, 0x8a, 0x06, 0xcc, 0x40, 0x82, 0xab, 0xf7, 0x11, 0x4c, 0x89,
|
||||
0x8d, 0x62, 0xea, 0xe1, 0x00, 0x6f, 0x3c, 0x6f, 0xc3, 0xbf, 0x9d, 0xf8,
|
||||
0xe5, 0x8c, 0x5e, 0x0e, 0x9e, 0xda, 0xb3, 0x87, 0xb0, 0xfa, 0x22, 0x5c,
|
||||
0x14, 0x63, 0xc5, 0x20, 0x9a, 0x13, 0x72, 0x21, 0xd4, 0x63, 0x5a, 0x51,
|
||||
0xab, 0xa7, 0x0d, 0x10, 0xb0, 0x7d, 0x31, 0xae, 0xd1, 0x4f, 0x5c, 0xcf,
|
||||
0x48, 0xb3, 0x94, 0xd6, 0x31, 0x67, 0xf0, 0xd5, 0x6f, 0xfe, 0x04, 0xca,
|
||||
0x2e, 0xff, 0x0f, 0x16, 0x66, 0xa6, 0xb8, 0x6f, 0xf3, 0x97, 0xf8, 0xd9,
|
||||
0x81, 0x94, 0x15, 0xeb, 0x4e, 0xc2, 0xa8, 0xa0, 0xce, 0x12, 0x65, 0x09,
|
||||
0x71, 0x3d, 0x23, 0x3b, 0x6a, 0x05, 0x9a, 0x45, 0x20, 0xa0, 0x04, 0xc0,
|
||||
0x05, 0xc4, 0x56, 0x44, 0x59, 0x8c, 0x52, 0xd1, 0x77, 0xec, 0xf1, 0x6c,
|
||||
0x29, 0x5e, 0xcd, 0x87, 0x3e, 0x7a, 0x3b, 0x7f, 0xfd, 0xf3, 0x4e, 0xc6,
|
||||
0xf7, 0x8d, 0xfd, 0x4f, 0x04, 0xee, 0xfa, 0xc2, 0x26, 0xae, 0xde, 0x5e,
|
||||
0x50, 0xbd, 0xe9, 0x7a, 0x32, 0xeb, 0x50, 0x23, 0xb8, 0x48, 0x71, 0x91,
|
||||
0x45, 0xac, 0x80, 0xf1, 0x68, 0xb4, 0x58, 0x57, 0x00, 0x6c, 0x22, 0x20,
|
||||
0x15, 0xa8, 0x27, 0x4e, 0x1d, 0xfd, 0x56, 0x19, 0xba, 0xe0, 0x3d, 0x7c,
|
||||
0xcf, 0x9e, 0xcd, 0x5b, 0xef, 0xfa, 0x09, 0x17, 0x5c, 0x7f, 0x27, 0x5f,
|
||||
0xdb, 0xbc, 0x99, 0x50, 0x2c, 0x23, 0x22, 0xc1, 0x53, 0xe2, 0x18, 0xd0,
|
||||
0x08, 0x1b, 0x09, 0x51, 0x6c, 0x70, 0x91, 0x22, 0x26, 0x50, 0xf9, 0x2e,
|
||||
0xde, 0xe7, 0x54, 0x55, 0x0b, 0x49, 0x41, 0x54, 0x7a, 0x11, 0xd0, 0x54,
|
||||
0x31, 0xa9, 0x01, 0xad, 0x50, 0x27, 0x38, 0xa7, 0x48, 0xb3, 0xc9, 0xe0,
|
||||
0x49, 0xa7, 0x33, 0xf4, 0x8e, 0x5b, 0xd0, 0x2b, 0x3e, 0xc5, 0x87, 0x1f,
|
||||
0xef, 0x72, 0xeb, 0xc7, 0x6f, 0xa7, 0xca, 0x5f, 0x81, 0x84, 0x28, 0x77,
|
||||
0x7c, 0xe2, 0x23, 0x7c, 0xed, 0x92, 0x01, 0xf2, 0x1f, 0x7e, 0x9a, 0x66,
|
||||
0x39, 0x87, 0x49, 0x94, 0x40, 0x45, 0x10, 0x8f, 0xda, 0x80, 0x89, 0x14,
|
||||
0x8d, 0x7a, 0xb5, 0x46, 0x83, 0x0f, 0x84, 0xaa, 0x20, 0xca, 0x22, 0x8c,
|
||||
0x11, 0x34, 0x54, 0xb8, 0x48, 0xa9, 0xd5, 0x12, 0xca, 0x4e, 0x9b, 0xce,
|
||||
0xe1, 0x29, 0x9c, 0x54, 0x1c, 0x73, 0xd1, 0x7b, 0xb9, 0x77, 0x6a, 0x05,
|
||||
0xf7, 0xdf, 0xff, 0xc0, 0xb2, 0xb6, 0xe1, 0xf2, 0xab, 0xde, 0xcb, 0x97,
|
||||
0xaf, 0x3a, 0x8b, 0xf2, 0xe1, 0x7b, 0xe9, 0x22, 0x58, 0x2b, 0x44, 0x4e,
|
||||
0x30, 0x46, 0x30, 0x26, 0xa0, 0xa6, 0xd7, 0x67, 0x28, 0x1e, 0x94, 0x0a,
|
||||
0x11, 0xb0, 0x06, 0x82, 0x2f, 0xb1, 0x80, 0x73, 0x42, 0xe2, 0x0c, 0xb1,
|
||||
0x53, 0xc8, 0xbb, 0x44, 0x45, 0x87, 0xfe, 0x35, 0x67, 0x70, 0xa8, 0xd9,
|
||||
0x5e, 0x76, 0x2e, 0xbc, 0xe5, 0xdd, 0x57, 0xf0, 0xb6, 0x55, 0x42, 0x67,
|
||||
0x62, 0x2f, 0x2e, 0xb2, 0x58, 0xa3, 0x58, 0x27, 0xa8, 0x33, 0x18, 0x2b,
|
||||
0x08, 0x01, 0x4b, 0x80, 0x50, 0x96, 0x18, 0xf1, 0xa4, 0xb5, 0x84, 0x38,
|
||||
0xb3, 0x20, 0x1e, 0x3c, 0x24, 0xb1, 0xc3, 0x1a, 0xa5, 0xd3, 0xc9, 0x11,
|
||||
0x6b, 0xc8, 0xe6, 0x5e, 0x64, 0xcd, 0xb1, 0x8d, 0x65, 0x13, 0xf0, 0xed,
|
||||
0x39, 0x5e, 0x98, 0xed, 0x92, 0xad, 0x1b, 0x24, 0x31, 0x90, 0xf6, 0xd7,
|
||||
0xf0, 0xdd, 0x0a, 0x52, 0x83, 0xeb, 0x77, 0x10, 0x40, 0x43, 0x08, 0x88,
|
||||
0x01, 0x13, 0x3b, 0xac, 0x8b, 0x30, 0xf4, 0xca, 0x66, 0x64, 0x0d, 0x4a,
|
||||
0xc0, 0x57, 0x25, 0x49, 0x12, 0xa1, 0xaa, 0x80, 0x47, 0x97, 0x29, 0x03,
|
||||
0x87, 0x0e, 0x1e, 0xe0, 0x86, 0x8f, 0xdd, 0xc5, 0xae, 0x35, 0x1b, 0x19,
|
||||
0x3e, 0x6a, 0x05, 0xbe, 0xaa, 0x50, 0x55, 0x92, 0x34, 0x45, 0x44, 0xa8,
|
||||
0x3a, 0x3d, 0x45, 0x55, 0x5e, 0xee, 0x7b, 0x54, 0x51, 0x15, 0x50, 0xc1,
|
||||
0xfb, 0x8a, 0x76, 0xa7, 0x43, 0x59, 0x15, 0x54, 0x55, 0x49, 0x91, 0xe7,
|
||||
0x28, 0x9e, 0xb0, 0x62, 0x0d, 0x63, 0xd3, 0xb3, 0xcb, 0x22, 0xf0, 0xbb,
|
||||
0x3f, 0xfc, 0x91, 0x2d, 0xed, 0x55, 0xac, 0x3c, 0xf5, 0x7c, 0x8a, 0xe6,
|
||||
0x3c, 0xc6, 0x18, 0x08, 0x81, 0x6e, 0xbb, 0x8d, 0x89, 0x1c, 0xea, 0x14,
|
||||
0x02, 0x58, 0x00, 0x31, 0x82, 0xf7, 0x9e, 0xa2, 0xa8, 0x40, 0x15, 0x6b,
|
||||
0x14, 0xe7, 0x1c, 0xc1, 0x7b, 0x5c, 0x64, 0xf1, 0x3e, 0x40, 0x70, 0xc8,
|
||||
0xf0, 0x10, 0x7b, 0x9e, 0x9d, 0xee, 0x35, 0xaa, 0xaf, 0xa0, 0x88, 0xd3,
|
||||
0x0b, 0x5d, 0x86, 0x87, 0x47, 0x70, 0x95, 0x87, 0x28, 0x22, 0x88, 0xd2,
|
||||
0xed, 0x74, 0x09, 0x3e, 0xa0, 0xce, 0x61, 0x22, 0x4b, 0x08, 0x8b, 0x42,
|
||||
0x24, 0x02, 0x46, 0xc0, 0x17, 0x39, 0xa1, 0x2a, 0x50, 0xa3, 0x18, 0x15,
|
||||
0xf0, 0x15, 0x51, 0x64, 0x11, 0x40, 0xc5, 0x13, 0xab, 0x72, 0xb0, 0x05,
|
||||
0x55, 0x55, 0xbc, 0x82, 0x16, 0x54, 0xec, 0x78, 0xf2, 0x2f, 0x24, 0x83,
|
||||
0x23, 0x38, 0x0b, 0xde, 0x57, 0x58, 0x15, 0x42, 0x59, 0x61, 0xad, 0x60,
|
||||
0x2c, 0x18, 0x35, 0x8b, 0x5b, 0x20, 0x82, 0x51, 0x70, 0xc6, 0x93, 0xa5,
|
||||
0x31, 0xf5, 0x2c, 0x25, 0x4d, 0x1c, 0x91, 0x15, 0xac, 0x80, 0x21, 0x90,
|
||||
0xc6, 0x16, 0x67, 0x40, 0x8d, 0x67, 0x65, 0xa6, 0x18, 0xbb, 0xb4, 0x21,
|
||||
0xd9, 0xb9, 0x73, 0x27, 0xcd, 0x66, 0xf3, 0xc8, 0xf8, 0xf0, 0xe4, 0x04,
|
||||
0xdb, 0xff, 0xf6, 0x12, 0x43, 0x6b, 0x5f, 0x8b, 0x56, 0x39, 0x59, 0x6c,
|
||||
0x31, 0xea, 0x89, 0x23, 0x43, 0x12, 0x3b, 0x92, 0xc8, 0x22, 0xc1, 0x13,
|
||||
0x00, 0x15, 0x15, 0x6c, 0x64, 0x89, 0x4c, 0x20, 0x89, 0x0d, 0xd6, 0x06,
|
||||
0x52, 0xa3, 0x64, 0x89, 0xc3, 0x45, 0x81, 0x50, 0x76, 0xb1, 0x54, 0x18,
|
||||
0xe7, 0xf1, 0xed, 0x0e, 0xa3, 0x8d, 0xf8, 0x5f, 0x1c, 0xbe, 0xfb, 0xee,
|
||||
0xbb, 0xd9, 0xbd, 0x7b, 0xf7, 0x91, 0xf1, 0x5f, 0x9f, 0x79, 0x9a, 0x43,
|
||||
0xb6, 0x8f, 0x7a, 0xa3, 0x86, 0xc1, 0xe3, 0x14, 0xc4, 0x17, 0xa4, 0x91,
|
||||
0xd2, 0xd7, 0x97, 0x12, 0xa9, 0x47, 0xa8, 0x7a, 0x7f, 0x81, 0xf7, 0x1e,
|
||||
0x27, 0x81, 0x7a, 0x2d, 0x26, 0x32, 0x81, 0xcc, 0x09, 0xce, 0x05, 0x9c,
|
||||
0x09, 0xa4, 0xd6, 0x90, 0x3a, 0x43, 0x12, 0x09, 0x43, 0x8d, 0x3e, 0xf2,
|
||||
0x27, 0x7f, 0xcd, 0xfa, 0x35, 0xc7, 0x2c, 0x59, 0x7c, 0x7e, 0x7e, 0x9e,
|
||||
0xc9, 0xc9, 0x49, 0x46, 0x46, 0x46, 0x8e, 0xd8, 0x5e, 0xb3, 0x7e, 0x03,
|
||||
0x97, 0xbd, 0x4a, 0x78, 0xee, 0xbe, 0xdb, 0x51, 0x69, 0x93, 0x44, 0x90,
|
||||
0x46, 0x86, 0x34, 0x31, 0x18, 0x4a, 0x5c, 0xe8, 0xa2, 0x65, 0xb1, 0x98,
|
||||
0x03, 0x22, 0x18, 0x11, 0x32, 0x27, 0x24, 0x56, 0x50, 0x5f, 0xe0, 0xf0,
|
||||
0x64, 0x4e, 0xa9, 0x25, 0x96, 0x2c, 0x32, 0x1c, 0x35, 0xd4, 0xc7, 0xd4,
|
||||
0xe3, 0xdb, 0x38, 0x69, 0xe1, 0x2f, 0x9c, 0x7f, 0xe1, 0x85, 0x4b, 0x08,
|
||||
0x8c, 0x8d, 0x8d, 0x51, 0xab, 0xd5, 0x18, 0x1a, 0x1a, 0x3a, 0x62, 0x1b,
|
||||
0x18, 0x1c, 0xe6, 0xf3, 0x77, 0x7c, 0x92, 0xaf, 0x5c, 0x79, 0x36, 0xb3,
|
||||
0x0f, 0xdf, 0xcf, 0xc8, 0x51, 0x83, 0x34, 0xea, 0x69, 0xcf, 0x19, 0x1b,
|
||||
0x48, 0xad, 0xc7, 0x6a, 0xe8, 0x55, 0xc3, 0x10, 0x02, 0x51, 0xec, 0x48,
|
||||
0x22, 0x41, 0xcb, 0x2e, 0xb1, 0xed, 0x29, 0xa0, 0x09, 0x3d, 0x95, 0x8a,
|
||||
0x9d, 0x21, 0x3f, 0x34, 0xc5, 0xf0, 0xb3, 0xdb, 0xf9, 0xf6, 0x17, 0xef,
|
||||
0xa4, 0x6f, 0x60, 0x70, 0x09, 0x81, 0x6e, 0x9e, 0x33, 0x71, 0xf0, 0x00,
|
||||
0x59, 0x9a, 0x2c, 0xdd, 0x17, 0xb5, 0x8c, 0x1e, 0xb7, 0x0e, 0xa9, 0x72,
|
||||
0x5c, 0x80, 0x48, 0x42, 0x4f, 0x8c, 0x9c, 0xa1, 0xbf, 0x9e, 0x12, 0x59,
|
||||
0x65, 0xa6, 0x55, 0x60, 0xab, 0xca, 0x2b, 0x40, 0x3d, 0xb1, 0x94, 0x36,
|
||||
0xc6, 0x59, 0xa5, 0x6c, 0xb5, 0x50, 0xa3, 0xa4, 0xd6, 0x11, 0x45, 0x8e,
|
||||
0xa2, 0x5d, 0x91, 0x26, 0x31, 0x69, 0x56, 0x5b, 0x72, 0x46, 0x6c, 0x37,
|
||||
0x67, 0x79, 0x7a, 0xc7, 0x0e, 0xc6, 0x64, 0x05, 0x5f, 0x7f, 0xe0, 0x07,
|
||||
0x58, 0xa3, 0x0c, 0xa6, 0x8e, 0x5a, 0x6c, 0xc9, 0xbd, 0xf0, 0x9d, 0x87,
|
||||
0x1e, 0x61, 0xe5, 0xf9, 0xd7, 0x40, 0xde, 0xc1, 0x86, 0x80, 0x31, 0x8a,
|
||||
0x2c, 0x36, 0xa2, 0x01, 0xc8, 0xac, 0xa8, 0x5d, 0xd5, 0x6f, 0xcb, 0x03,
|
||||
0x7b, 0x26, 0x71, 0x26, 0x21, 0x35, 0x01, 0xb5, 0x86, 0x32, 0x04, 0x8c,
|
||||
0xb5, 0x18, 0x6b, 0x51, 0x35, 0xf4, 0xad, 0x7e, 0x15, 0x4f, 0xf5, 0xaf,
|
||||
0xe5, 0xce, 0xdb, 0x6e, 0xe3, 0x94, 0x0d, 0xa7, 0xf3, 0xb7, 0xf1, 0xfd,
|
||||
0x3c, 0xb1, 0xeb, 0x39, 0x2a, 0xd7, 0x4f, 0x27, 0x19, 0xe6, 0x92, 0x5b,
|
||||
0xef, 0xe1, 0xe7, 0xbb, 0x9f, 0x02, 0xc0, 0x54, 0x1d, 0xbc, 0x5f, 0x00,
|
||||
0x35, 0x0c, 0x9c, 0xff, 0x3e, 0x56, 0x9e, 0xb0, 0x8e, 0x6e, 0x3b, 0x27,
|
||||
0x8d, 0x1c, 0xde, 0x83, 0x43, 0xa8, 0x7c, 0xcc, 0xc1, 0xf1, 0x09, 0x56,
|
||||
0x1f, 0x1b, 0x95, 0xb2, 0xf5, 0xc7, 0x3f, 0x3c, 0xef, 0xda, 0xcf, 0x3e,
|
||||
0xb2, 0xa5, 0x71, 0xe6, 0x85, 0x8d, 0x0d, 0x27, 0xac, 0x46, 0x23, 0x07,
|
||||
0xbe, 0x22, 0xf8, 0x80, 0x18, 0x03, 0x46, 0x51, 0x51, 0xaa, 0x3c, 0xe7,
|
||||
0x99, 0x3f, 0xed, 0x64, 0x6e, 0xe2, 0x25, 0x6a, 0xc3, 0x83, 0xac, 0x18,
|
||||
0x59, 0x8d, 0x4b, 0x33, 0x6a, 0x8d, 0x21, 0x52, 0x67, 0x41, 0x04, 0xb5,
|
||||
0x06, 0xb1, 0xa6, 0x27, 0xbb, 0x46, 0x10, 0x81, 0xa2, 0xdb, 0x45, 0x08,
|
||||
0x78, 0x5f, 0x11, 0xca, 0x8a, 0x50, 0x94, 0xec, 0x18, 0x1b, 0x67, 0xe6,
|
||||
0xb7, 0x3f, 0x9f, 0xf9, 0xfa, 0xad, 0x17, 0x5f, 0x66, 0xbd, 0x98, 0xed,
|
||||
0xab, 0x8a, 0x67, 0x2e, 0x3e, 0xf8, 0xd4, 0xd1, 0x5b, 0x7f, 0xf4, 0xc4,
|
||||
0x9f, 0xe3, 0x78, 0xa8, 0xde, 0x23, 0xd0, 0xea, 0x82, 0x68, 0xef, 0x70,
|
||||
0x69, 0x04, 0x02, 0x18, 0x93, 0x80, 0x64, 0x4c, 0xec, 0x6b, 0xf2, 0xec,
|
||||
0x9e, 0x27, 0x7b, 0x47, 0x71, 0x6b, 0x41, 0x85, 0x90, 0x17, 0xa8, 0x11,
|
||||
0xc8, 0x62, 0x28, 0x73, 0x24, 0x2f, 0x7b, 0xe5, 0xf5, 0x48, 0xf1, 0x08,
|
||||
0x84, 0xaa, 0xa2, 0xdb, 0xea, 0x30, 0x68, 0xe8, 0x1e, 0x5d, 0x3d, 0x7b,
|
||||
0xa9, 0x17, 0xfb, 0xd8, 0xdf, 0x01, 0x8b, 0xfb, 0xb9, 0x42, 0x10, 0x02,
|
||||
0xa4, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
|
||||
0x60, 0x82,
|
||||
};
|
||||
|
||||
|
BIN
Source/Core/DolphinWX/resources/Dolphin.png
Normal file
BIN
Source/Core/DolphinWX/resources/Dolphin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.4 KiB |
BIN
Source/Core/DolphinWX/resources/dolphin_logo.png
Normal file
BIN
Source/Core/DolphinWX/resources/dolphin_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
BIN
Source/Core/DolphinWX/resources/toolbar_add_breakpoint.png
Normal file
BIN
Source/Core/DolphinWX/resources/toolbar_add_breakpoint.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
BIN
Source/Core/DolphinWX/resources/toolbar_add_memorycheck.png
Normal file
BIN
Source/Core/DolphinWX/resources/toolbar_add_memorycheck.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
Source/Core/DolphinWX/resources/toolbar_debugger_delete.png
Normal file
BIN
Source/Core/DolphinWX/resources/toolbar_debugger_delete.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
Reference in New Issue
Block a user