Compare commits

...
94 Commits
Author SHA1 Message Date
twinaphex 589b92cc99 (Wii) Bump up to version 1.2.2 2015-07-19 11:50:27 +02:00
twinaphex e223821c22 (Android) Bump up APK version code; bump up version 2015-07-19 11:50:00 +02:00
Twinaphex f073739970 (OSX) Bump up to version 1.2.2 2015-07-19 00:14:31 +02:00
twinaphex 0bbb0d6913 (Darwin) Cleanups 2015-07-18 23:49:58 +02:00
twinaphex c56f1403e5 (Darwin) Setup default shader dir 2015-07-18 23:41:42 +02:00
twinaphex 1fab41ad63 Cleanup 2015-07-18 23:32:23 +02:00
twinaphex f3f238381f Take out -Wno-invalid-encoding - GCC doesn't support this, and
too much of a pain to selectively take it out
2015-07-18 22:48:45 +02:00
radius 49931f4df7 build fix 2015-07-18 15:45:58 -05:00
Twinaphex d06bd1870e Move Quick Menu to the top 2015-07-18 22:11:59 +02:00
twinaphex 2f36994f67 Finally linked openCore 2015-07-18 21:02:31 +02:00
twinaphex 5cd9fb1da2 (es) Buildfix 2015-07-18 20:59:42 +02:00
twinaphex 99e1a9b297 Get rid of builtin_bswap16/bswap32 - breaks on OSX 10.8 2015-07-18 20:56:47 +02:00
Twinaphex 60f681f5f8 Merge pull request #1991 from sergiobenrocha2/master
Fix portuguese string.
2015-07-18 20:41:40 +02:00
Twinaphex b886f7ab96 Merge pull request #1990 from IlDucci/patch-3
Update menu_hash_es.c
2015-07-18 20:40:58 +02:00
Twinaphex 727e71d206 Merge pull request #1992 from vanfanel/master
VIDEO/SUNXI: fixed compilation because of a couple of small errors co…
2015-07-18 20:40:27 +02:00
vanfanel 824c647377 VIDEO/SUNXI: fixed compilation because of a couple of small errors coming from cleanups. 2015-07-18 20:33:07 +02:00
twinaphex 5c258a52f5 Revert "(MainMenu.xib) Try to add IBConnectionRecord"
This reverts commit 0bc2a86fb5.
2015-07-18 20:32:14 +02:00
twinaphex 0bc2a86fb5 (MainMenu.xib) Try to add IBConnectionRecord 2015-07-18 20:31:50 +02:00
sergiobenrocha2 8ee4fd9c15 Fix portuguese string. 2015-07-18 15:15:54 -03:00
twinaphex cb9deedbf2 Remove showCores dialog 2015-07-18 20:06:31 +02:00
Twinaphex 8bf42618d9 (OSX) Fix IBAction openCores 2015-07-18 19:24:14 +02:00
IlDucci cf915d6524 Update menu_hash_es.c
Started with help screens. Spanish translation incomplete.
2015-07-18 19:07:17 +02:00
Twinaphex 0961446b19 Merge pull request #1988 from IlDucci/patch-2
Update msg_hash_es.c
2015-07-18 18:38:25 +02:00
IlDucci 09b9683e26 Update msg_hash_es.c
Starting a Spanish translation.
2015-07-18 18:34:59 +02:00
twinaphex 88caa51a5e (ES) Fix some labels 2015-07-18 18:32:24 +02:00
Twinaphex eba3506b55 Merge pull request #1987 from IlDucci/patch-1
Update menu_hash_es.c
2015-07-18 18:30:12 +02:00
IlDucci 5a324c1dac Update menu_hash_es.c
Starting a Spanish translation.
2015-07-18 18:21:49 +02:00
Twinaphex 6cb42bde29 Set all paths to bundle dirs when RELEASE_BUILD is defined 2015-07-18 17:36:30 +02:00
twinaphex d9a72d9b5c (OSX) Set XMB driver as menu default driver from OSX 10.6 and up 2015-07-18 16:15:54 +02:00
twinaphex fd33f2153a Update openCore 2015-07-18 16:01:39 +02:00
twinaphex e35fab5dc8 (OSX) Add HAVE_CORETEXT 2015-07-18 15:55:35 +02:00
twinaphex f02f1ebc8f (OSX) setWantsBestResolutionOpenGLSurface - OSX 10.7 and up 2015-07-18 15:46:48 +02:00
twinaphex 5bc03fb3a8 backingScaleFactor OSX 10.7 and up 2015-07-18 15:41:14 +02:00
twinaphex edac6e0afc Remove no-invalid-source-encoding - GCC on OSX can't handle this 2015-07-18 15:39:26 +02:00
twinaphex 7ad1beeb81 Some robustness checks 2015-07-18 15:26:31 +02:00
Twinaphex a54a4d6cbe (Menu) Cleanup unused variable 2015-07-18 15:25:42 +02:00
twinaphex ffc075166e (OSX) Add 'openCore' 2015-07-18 15:24:45 +02:00
Twinaphex 34c2791fa4 Revert "(OSX) Add default dirs for Pictures and Downloads"
This reverts commit b9831cdc14.
2015-07-18 15:16:56 +02:00
twinaphex b9831cdc14 (OSX) Add default dirs for Pictures and Downloads 2015-07-18 15:14:40 +02:00
Twinaphex 09ee27337c (OSX) Fix crash at exit 2015-07-18 15:07:16 +02:00
twinaphex 67c5d14900 (OSX) Fix some paths 2015-07-18 15:05:22 +02:00
twinaphex 31e76e4329 Fix 'What Is A core' entry 2015-07-18 15:00:38 +02:00
twinaphex b3bb7def66 Small nit 2015-07-18 14:58:14 +02:00
twinaphex a86e4304b4 Add 'Scanning For Content' help 2015-07-18 14:57:20 +02:00
twinaphex a919c26b81 Add 'Change Virtual Gamepad' help 2015-07-18 14:01:37 +02:00
Alcaro b45c8bf916 Fix saying 'several ways' and only listing one way if net is off. 2015-07-18 11:34:50 +02:00
twinaphex 280fab6cab Cleanup 2015-07-18 11:31:54 +02:00
twinaphex ef1b066b64 Add 'What Is A Core?' to Help 2015-07-18 11:29:37 +02:00
twinaphex d3b1eef196 Add MENU_LABEL_VALUE_MENU_CONTROLS_PROLOG 2015-07-18 08:39:52 +02:00
twinaphex 34be1b9c9c Cleanup 2015-07-18 07:27:22 +02:00
twinaphex 6636fbaf15 (Help) Add 'Loading Content' 2015-07-17 22:11:24 +02:00
twinaphex f48c31cf68 Update 'Basic Menu Controls' 2015-07-17 21:50:51 +02:00
twinaphex ac9d54032f Start creating Menu Help list 2015-07-17 20:33:09 +02:00
Twinaphex d725ff9738 Merge pull request #1983 from heuripedes/master
(stb.c) Fix growth conditional and limit growth to 2048x2048
2015-07-17 18:53:01 +02:00
Higor Eurípedes ab55ed7908 (stb.c) Fix growth conditional and limit growth to 2048x2048 2015-07-17 13:38:24 -03:00
twinaphex 7f3424ab15 (Menu) More translatable strings 2015-07-17 18:22:59 +02:00
twinaphex 40541d60c9 Add more translatable strings 2015-07-17 15:53:02 +02:00
twinaphex 673e2ba57d Add "Welcome to RetroArch" to translatable strings 2015-07-17 15:25:58 +02:00
twinaphex 4e64eac514 Add welcome start screen and make it have a 3-second timeout 2015-07-17 15:03:17 +02:00
twinaphex 3222351ef0 Remove jsoup 2015-07-17 11:24:51 +02:00
twinaphex 11c3e3f4ff Update stb_truetype 2015-07-17 11:15:04 +02:00
twinaphex f7a443b4e9 (Android) (Nvidia Shield Portable) Some kind of edge case happens
on Shield Portable that causes it to keep allocating for a long
time until it simply fails and falls back to the bitmap font
renderer. Currently seems to be happening on character 160.
Quick hack until we fix the real underlying issue.
2015-07-17 11:03:15 +02:00
radius a06dd9c3a2 fix system dir resetting on each startup 2015-07-17 02:53:59 -05:00
twinaphex 450c665619 Create meta_key_pressed 2015-07-17 03:31:51 +02:00
twinaphex 8162b77bae Whitelist menu_toggle key 2015-07-17 03:12:52 +02:00
twinaphex a2af5252c1 Get rid of input_driver_key_pressed 2015-07-17 03:09:12 +02:00
twinaphex f1d8f98c90 Refinement on earlier revert 2015-07-17 02:59:03 +02:00
twinaphex 63582f83b1 Revert "Optimize input_driver_keys_pressed and make it possible to"
This reverts commit 5d87c697bb.
2015-07-17 02:58:26 +02:00
twinaphex 95da20190a Take out stb_truetype hack 2015-07-17 02:24:23 +02:00
Twinaphex eeeba3f343 Merge pull request #1981 from heuripedes/master
stb.c fixes
2015-07-16 23:41:23 +02:00
Higor Eurípedes e4da044c99 (stb.c) Resize atlas when printable characters dont fit 2015-07-16 11:37:08 -03:00
Higor Eurípedes d10bb24328 (stb.c) Add CutiveMono.ttf path and replace DroidSansFallback with DroidSans 2015-07-16 11:19:06 -03:00
twinaphex f938c75e0b When 'Hide In Menu' is enabled, overlay should reappear now when we
select 'Resume Content', 'Load State', or 'Save State'
2015-07-16 11:57:50 +02:00
twinaphex b298b2d4f0 platform_android.h - cleanup 2015-07-16 10:54:59 +02:00
twinaphex a5f5e34e21 Bump up to 1.2.2 2015-07-16 10:12:31 +02:00
twinaphex f5566cbe3b Cleanup warnings 2015-07-16 10:11:28 +02:00
twinaphex a73f91e68a (Android) Add hack/workaround for DPI larger than 500 with
HAVE_STB_FONT
2015-07-16 10:09:26 +02:00
twinaphex bad3238ac7 (GX) Default to rate control off for GX now 2015-07-16 09:35:27 +02:00
Twinaphex badf8bdaad Merge pull request #1979 from fr500/master
Various fixes
2015-07-16 09:25:06 +02:00
radius 2a1f2b81c2 disable per-core states with <content dir> savestates 2015-07-16 02:23:18 -05:00
fr500 ca682d38eb better shield portable hack 2015-07-16 03:22:28 -04:00
radius b717828cf0 fix setting and clearing system directory when using content dir 2015-07-16 01:46:11 -05:00
Twinaphex 637c977b45 Merge pull request #1976 from lakkatv/glui
(GLUI) Improve tickering limit
2015-07-16 03:44:15 +02:00
Jean-André Santoni 5ffd48217c (GLUI) Improve tickering limit 2015-07-16 03:38:07 +02:00
Twinaphex 0cdde16e2d Merge pull request #1975 from heuripedes/glui-improvements
GLUI improvements
2015-07-16 01:58:53 +02:00
Higor Eurípedes ec00f709f7 (GLUI) Give more room to labels when possible 2015-07-15 20:56:31 -03:00
Higor Eurípedes b217bbad24 (menu_animation) Create menu_animation_ticker_generic 2015-07-15 20:56:25 -03:00
Higor Eurípedes 06838d044f (GLUI) Create glui_render_label_value() 2015-07-15 20:55:53 -03:00
Higor Eurípedes 615b8b39f1 (GLUI) Cleanup glui_render_menu_list() 2015-07-15 20:55:53 -03:00
Higor Eurípedes 9b019dbc1e (GLUI) Always query dpi 2015-07-15 20:55:53 -03:00
Higor Eurípedes eb406c7a91 (GLUI) Add more appropriate glui->ticker_limit calculation 2015-07-15 20:55:53 -03:00
Higor Eurípedes f43be22e2d (GLUI) Turn font loading failure into an error 2015-07-15 20:55:53 -03:00
Twinaphex 0e6ec34255 Merge pull request #1971 from Oggom/master
Remove (hint) from Menubar entries
2015-07-15 22:46:09 +02:00
Oggom 16c8fc35eb Remove (hint) from Menubar entries 2015-07-15 22:30:28 +02:00
71 changed files with 3792 additions and 669 deletions

No files matched your search

-4
View File
@@ -251,10 +251,6 @@ ifeq ($(HAVE_PYTHON), 1)
endif
endif
ifeq ($(OSX), 1)
DEFINES += -Wno-invalid-source-encoding
endif
ifeq ($(HAVE_EMSCRIPTEN), 1)
OBJ += frontend/drivers/platform_emscripten.o \
input/drivers/rwebinput_input.o \
-1
View File
@@ -5,6 +5,5 @@
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="lib" path="libs/jsoup-1.8.1.jar"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>
+2 -2
View File
@@ -1,7 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.retroarch"
android:versionCode="40"
android:versionName="1.2.1"
android:versionCode="42"
android:versionName="1.2.2"
android:installLocation="preferExternal">
<uses-feature android:glEsVersion="0x00020000" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
Binary file not shown.
+4 -4
View File
@@ -30,20 +30,20 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.1</string>
<string>1.2.2</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.1</string>
<string>1.2.2</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2015 RetroArch. All rights reserved.</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>RApplication</string>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>
+179 -356
View File
@@ -1,14 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.03">
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">9L31a</string>
<string key="IBDocument.InterfaceBuilderVersion">680</string>
<string key="IBDocument.AppKitVersion">949.54</string>
<string key="IBDocument.HIToolboxVersion">353.00</string>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<string key="IBDocument.SystemVersion">12F45</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.40</string>
<string key="IBDocument.HIToolboxVersion">626.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">3084</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="57"/>
<string>NSCustomObject</string>
<string>NSMenu</string>
<string>NSMenuItem</string>
<string>NSView</string>
<string>NSWindowTemplate</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -16,7 +24,7 @@
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0" id="9"/>
<integer value="1" key="NS.object.0"/>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -652,201 +660,49 @@
<string key="NSWindowTitle">RetroArch</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
<nil key="NSUserInterfaceItemIdentifier"/>
<object class="NSView" key="NSWindowView" id="439893737">
<nil key="NSNextResponder"/>
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<string key="NSFrameSize">{480, 360}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
</object>
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool>
</object>
<object class="NSCustomObject" id="976324537">
<string key="NSClassName">RetroArch</string>
</object>
<object class="NSWindowTemplate" id="361653618">
<int key="NSWindowStyleMask">31</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{272, 172}, {276, 89}}</string>
<int key="NSWTFlags">-1535638528</int>
<string key="NSWindowTitle">Window</string>
<string key="NSWindowClass">NSPanel</string>
<nil key="NSViewClass"/>
<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
<object class="NSView" key="NSWindowView" id="327272550">
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextField" id="981013832">
<reference key="NSNextResponder" ref="327272550"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{18, 72}, {240, 17}}</string>
<reference key="NSSuperview" ref="327272550"/>
<reference key="NSNextKeyView" ref="481701893"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="45342161">
<int key="NSCellFlags">68157504</int>
<int key="NSCellFlags2">138413056</int>
<string key="NSContents">Select Core</string>
<object class="NSFont" key="NSSupport" id="698260743">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">1.300000e+01</double>
<int key="NSfFlags">1044</int>
</object>
<reference key="NSControlView" ref="981013832"/>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlColor</string>
<object class="NSColor" key="NSColor" id="962906968">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC42NjY2NjY2OQA</bytes>
</object>
</object>
<object class="NSColor" key="NSTextColor" id="1062340437">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlTextColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MAA</bytes>
</object>
</object>
</object>
</object>
<object class="NSComboBox" id="481701893">
<reference key="NSNextResponder" ref="327272550"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{21, 45}, {239, 26}}</string>
<reference key="NSSuperview" ref="327272550"/>
<reference key="NSNextKeyView" ref="59737118"/>
<int key="NSTag">1</int>
<bool key="NSEnabled">YES</bool>
<object class="NSComboBoxCell" key="NSCell" id="50876060">
<int key="NSCellFlags">74448961</int>
<int key="NSCellFlags2">268436480</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="698260743"/>
<reference key="NSControlView" ref="481701893"/>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
<object class="NSColor" key="NSColor" id="67566624">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MQA</bytes>
</object>
</object>
<reference key="NSTextColor" ref="1062340437"/>
<int key="NSVisibleItemCount">5</int>
<bool key="NSHasVerticalScroller">YES</bool>
<reference key="NSDelegate" ref="481701893"/>
<object class="NSComboTableView" key="NSTableView" id="845451530">
<reference key="NSNextResponder"/>
<int key="NSvFlags">274</int>
<string key="NSFrameSize">{15, 0}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<bool key="NSEnabled">YES</bool>
<object class="NSMutableArray" key="NSTableColumns">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTableColumn">
<double key="NSWidth">1.200000e+01</double>
<double key="NSMinWidth">1.000000e+01</double>
<double key="NSMaxWidth">1.000000e+03</double>
<object class="NSTableHeaderCell" key="NSHeaderCell">
<int key="NSCellFlags">75497472</int>
<int key="NSCellFlags2">0</int>
<string key="NSContents"/>
<object class="NSFont" key="NSSupport">
<string key="NSName">LucidaGrande</string>
<double key="NSSize">1.200000e+01</double>
<int key="NSfFlags">16</int>
</object>
<object class="NSColor" key="NSBackgroundColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
</object>
<reference key="NSTextColor" ref="67566624"/>
</object>
<object class="NSTextFieldCell" key="NSDataCell">
<int key="NSCellFlags">338690112</int>
<int key="NSCellFlags2">268436480</int>
<reference key="NSSupport" ref="698260743"/>
<reference key="NSControlView" ref="845451530"/>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSColor" key="NSBackgroundColor" id="170588361">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">controlBackgroundColor</string>
<reference key="NSColor" ref="962906968"/>
</object>
<reference key="NSTextColor" ref="1062340437"/>
</object>
<int key="NSResizingMask">3</int>
<bool key="NSIsResizeable">YES</bool>
<reference key="NSTableView" ref="845451530"/>
</object>
</object>
<double key="NSIntercellSpacingWidth">3.000000e+00</double>
<double key="NSIntercellSpacingHeight">2.000000e+00</double>
<reference key="NSBackgroundColor" ref="170588361"/>
<object class="NSColor" key="NSGridColor">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">gridColor</string>
<object class="NSColor" key="NSColor">
<int key="NSColorSpace">3</int>
<bytes key="NSWhite">MC41AA</bytes>
</object>
</object>
<double key="NSRowHeight">1.900000e+01</double>
<string key="NSAction">tableViewAction:</string>
<int key="NSTvFlags">-767524864</int>
<reference key="NSDelegate" ref="50876060"/>
<reference key="NSDataSource" ref="50876060"/>
<reference key="NSTarget" ref="50876060"/>
<int key="NSColumnAutoresizingStyle">1</int>
<int key="NSDraggingSourceMaskForLocal">15</int>
<int key="NSDraggingSourceMaskForNonLocal">0</int>
<bool key="NSAllowsTypeSelect">YES</bool>
</object>
</object>
</object>
<object class="NSButton" id="59737118">
<reference key="NSNextResponder" ref="327272550"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{180, 13}, {82, 32}}</string>
<reference key="NSSuperview" ref="327272550"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="404714727">
<int key="NSCellFlags">67108864</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">OK</string>
<reference key="NSSupport" ref="698260743"/>
<reference key="NSControlView" ref="59737118"/>
<int key="NSButtonFlags">-2038284288</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
<string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
<int key="NSPeriodicDelay">200</int>
<int key="NSPeriodicInterval">25</int>
</object>
</object>
</object>
<string key="NSFrameSize">{276, 89}</string>
<reference key="NSNextKeyView" ref="981013832"/>
</object>
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">terminate:</string>
<reference key="source" ref="1050"/>
<reference key="destination" ref="632727374"/>
</object>
<int key="connectionID">449</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">orderFrontStandardAboutPanel:</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="238522557"/>
</object>
<int key="connectionID">142</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="976324537"/>
</object>
<int key="connectionID">495</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performMiniaturize:</string>
@@ -871,14 +727,6 @@
</object>
<int key="connectionID">127</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">orderFrontStandardAboutPanel:</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="238522557"/>
</object>
<int key="connectionID">142</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performClose:</string>
@@ -919,14 +767,6 @@
</object>
<int key="connectionID">370</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">terminate:</string>
<reference key="source" ref="1050"/>
<reference key="destination" ref="632727374"/>
</object>
<int key="connectionID">449</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showHelp:</string>
@@ -936,12 +776,20 @@
<int key="connectionID">493</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="976324537"/>
<object class="IBActionConnection" key="connection">
<string key="label">toggleFullScreen:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="1065388702"/>
</object>
<int key="connectionID">495</int>
<int key="connectionID">593</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openDocument:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="733060596"/>
</object>
<int key="connectionID">657</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
@@ -975,14 +823,6 @@
</object>
<int key="connectionID">591</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleFullScreen:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="1065388702"/>
</object>
<int key="connectionID">593</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">basicEvent:</string>
@@ -1127,14 +967,6 @@
</object>
<int key="connectionID">655</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openDocument:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="733060596"/>
</object>
<int key="connectionID">657</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">basicEvent:</string>
@@ -1151,6 +983,14 @@
</object>
<int key="connectionID">664</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">openCore:</string>
<reference key="source" ref="976324537"/>
<reference key="destination" ref="722745758"/>
</object>
<int key="connectionID">665</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -1167,7 +1007,7 @@
<int key="objectID">-2</int>
<reference key="object" ref="1021"/>
<reference key="parent" ref="0"/>
<string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
@@ -1227,11 +1067,11 @@
<reference key="object" ref="720053764"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="722745758"/>
<reference ref="1025936716"/>
<reference ref="776162233"/>
<reference ref="425164168"/>
<reference ref="733060596"/>
<reference ref="722745758"/>
</object>
<reference key="parent" ref="379814623"/>
</object>
@@ -1411,68 +1251,6 @@
</object>
<reference key="parent" ref="265357942"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">557</int>
<reference key="object" ref="361653618"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="327272550"/>
</object>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">558</int>
<reference key="object" ref="327272550"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="981013832"/>
<reference ref="59737118"/>
<reference ref="481701893"/>
</object>
<reference key="parent" ref="361653618"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">559</int>
<reference key="object" ref="481701893"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="50876060"/>
</object>
<reference key="parent" ref="327272550"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">560</int>
<reference key="object" ref="981013832"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="45342161"/>
</object>
<reference key="parent" ref="327272550"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">567</int>
<reference key="object" ref="45342161"/>
<reference key="parent" ref="981013832"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">568</int>
<reference key="object" ref="50876060"/>
<reference key="parent" ref="481701893"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">570</int>
<reference key="object" ref="59737118"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="404714727"/>
</object>
<reference key="parent" ref="327272550"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">571</int>
<reference key="object" ref="404714727"/>
<reference key="parent" ref="59737118"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">585</int>
<reference key="object" ref="1225315"/>
@@ -1757,13 +1535,12 @@
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.IBPluginDependency</string>
<string>-2.IBPluginDependency</string>
<string>-3.IBPluginDependency</string>
<string>124.IBPluginDependency</string>
<string>125.IBEditorWindowLastContentRect</string>
<string>125.IBPluginDependency</string>
<string>126.IBPluginDependency</string>
<string>130.IBPluginDependency</string>
@@ -1778,50 +1555,34 @@
<string>23.IBPluginDependency</string>
<string>236.IBPluginDependency</string>
<string>239.IBPluginDependency</string>
<string>24.IBEditorWindowLastContentRect</string>
<string>24.IBPluginDependency</string>
<string>29.IBEditorWindowLastContentRect</string>
<string>29.IBPluginDependency</string>
<string>371.IBEditorWindowLastContentRect</string>
<string>371.IBPluginDependency</string>
<string>371.IBWindowTemplateEditedContentRect</string>
<string>371.NSWindowTemplate.visibleAtLaunch</string>
<string>372.IBPluginDependency</string>
<string>490.IBPluginDependency</string>
<string>491.IBEditorWindowLastContentRect</string>
<string>491.IBPluginDependency</string>
<string>492.IBPluginDependency</string>
<string>494.IBPluginDependency</string>
<string>5.IBPluginDependency</string>
<string>545.IBPluginDependency</string>
<string>546.IBEditorWindowLastContentRect</string>
<string>546.IBPluginDependency</string>
<string>549.IBPluginDependency</string>
<string>551.IBPluginDependency</string>
<string>557.IBEditorWindowLastContentRect</string>
<string>557.IBPluginDependency</string>
<string>557.IBWindowTemplateEditedContentRect</string>
<string>557.NSWindowTemplate.visibleAtLaunch</string>
<string>558.IBPluginDependency</string>
<string>559.IBPluginDependency</string>
<string>559.IBViewBoundsToFrameTransform</string>
<string>56.IBPluginDependency</string>
<string>560.IBPluginDependency</string>
<string>567.IBPluginDependency</string>
<string>568.IBPluginDependency</string>
<string>57.IBEditorWindowLastContentRect</string>
<string>57.IBPluginDependency</string>
<string>570.IBPluginDependency</string>
<string>571.IBPluginDependency</string>
<string>58.IBPluginDependency</string>
<string>585.IBPluginDependency</string>
<string>586.IBEditorWindowLastContentRect</string>
<string>586.IBPluginDependency</string>
<string>587.IBPluginDependency</string>
<string>592.IBPluginDependency</string>
<string>598.IBEditorWindowLastContentRect</string>
<string>603.IBEditorWindowLastContentRect</string>
<string>613.IBEditorWindowLastContentRect</string>
<string>597.IBPluginDependency</string>
<string>598.IBPluginDependency</string>
<string>602.IBPluginDependency</string>
<string>603.IBPluginDependency</string>
<string>612.IBPluginDependency</string>
<string>613.IBPluginDependency</string>
<string>614.IBPluginDependency</string>
<string>616.IBPluginDependency</string>
<string>618.IBPluginDependency</string>
@@ -1829,7 +1590,8 @@
<string>622.IBPluginDependency</string>
<string>624.IBPluginDependency</string>
<string>626.IBPluginDependency</string>
<string>630.IBEditorWindowLastContentRect</string>
<string>629.IBPluginDependency</string>
<string>630.IBPluginDependency</string>
<string>633.IBPluginDependency</string>
<string>635.IBPluginDependency</string>
<string>637.IBPluginDependency</string>
@@ -1844,24 +1606,21 @@
<string>656.IBPluginDependency</string>
<string>658.IBPluginDependency</string>
<string>660.IBPluginDependency</string>
<string>661.IBEditorWindowLastContentRect</string>
<string>661.IBPluginDependency</string>
<string>663.IBPluginDependency</string>
<string>72.IBPluginDependency</string>
<string>73.IBPluginDependency</string>
<string>79.IBPluginDependency</string>
<string>81.IBEditorWindowLastContentRect</string>
<string>81.IBPluginDependency</string>
<string>83.IBPluginDependency</string>
<string>92.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{782, 496}, {143, 23}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1876,52 +1635,36 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{785, 425}, {284, 133}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{497, 558}, {420, 20}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{507, 199}, {480, 360}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{507, 199}, {480, 360}}</string>
<reference ref="9"/>
<string>{{438, 199}, {480, 360}}</string>
<integer value="1"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{856, 535}, {174, 23}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{642, 395}, {192, 163}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{329, 640}, {276, 89}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{329, 640}, {276, 89}}</string>
<boolean value="NO"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<object class="NSAffineTransform">
<bytes key="NSTransformStruct">P4AAAL+AAABBoAAAwooAAA</bytes>
</object>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{509, 405}, {206, 153}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{730, 535}, {151, 23}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{834, 455}, {144, 63}}</string>
<string>{{834, 495}, {185, 23}}</string>
<string>{{834, 455}, {123, 43}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1929,7 +1672,6 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{907, 316}, {79, 203}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1944,13 +1686,11 @@
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{834, 535}, {137, 23}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{600, 465}, {182, 93}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1958,29 +1698,112 @@
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="dict.sortedKeys" ref="0"/>
<reference key="dict.values" ref="0"/>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="dict.sortedKeys" ref="0"/>
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
<int key="maxID">664</int>
<int key="maxID">665</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">RetroArch</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>basicEvent:</string>
<string>openCore:</string>
<string>showCoresDirectory:</string>
<string>showPreferences:</string>
</object>
<object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>id</string>
<string>id</string>
<string>id</string>
<string>id</string>
</object>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>basicEvent:</string>
<string>openCore:</string>
<string>showCoresDirectory:</string>
<string>showPreferences:</string>
</object>
<object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBActionInfo">
<string key="name">basicEvent:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo">
<string key="name">openCore:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo">
<string key="name">showCoresDirectory:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo">
<string key="name">showPreferences:</string>
<string key="candidateClassName">id</string>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">window</string>
<string key="NS.object.0">NSWindow</string>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<string key="NS.key.0">window</string>
<object class="IBToOneOutletInfo" key="NS.object.0">
<string key="name">window</string>
<string key="candidateClassName">NSWindow</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/RetroArch.h</string>
</object>
</object>
</object>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.LastKnownRelativeProjectPath">../RetroArch.xcodeproj</string>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1050" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
<integer value="3000" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSMenuCheckmark</string>
<string>NSMenuMixedState</string>
</object>
<object class="NSArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{11, 11}</string>
<string>{10, 3}</string>
</object>
</object>
</data>
</archive>
+1 -2
View File
@@ -332,7 +332,6 @@
);
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES;
PRODUCT_NAME = RetroArch;
WARNING_CFLAGS = "-Wno-invalid-source-encoding";
};
name = Debug;
};
@@ -360,6 +359,7 @@
"-DHAVE_GRIFFIN",
"-DHAVE_IMAGEVIEWER",
"-DHAVE_IOHIDMANAGER",
"-DHAVE_CORETEXT",
"-DHAVE_CORELOCATION",
"-DHAVE_RGUI",
"-DHAVE_MENU",
@@ -392,7 +392,6 @@
);
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES;
PRODUCT_NAME = RetroArch;
WARNING_CFLAGS = "-Wno-invalid-source-encoding";
};
name = Release;
};
@@ -28,17 +28,17 @@
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict>
<key>6B9F0B13E5864452B91F13C09B7ED9EB989E82AD</key>
<string>../../../..media/autoconfig/</string>
<string>../../../..media/autoconfig</string>
<key>76200F0D6584D865E96F58DE862E738E88B23A3C</key>
<string>../../../../..</string>
<key>A267D9543F572B4C32EC6E1B876E3B9BFE4DE8F6</key>
<string>../../../..media/assets/</string>
<string>../../../..media/assets</string>
<key>C3AEE01BDA902108663DB5DB9CD7916436919463</key>
<string>../../../..media/libretrodb/</string>
<string>../../../..media/libretrodb</string>
<key>C7C12374C7051F8843B3EFA1ACCAF2907102CCF7</key>
<string>../../../..</string>
<key>EF363D58F01B3FB341FA6C851870E60E4F080E97</key>
<string>../../../..media/overlays/</string>
<string>../../../..media/overlays</string>
</dict>
<key>IDESourceControlProjectURL</key>
<string>https://github.com/libretro/RetroArch.git</string>
+3 -3
View File
@@ -534,7 +534,7 @@ static void event_deinit_core(bool reinit)
{
global_t *global = global_get_ptr();
settings_t *settings = config_get_ptr();
rarch_system_info_t *info = rarch_system_info_get_ptr();
pretro_unload_game();
pretro_deinit();
@@ -548,8 +548,8 @@ static void event_deinit_core(bool reinit)
strlcpy(global->savestate_dir,orig_savestate_dir,sizeof(global->savestate_dir));
/* restore system directory if it was set to <content dir> */
if(orig_system_dir_empty)
strlcpy(settings->system_directory,"",sizeof(settings->system_directory));
if(settings->system_in_content_dir && !strcmp(info->info.library_name,"No Core"))
settings->system_directory[0] = '\0';
/* auto overrides: reload the original config */
if(global->overrides_active)
+3 -1
View File
@@ -317,6 +317,8 @@ enum
#define MENU_DEFAULT_DRIVER MENU_RMENU
#elif defined(HAVE_RMENU_XUI)
#define MENU_DEFAULT_DRIVER MENU_RMENU_XUI
#elif defined(MAC_OS_X_VERSION_10_6)
#define MENU_DEFAULT_DRIVER MENU_XMB
#elif defined(IOS) || defined(ANDROID) || defined(__CELLOS_LV2__)
#define MENU_DEFAULT_DRIVER MENU_GLUI
#else
@@ -610,7 +612,7 @@ static const int out_latency = 64;
static const bool audio_sync = true;
/* Audio rate control. */
#if defined(GEKKO) || !defined(RARCH_CONSOLE)
#if !defined(RARCH_CONSOLE)
static const bool rate_control = true;
#else
static const bool rate_control = false;
+6
View File
@@ -1714,10 +1714,16 @@ static bool config_load_file(const char *path, bool set_defaults)
{
RARCH_WARN("system_directory is not set in config. Assuming system directory is same folder as game: \"%s\".\n",
settings->system_directory);
settings->system_in_content_dir = true;
}
if (!strcmp(settings->system_directory, "default"))
{
RARCH_WARN("system_directory is not set in config. Assuming system directory is same folder as game: \"%s\".\n",
settings->system_directory);
*settings->system_directory = '\0';
settings->system_in_content_dir = true;
}
config_read_keybinds_conf(conf);
+1
View File
@@ -303,6 +303,7 @@ typedef struct settings
char resampler_directory[PATH_MAX_LENGTH];
char screenshot_directory[PATH_MAX_LENGTH];
char system_directory[PATH_MAX_LENGTH];
bool system_in_content_dir;
char extraction_directory[PATH_MAX_LENGTH];
char playlist_directory[PATH_MAX_LENGTH];
+514 -47
View File
@@ -1,4 +1,4 @@
// stb_truetype.h - v1.05 - public domain
// stb_truetype.h - v1.06 - public domain
// authored from 2009-2014 by Sean Barrett / RAD Game Tools
//
// This library processes TrueType files:
@@ -45,6 +45,9 @@
//
// VERSION HISTORY
//
// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine)
// also more precise AA rasterizer, except if shapes overlap
// remove need for STBTT_sort
// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC
// 1.04 (2015-04-15) typo in example
// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes
@@ -120,6 +123,15 @@
// stbtt_GetFontVMetrics()
// stbtt_GetCodepointKernAdvance()
//
// Starting with version 1.06, the rasterizer was replaced with a new,
// faster and generally-more-precise rasterizer. The new rasterizer more
// accurately measures pixel coverage for anti-aliasing, except in the case
// where multiple shapes overlap, in which case it overestimates the AA pixel
// coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If
// this turns out to be a problem, you can re-enable the old rasterizer with
// #define STBTT_RASTERIZER_VERSION 1
// which will incur about a 15% speed hit.
//
// ADDITIONAL DOCUMENTATION
//
// Immediately after this block comment are a series of sample programs.
@@ -219,7 +231,15 @@
// Baked bitmap interface 70 LOC /
// Font name matching & access 150 LOC ---- 150
// C runtime library abstraction 60 LOC ---- 60
//
//
// PERFORMANCE MEASUREMENTS FOR 1.06:
//
// 32-bit 64-bit
// Previous release: 8.83 s 7.68 s
// Pool allocations: 7.72 s 6.34 s
// Inline sort : 6.54 s 5.65 s
// New rasterizer : 5.63 s 5.00 s
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -330,7 +350,7 @@ int main(int arg, char **argv)
stbtt_fontinfo font;
int i,j,ascent,baseline,ch=0;
float scale, xpos=2; // leave a little padding in case the character extends left
char *text = "Heljo World!";
char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness
fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb"));
stbtt_InitFont(&font, buffer, 0);
@@ -388,12 +408,6 @@ int main(int arg, char **argv)
typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1];
typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1];
// #define your own STBTT_sort() to override this to avoid qsort
#ifndef STBTT_sort
#include <stdlib.h>
#define STBTT_sort(data,num_items,item_size,compare_func) qsort(data,num_items,item_size,compare_func)
#endif
// #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h
#ifndef STBTT_ifloor
#include <math.h>
@@ -424,6 +438,7 @@ int main(int arg, char **argv)
#endif
#ifndef STBTT_memcpy
#include <memory.h>
#define STBTT_memcpy memcpy
#define STBTT_memset memset
#endif
@@ -901,6 +916,10 @@ enum { // languageID for STBTT_PLATFORM_ID_MAC
typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1];
#ifndef STBTT_RASTERIZER_VERSION
#define STBTT_RASTERIZER_VERSION 2
#endif
//////////////////////////////////////////////////////////////////////////
//
// accessors to parse data from file
@@ -1549,42 +1568,129 @@ STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codep
stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1);
}
//////////////////////////////////////////////////////////////////////////////
//
// Rasterizer
typedef struct stbtt__hheap_chunk
{
struct stbtt__hheap_chunk *next;
} stbtt__hheap_chunk;
typedef struct stbtt__hheap
{
struct stbtt__hheap_chunk *head;
void *first_free;
int num_remaining_in_head_chunk;
} stbtt__hheap;
static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata)
{
if (hh->first_free) {
void *p = hh->first_free;
hh->first_free = * (void **) p;
return p;
} else {
if (hh->num_remaining_in_head_chunk == 0) {
int count = (size < 32 ? 2000 : size < 128 ? 800 : 100);
stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata);
if (c == NULL)
return NULL;
c->next = hh->head;
hh->head = c;
hh->num_remaining_in_head_chunk = count;
}
--hh->num_remaining_in_head_chunk;
return (char *) (hh->head) + size * hh->num_remaining_in_head_chunk;
}
}
static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
{
*(void **) p = hh->first_free;
hh->first_free = p;
}
static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
{
stbtt__hheap_chunk *c = hh->head;
while (c) {
stbtt__hheap_chunk *n = c->next;
STBTT_free(c, userdata);
c = n;
}
}
typedef struct stbtt__edge {
float x0,y0, x1,y1;
int invert;
} stbtt__edge;
typedef struct stbtt__active_edge
{
struct stbtt__active_edge *next;
#if STBTT_RASTERIZER_VERSION==1
int x,dx;
float ey;
struct stbtt__active_edge *next;
int valid;
int direction;
#elif STBTT_RASTERIZER_VERSION==2
float fx,fdx,fdy;
float direction;
float sy;
float ey;
#else
#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
#endif
} stbtt__active_edge;
#define FIXSHIFT 10
#define FIX (1 << FIXSHIFT)
#define FIXMASK (FIX-1)
#if STBTT_RASTERIZER_VERSION == 1
#define STBTT_FIXSHIFT 10
#define STBTT_FIX (1 << STBTT_FIXSHIFT)
#define STBTT_FIXMASK (STBTT_FIX-1)
static stbtt__active_edge *new_active(stbtt__edge *e, int off_x, float start_point, void *userdata)
static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
{
stbtt__active_edge *z = (stbtt__active_edge *) STBTT_malloc(sizeof(*z), userdata); // @TODO: make a pool of these!!!
stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
STBTT_assert(e->y0 <= start_point);
if (!z) return z;
// round dx down to avoid going too far
// round dx down to avoid overshooting
if (dxdy < 0)
z->dx = -STBTT_ifloor(FIX * -dxdy);
z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
else
z->dx = STBTT_ifloor(FIX * dxdy);
z->x = STBTT_ifloor(FIX * (e->x0 + dxdy * (start_point - e->y0)));
z->x -= off_x * FIX;
z->dx = STBTT_ifloor(STBTT_FIX * dxdy);
z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount
z->x -= off_x * STBTT_FIX;
z->ey = e->y1;
z->next = 0;
z->valid = e->invert ? 1 : -1;
z->direction = e->invert ? 1 : -1;
return z;
}
#elif STBTT_RASTERIZER_VERSION == 2
static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
{
stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
//STBTT_assert(e->y0 <= start_point);
if (!z) return z;
z->fdx = dxdy;
z->fdy = (1/dxdy);
z->fx = e->x0 + dxdy * (start_point - e->y0);
z->fx -= off_x;
z->direction = e->invert ? 1.0f : -1.0f;
z->sy = e->y0;
z->ey = e->y1;
z->next = 0;
return z;
}
#else
#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
#endif
#if STBTT_RASTERIZER_VERSION == 1
// note: this routine clips fills that extend off the edges... ideally this
// wouldn't happen, but it could happen if the truetype glyph bounding boxes
// are wrong, or if the user supplies a too-small bitmap
@@ -1596,26 +1702,26 @@ static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__ac
while (e) {
if (w == 0) {
// if we're currently at zero, we need to record the edge start point
x0 = e->x; w += e->valid;
x0 = e->x; w += e->direction;
} else {
int x1 = e->x; w += e->valid;
int x1 = e->x; w += e->direction;
// if we went to zero, we need to draw
if (w == 0) {
int i = x0 >> FIXSHIFT;
int j = x1 >> FIXSHIFT;
int i = x0 >> STBTT_FIXSHIFT;
int j = x1 >> STBTT_FIXSHIFT;
if (i < len && j >= 0) {
if (i == j) {
// x0,x1 are the same pixel, so compute combined coverage
scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> FIXSHIFT);
scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT);
} else {
if (i >= 0) // add antialiasing for x0
scanline[i] = scanline[i] + (stbtt_uint8) (((FIX - (x0 & FIXMASK)) * max_weight) >> FIXSHIFT);
scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT);
else
i = -1; // clip
if (j < len) // add antialiasing for x1
scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & FIXMASK) * max_weight) >> FIXSHIFT);
scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT);
else
j = len; // clip
@@ -1632,6 +1738,7 @@ static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__ac
static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
{
stbtt__hheap hh = { 0 };
stbtt__active_edge *active = NULL;
int y,j=0;
int max_weight = (255 / vsubsample); // weight per vertical scanline
@@ -1659,9 +1766,9 @@ static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e,
stbtt__active_edge * z = *step;
if (z->ey <= scan_y) {
*step = z->next; // delete from list
STBTT_assert(z->valid);
z->valid = 0;
STBTT_free(z, userdata);
STBTT_assert(z->direction);
z->direction = 0;
stbtt__hheap_free(&hh, z);
} else {
z->x += z->dx; // advance to position for current scanline
step = &((*step)->next); // advance through list
@@ -1690,7 +1797,7 @@ static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e,
// insert all edges that start before the center of this scanline -- omit ones that also end on this scanline
while (e->y0 <= scan_y) {
if (e->y1 > scan_y) {
stbtt__active_edge *z = new_active(e, off_x, scan_y, userdata);
stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata);
// find insertion point
if (active == NULL)
active = z;
@@ -1721,24 +1828,377 @@ static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e,
++j;
}
while (active) {
stbtt__active_edge *z = active;
active = active->next;
STBTT_free(z, userdata);
}
stbtt__hheap_cleanup(&hh, userdata);
if (scanline != scanline_data)
STBTT_free(scanline, userdata);
}
static int stbtt__edge_compare(const void *p, const void *q)
{
stbtt__edge *a = (stbtt__edge *) p;
stbtt__edge *b = (stbtt__edge *) q;
#elif STBTT_RASTERIZER_VERSION == 2
if (a->y0 < b->y0) return -1;
if (a->y0 > b->y0) return 1;
return 0;
// the edge passed in here does not cross the vertical line at x or the vertical line at x+1
// (i.e. it has already been clipped to those)
static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1)
{
if (y0 == y1) return;
assert(y0 < y1);
assert(e->sy <= e->ey);
if (y0 > e->ey) return;
if (y1 < e->sy) return;
if (y0 < e->sy) {
x0 += (x1-x0) * (e->sy - y0) / (y1-y0);
y0 = e->sy;
}
if (y1 > e->ey) {
x1 += (x1-x0) * (e->ey - y1) / (y1-y0);
y1 = e->ey;
}
if (x0 == x)
assert(x1 <= x+1);
else if (x0 == x+1)
assert(x1 >= x);
else if (x0 <= x)
assert(x1 <= x);
else if (x0 >= x+1)
assert(x1 >= x+1);
else
assert(x1 >= x && x1 <= x+1);
if (x0 <= x && x1 <= x)
scanline[x] += e->direction * (y1-y0);
else if (x0 >= x+1 && x1 >= x+1)
;
else {
assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1);
scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position
}
}
static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top)
{
float y_bottom = y_top+1;
while (e) {
// brute force every pixel
// compute intersection points with top & bottom
assert(e->ey >= y_top);
if (e->fdx == 0) {
float x0 = e->fx;
if (x0 < len) {
if (x0 >= 0) {
stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom);
stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom);
} else {
stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom);
}
}
} else {
float x0 = e->fx;
float dx = e->fdx;
float xb = x0 + dx;
float x_top, x_bottom;
float y0,y1;
float dy = e->fdy;
assert(e->sy <= y_bottom && e->ey >= y_top);
// compute endpoints of line segment clipped to this scanline (if the
// line segment starts on this scanline. x0 is the intersection of the
// line with y_top, but that may be off the line segment.
if (e->sy > y_top) {
x_top = x0 + dx * (e->sy - y_top);
y0 = e->sy;
} else {
x_top = x0;
y0 = y_top;
}
if (e->ey < y_bottom) {
x_bottom = x0 + dx * (e->ey - y_top);
y1 = e->ey;
} else {
x_bottom = xb;
y1 = y_bottom;
}
if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) {
// from here on, we don't have to range check x values
if ((int) x_top == (int) x_bottom) {
float height;
// simple case, only spans one pixel
int x = (int) x_top;
height = y1 - y0;
assert(x >= 0 && x < len);
scanline[x] += e->direction * (1-((x_top - x) + (x_bottom-x))/2) * height;
scanline_fill[x] += e->direction * height; // everything right of this pixel is filled
} else {
int x,x1,x2;
float y_crossing, step, sign, area;
// covers 2+ pixels
if (x_top > x_bottom) {
// flip scanline vertically; signed area is the same
float t;
y0 = y_bottom - (y0 - y_top);
y1 = y_bottom - (y1 - y_top);
t = y0, y0 = y1, y1 = t;
t = x_bottom, x_bottom = x_top, x_top = t;
dx = -dx;
dy = -dy;
t = x0, x0 = xb, xb = t;
}
x1 = (int) x_top;
x2 = (int) x_bottom;
// compute intersection with y axis at x1+1
y_crossing = (x1+1 - x0) * dy + y_top;
sign = e->direction;
// area of the rectangle covered from y0..y_crossing
area = sign * (y_crossing-y0);
// area of the triangle (x_top,y0), (x+1,y0), (x+1,y_crossing)
scanline[x1] += area * (1-((x_top - x1)+(x1+1-x1))/2);
step = sign * dy;
for (x = x1+1; x < x2; ++x) {
scanline[x] += area + step/2;
area += step;
}
y_crossing += dy * (x2 - (x1+1));
assert(fabs(area) <= 1.01f);
scanline[x2] += area + sign * (1-((x2-x2)+(x_bottom-x2))/2) * (y1-y_crossing);
scanline_fill[x2] += sign * (y1-y0);
}
} else {
// if edge goes outside of box we're drawing, we require
// clipping logic. since this does not match the intended use
// of this library, we use a different, very slow brute
// force implementation
int x;
for (x=0; x < len; ++x) {
// cases:
//
// there can be up to two intersections with the pixel. any intersection
// with left or right edges can be handled by splitting into two (or three)
// regions. intersections with top & bottom do not necessitate case-wise logic.
float y0,y1;
float y_cur = y_top, x_cur = x0;
// x = e->x + e->dx * (y-y_top)
// (y-y_top) = (x - e->x) / e->dx
// y = (x - e->x) / e->dx + y_top
y0 = (x - x0) / dx + y_top;
y1 = (x+1 - x0) / dx + y_top;
if (y0 < y1) {
if (y0 > y_top && y0 < y_bottom) {
stbtt__handle_clipped_edge(scanline,x,e, x_cur,y_cur, (float) x,y0);
y_cur = y0;
x_cur = (float) x;
}
if (y1 >= y_cur && y1 < y_bottom) {
stbtt__handle_clipped_edge(scanline,x,e, x_cur,y_cur, (float) x+1,y1);
y_cur = y1;
x_cur = (float) x+1;
}
} else {
if (y1 >= y_cur && y1 < y_bottom) {
stbtt__handle_clipped_edge(scanline,x,e, x_cur,y_cur, (float) x+1,y1);
y_cur = y1;
x_cur = (float) x+1;
}
if (y0 > y_top && y0 < y_bottom) {
stbtt__handle_clipped_edge(scanline,x,e, x_cur,y_cur, (float) x,y0);
y_cur = y0;
x_cur = (float) x;
}
}
stbtt__handle_clipped_edge(scanline,x,e, x_cur,y_cur, xb,y_bottom);
}
}
}
e = e->next;
}
}
// directly AA rasterize edges w/o supersampling
static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
{
stbtt__hheap hh = { 0 };
stbtt__active_edge *active = NULL;
int y,j=0, i;
float scanline_data[129], *scanline, *scanline2;
if (result->w > 64)
scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata);
else
scanline = scanline_data;
scanline2 = scanline + result->w;
y = off_y;
e[n].y0 = (float) (off_y + result->h) + 1;
while (j < result->h) {
// find center of pixel for this scanline
float scan_y_top = y + 0.0f;
float scan_y_bottom = y + 1.0f;
stbtt__active_edge **step = &active;
STBTT_memset(scanline , 0, result->w*sizeof(scanline[0]));
STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0]));
// update all active edges;
// remove all active edges that terminate before the top of this scanline
while (*step) {
stbtt__active_edge * z = *step;
if (z->ey <= scan_y_top) {
*step = z->next; // delete from list
STBTT_assert(z->direction);
z->direction = 0;
stbtt__hheap_free(&hh, z);
} else {
step = &((*step)->next); // advance through list
}
}
// insert all edges that start before the bottom of this scanline
while (e->y0 <= scan_y_bottom) {
stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata);
assert(z->ey >= scan_y_top);
// insert at front
z->next = active;
active = z;
++e;
}
// now process all active edges
if (active)
stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top);
{
float sum = 0;
for (i=0; i < result->w; ++i) {
float k;
int m;
sum += scanline2[i];
k = scanline[i] + sum;
k = (float) fabs(k)*255 + 0.5f;
m = (int) k;
if (m > 255) m = 255;
result->pixels[j*result->stride + i] = (unsigned char) m;
}
}
// advance all the edges
step = &active;
while (*step) {
stbtt__active_edge *z = *step;
z->fx += z->fdx; // advance to position for current scanline
step = &((*step)->next); // advance through list
}
++y;
++j;
}
stbtt__hheap_cleanup(&hh, userdata);
if (scanline != scanline_data)
STBTT_free(scanline, userdata);
}
#else
#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
#endif
#define STBTT__COMPARE(a,b) ((a)->y0 < (b)->y0)
static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
{
int i,j;
for (i=1; i < n; ++i) {
stbtt__edge t = p[i], *a = &t;
j = i;
while (j > 0) {
stbtt__edge *b = &p[j-1];
int c = STBTT__COMPARE(a,b);
if (!c) break;
p[j] = p[j-1];
--j;
}
if (i != j)
p[j] = t;
}
}
static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
{
/* threshhold for transitioning to insertion sort */
while (n > 12) {
stbtt__edge t;
int c01,c12,c,m,i,j;
/* compute median of three */
m = n >> 1;
c01 = STBTT__COMPARE(&p[0],&p[m]);
c12 = STBTT__COMPARE(&p[m],&p[n-1]);
/* if 0 >= mid >= end, or 0 < mid < end, then use mid */
if (c01 != c12) {
/* otherwise, we'll need to swap something else to middle */
int z;
c = STBTT__COMPARE(&p[0],&p[n-1]);
/* 0>mid && mid<n: 0>n => n; 0<n => 0 */
/* 0<mid && mid>n: 0>n => 0; 0<n => n */
z = (c == c12) ? 0 : n-1;
t = p[z];
p[z] = p[m];
p[m] = t;
}
/* now p[m] is the median-of-three */
/* swap it to the beginning so it won't move around */
t = p[0];
p[0] = p[m];
p[m] = t;
/* partition loop */
i=1;
j=n-1;
for(;;) {
/* handling of equality is crucial here */
/* for sentinels & efficiency with duplicates */
for (;;++i) {
if (!STBTT__COMPARE(&p[i], &p[0])) break;
}
for (;;--j) {
if (!STBTT__COMPARE(&p[0], &p[j])) break;
}
/* make sure we haven't crossed */
if (i >= j) break;
t = p[i];
p[i] = p[j];
p[j] = t;
++i;
--j;
}
/* recurse on smaller side, iterate on larger */
if (j < (n-i)) {
stbtt__sort_edges_quicksort(p,j);
p = p+i;
n = n-i;
} else {
stbtt__sort_edges_quicksort(p+i, n-i);
n = j;
}
}
}
static void stbtt__sort_edges(stbtt__edge *p, int n)
{
stbtt__sort_edges_quicksort(p, n);
stbtt__sort_edges_ins_sort(p, n);
}
typedef struct
@@ -1751,7 +2211,13 @@ static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcou
float y_scale_inv = invert ? -scale_y : scale_y;
stbtt__edge *e;
int n,i,j,k,m;
#if STBTT_RASTERIZER_VERSION == 1
int vsubsample = result->h < 8 ? 15 : 5;
#elif STBTT_RASTERIZER_VERSION == 2
int vsubsample = 1;
#else
#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
#endif
// vsubsample should divide 255 evenly; otherwise we won't reach full opacity
// now we have to blow out the windings into explicit edge lists
@@ -1788,7 +2254,8 @@ static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcou
}
// now sort the edges by their highest point (should snap to integer, and then by x)
STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare);
//STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare);
stbtt__sort_edges(e, n);
// now, traverse the scanlines and find the intersections on each scanline, use xor winding rule
stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata);
+7
View File
@@ -751,8 +751,15 @@ bool rarch_environment_cb(unsigned cmd, void *data)
break;
case RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY:
if (!settings->system_directory || settings->system_directory[0] == '\0')
{
RARCH_WARN("SYSTEM DIR is empty, fill assume CONTENT DIR %s\n",global->fullpath);
fill_pathname_basedir(settings->system_directory, global->fullpath,
sizeof(settings->system_directory));
}
*(const char**)data = *settings->system_directory ?
settings->system_directory : NULL;
RARCH_LOG("Environ SYSTEM_DIRECTORY: \"%s\".\n",
settings->system_directory);
break;
+2 -2
View File
@@ -812,11 +812,11 @@ static void frontend_android_get_environment_settings(int *argc,
path_mkdir(g_defaults.sram_dir);
fill_pathname_join(g_defaults.savestate_dir,
ext_dir, "saves", sizeof(g_defaults.savestate_dir));
ext_dir, "states", sizeof(g_defaults.savestate_dir));
path_mkdir(g_defaults.savestate_dir);
fill_pathname_join(g_defaults.system_dir,
ext_dir, "saves", sizeof(g_defaults.system_dir));
ext_dir, "system", sizeof(g_defaults.system_dir));
path_mkdir(g_defaults.system_dir);
break;
case SDCARD_NOT_WRITABLE:
+2 -2
View File
@@ -71,7 +71,7 @@ enum
LOOPER_ID_MAIN = 1,
LOOPER_ID_INPUT,
LOOPER_ID_USER,
LOOPER_ID_INPUT_MSG,
LOOPER_ID_INPUT_MSG
};
enum
@@ -168,7 +168,7 @@ enum
APP_CMD_DESTROY,
// Set by thread when it will no longer reply to commands.
APP_CMD_DEAD,
APP_CMD_DEAD
};
#define JNI_EXCEPTION(env) \
+35 -13
View File
@@ -51,6 +51,10 @@
#include "../../menu/menu.h"
#endif
#if 0
#define RELEASE_BUILD
#endif
typedef enum
{
CFApplicationDirectory = 1, /* Supported applications (Applications) */
@@ -332,34 +336,52 @@ static void frontend_darwin_get_environment_settings(int *argc, char *argv[],
#ifdef OSX
strlcat(home_dir_buf, "/RetroArch", sizeof(home_dir_buf));
#endif
fill_pathname_join(g_defaults.core_dir, home_dir_buf, "modules", sizeof(g_defaults.core_dir));
fill_pathname_join(g_defaults.shader_dir, home_dir_buf, "shaders_glsl", sizeof(g_defaults.shader_dir));
fill_pathname_join(g_defaults.core_dir, home_dir_buf, "cores", sizeof(g_defaults.core_dir));
fill_pathname_join(g_defaults.core_info_dir, home_dir_buf, "info", sizeof(g_defaults.core_info_dir));
fill_pathname_join(g_defaults.overlay_dir, home_dir_buf, "overlays", sizeof(g_defaults.overlay_dir));
fill_pathname_join(g_defaults.autoconfig_dir, home_dir_buf, "autoconfig/hid", sizeof(g_defaults.autoconfig_dir));
fill_pathname_join(g_defaults.autoconfig_dir, home_dir_buf, "autoconfig", sizeof(g_defaults.autoconfig_dir));
fill_pathname_join(g_defaults.core_assets_dir, home_dir_buf, "downloads", sizeof(g_defaults.core_assets_dir));
fill_pathname_join(g_defaults.assets_dir, home_dir_buf, "assets", sizeof(g_defaults.assets_dir));
fill_pathname_join(g_defaults.system_dir, home_dir_buf, ".RetroArch", sizeof(g_defaults.system_dir));
strlcpy(g_defaults.menu_config_dir, g_defaults.system_dir, sizeof(g_defaults.menu_config_dir));
fill_pathname_join(g_defaults.system_dir, home_dir_buf, "system", sizeof(g_defaults.system_dir));
fill_pathname_join(g_defaults.menu_config_dir, home_dir_buf, "configs", sizeof(g_defaults.menu_config_dir));
fill_pathname_join(g_defaults.config_path, g_defaults.menu_config_dir, "retroarch.cfg", sizeof(g_defaults.config_path));
fill_pathname_join(g_defaults.database_dir, home_dir_buf, "rdb", sizeof(g_defaults.database_dir));
fill_pathname_join(g_defaults.cursor_dir, home_dir_buf, "cursors", sizeof(g_defaults.cursor_dir));
fill_pathname_join(g_defaults.cheats_dir, home_dir_buf, "cht", sizeof(g_defaults.cheats_dir));
strlcpy(g_defaults.sram_dir, g_defaults.system_dir, sizeof(g_defaults.sram_dir));
strlcpy(g_defaults.savestate_dir, g_defaults.system_dir, sizeof(g_defaults.savestate_dir));
CFTemporaryDirectory(temp_dir, sizeof(temp_dir));
strlcpy(g_defaults.extraction_dir, temp_dir, sizeof(g_defaults.extraction_dir));
fill_pathname_join(g_defaults.shader_dir, home_dir_buf, "shaders_glsl", sizeof(g_defaults.shader_dir));
fill_pathname_join(g_defaults.sram_dir, home_dir_buf, "saves", sizeof(g_defaults.sram_dir));
fill_pathname_join(g_defaults.savestate_dir, home_dir_buf, "states", sizeof(g_defaults.savestate_dir));
fill_pathname_join(g_defaults.remap_dir, home_dir_buf, "remaps", sizeof(g_defaults.remap_dir));
#if defined(OSX)
#ifdef HAVE_CG
fill_pathname_join(g_defaults.shader_dir, home_dir_buf, "shaders_cg", sizeof(g_defaults.shader_dir));
#endif
fill_pathname_join(g_defaults.audio_filter_dir, home_dir_buf, "audio_filters", sizeof(g_defaults.audio_filter_dir));
fill_pathname_join(g_defaults.video_filter_dir, home_dir_buf, "video_filters", sizeof(g_defaults.video_filter_dir));
fill_pathname_join(g_defaults.playlist_dir, home_dir_buf, "playlists", sizeof(g_defaults.playlist_dir));
#endif
#ifdef RELEASE_BUILD
fill_pathname_join(g_defaults.remap_dir, bundle_path_buf, "Contents/Resources/remaps", sizeof(g_defaults.remap_dir));
fill_pathname_join(g_defaults.playlist_dir, bundle_path_buf, "Contents/Resources/playlists", sizeof(g_defaults.playlist_dir));
fill_pathname_join(g_defaults.shader_dir, bundle_path_buf, "Contents/Resources/shaders", sizeof(g_defaults.shader_dir));
fill_pathname_join(g_defaults.core_dir, bundle_path_buf, "Contents/Resources/cores", sizeof(g_defaults.core_dir));
fill_pathname_join(g_defaults.core_info_dir, bundle_path_buf, "Contents/Resources/info", sizeof(g_defaults.core_info_dir));
fill_pathname_join(g_defaults.overlay_dir, bundle_path_buf, "Contents/Resources/overlays", sizeof(g_defaults.overlay_dir));
fill_pathname_join(g_defaults.autoconfig_dir, bundle_path_buf, "Contents/Resources/autoconfig", sizeof(g_defaults.autoconfig_dir));
fill_pathname_join(g_defaults.core_assets_dir, bundle_path_buf, "Contents/Resources/downloads", sizeof(g_defaults.core_assets_dir));
fill_pathname_join(g_defaults.assets_dir, bundle_path_buf, "Contents/Resources/assets", sizeof(g_defaults.assets_dir));
fill_pathname_join(g_defaults.system_dir, bundle_path_buf, "Contents/Resources/system", sizeof(g_defaults.system_dir));
fill_pathname_join(g_defaults.menu_config_dir, bundle_path_buf, "Contents/Resources/configs", sizeof(g_defaults.menu_config_dir));
fill_pathname_join(g_defaults.config_path, g_defaults.menu_config_dir, "retroarch.cfg", sizeof(g_defaults.config_path));
fill_pathname_join(g_defaults.database_dir, bundle_path_buf, "Contents/Resources/rdb", sizeof(g_defaults.database_dir));
fill_pathname_join(g_defaults.cursor_dir, bundle_path_buf, "Contents/Resources/cursors", sizeof(g_defaults.cursor_dir));
fill_pathname_join(g_defaults.cheats_dir, bundle_path_buf, "Contents/Resources/cht", sizeof(g_defaults.cheats_dir));
fill_pathname_join(g_defaults.sram_dir, bundle_path_buf, "Contents/Resources/saves", sizeof(g_defaults.sram_dir));
fill_pathname_join(g_defaults.savestate_dir, bundle_path_buf, "Contents/Resources/states", sizeof(g_defaults.savestate_dir));
#endif
CFTemporaryDirectory(temp_dir, sizeof(temp_dir));
strlcpy(g_defaults.extraction_dir, temp_dir, sizeof(g_defaults.extraction_dir));
path_mkdir(bundle_path_buf);
+3 -2
View File
@@ -38,6 +38,7 @@ void main_exit_save_config(void)
{
settings_t *settings = config_get_ptr();
global_t *global = global_get_ptr();
rarch_system_info_t *info = rarch_system_info_get_ptr();
if (settings->config_save_on_exit && *global->config_path)
{
@@ -48,8 +49,8 @@ void main_exit_save_config(void)
strlcpy(global->savestate_dir,orig_savestate_dir,sizeof(global->savestate_dir));
/* restore system directory if it was set to <content dir> */
if(orig_system_dir_empty)
strlcpy(settings->system_directory,"",sizeof(settings->system_directory));
if(settings->system_in_content_dir && !strcmp(info->info.library_name,"No Core"))
settings->system_directory[0] = '\0';
/* Save last core-specific config to the default config location,
* needed on consoles for core switching and reusing last good
+1 -1
View File
@@ -33,7 +33,7 @@
#endif
#ifndef PACKAGE_VERSION
#define PACKAGE_VERSION "1.2.1"
#define PACKAGE_VERSION "1.2.2"
#endif
/* Platform-specific headers */
+2 -1
View File
@@ -24,6 +24,7 @@
#include <sys/ioctl.h>
#include <linux/fb.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <rthreads/rthreads.h>
@@ -897,7 +898,6 @@ static void sunxi_set_texture_enable(void *data, bool state, bool full_screen)
static void sunxi_set_texture_frame(void *data, const void *frame, bool rgb32,
unsigned width, unsigned height, float alpha)
{
uint32_t line[dst_width];
uint16_t src_pix;
uint32_t R, G, B, dst_pix;
unsigned int i, j;
@@ -908,6 +908,7 @@ static void sunxi_set_texture_frame(void *data, const void *frame, bool rgb32,
unsigned int src_pitch = width * 2;
unsigned int dst_pitch = _dispvars->sunxi_disp->xres * 4;
unsigned int dst_width = _dispvars->sunxi_disp->xres;
uint32_t line[dst_width];
/* Remember, memcpy() works with 8bits pointers for increments. */
char *dst_base_addr = (char*)(_dispvars->pages[0].address);
+4 -2
View File
@@ -151,7 +151,9 @@ static bool cocoagl_gfx_ctx_init(void *data)
#if defined(HAVE_COCOA)
CocoaView *g_view = (CocoaView*)nsview_get_ptr();
[g_view setWantsBestResolutionOpenGLSurface:YES];
#if MAC_OS_X_VERSION_10_7
[g_view setWantsBestResolutionOpenGLSurface:YES];
#endif
NSOpenGLPixelFormatAttribute attributes [] = {
NSOpenGLPFAColorSize, 24,
NSOpenGLPFADoubleBuffer,
@@ -389,7 +391,7 @@ static bool cocoagl_gfx_ctx_get_metrics(void *data, enum display_metric_types ty
float display_height = display_pixel_size.height;
float physical_width = display_physical_size.width;
float physical_height = display_physical_size.height;
#if MAC_OS_X_VERSION_10_6
#if MAC_OS_X_VERSION_10_7
float scale = screen.backingScaleFactor;
#else
float scale = 1.0f;
+45 -6
View File
@@ -18,6 +18,7 @@
#include <file/file_path.h>
#include "../../general.h"
#include "../../file_ops.h"
#include <ctype.h>
#define STB_TRUETYPE_IMPLEMENTATION
#define STB_RECT_PACK_IMPLEMENTATION
@@ -56,17 +57,27 @@ static void font_renderer_stb_free(void *data)
}
static bool font_renderer_stb_create_atlas(stb_font_renderer_t *self,
uint8_t *font_data, float font_size)
uint8_t *font_data, float font_size, unsigned width, unsigned height)
{
int i;
stbtt_pack_context pc = {NULL};
stbtt_packedchar chardata[256];
self->atlas.width = self->atlas.height = 512;
self->atlas.buffer = (uint8_t*)calloc(self->atlas.height, self->atlas.width);
if (width > 2048 || height > 2048)
{
RARCH_WARN("[stb] Font atlas too big: %ux%u\n", width, height);
goto error;
}
if (self->atlas.buffer)
free(self->atlas.buffer);
self->atlas.buffer = (uint8_t*)calloc(height, width);
self->atlas.width = width;
self->atlas.height = height;
if (!self->atlas.buffer)
return false;
goto error;
stbtt_PackBegin(&pc, self->atlas.buffer,
self->atlas.width, self->atlas.height,
@@ -87,9 +98,36 @@ static bool font_renderer_stb_create_atlas(stb_font_renderer_t *self,
g->draw_offset_y = c->yoff;
g->width = c->x1 - c->x0;
g->height = c->y1 - c->y0;
/* make sure important characters fit */
if (isalnum(i) && (!g->width || !g->height))
{
int new_width = width * 1.2;
int new_height = height * 1.2;
/* limit growth to 2048x2048 unless we already reached that */
if (width < 2048 || height < 2048)
{
new_width = min(new_width, 2048);
new_height = min(new_height, 2048);
}
return font_renderer_stb_create_atlas(self, font_data, font_size,
new_width, new_height);
}
}
return true;
error:
self->atlas.width = self->atlas.height = 0;
if (self->atlas.buffer)
free(self->atlas.buffer);
self->atlas.buffer = NULL;
return false;
}
static void *font_renderer_stb_init(const char *font_path, float font_size)
@@ -108,7 +146,7 @@ static void *font_renderer_stb_init(const char *font_path, float font_size)
if (!read_file(font_path, (void**)&font_data, NULL))
goto error;
if (!font_renderer_stb_create_atlas(self, font_data, font_size))
if (!font_renderer_stb_create_atlas(self, font_data, font_size, 512, 512))
goto error;
if (!stbtt_InitFont(&info, font_data, stbtt_GetFontOffsetForIndex(font_data, 0)))
@@ -146,7 +184,8 @@ static const char *font_renderer_stb_get_default_font(void)
"/Library/Fonts/Tahoma.ttf",
#elif defined(__ANDROID_API__)
"/system/fonts/DroidSansMono.ttf",
"/system/fonts/DroidSansFallback.ttf",
"/system/fonts/CutiveMono.ttf",
"/system/fonts/DroidSans.ttf",
#else
"/usr/share/fonts/TTF/DejaVuSansMono.ttf",
"/usr/share/fonts/TTF/DejaVuSans.ttf",
+28 -10
View File
@@ -629,6 +629,22 @@ static void handle_hotplug(android_input_t *android,
else if (strstr(device_name, "SideWinder"))
strlcpy(name_buf, "SideWinder Classic", sizeof(name_buf));
}
else if (strstr(device_name, "NVIDIA Corporation NVIDIA Controller v01.01"))
{
/* Built-in shield contrlleris always user 1. FIXME: This is kinda ugly.
* We really need to find a way to detect useless input devices
* like gpio-keys in a general way.
*/
*port = 0;
strlcpy(name_buf, device_name, sizeof(name_buf));
}
else if (strstr(device_name, "Virtual") ||
(strstr(device_name, "gpio") && strstr(android->pad_states[0].name,"NVIDIA Corporation NVIDIA Controller v01.01")))
{
/* If built-in shield controller is detected bind the virtual and gpio devices to the same port*/
*port = 0;
strlcpy(name_buf, "NVIDIA Corporation NVIDIA Controller v01.01", sizeof(name_buf));
}
else if (
strstr(device_name, "PLAYSTATION(R)3") ||
strstr(device_name, "Dualshock3") ||
@@ -637,15 +653,6 @@ static void handle_hotplug(android_input_t *android,
strlcpy(name_buf, "PlayStation3", sizeof(name_buf));
else if (strstr(device_name, "MOGA"))
strlcpy(name_buf, "Moga IME", sizeof(name_buf));
else if (strstr(device_name, "NVIDIA Corporation NVIDIA Controller v01.01"))
{
/* Shield is always user 1. FIXME: This is kinda ugly.
* We really need to find a way to detect useless input devices
* like gpio-keys in a general way.
*/
*port = 0;
strlcpy(name_buf, device_name, sizeof(name_buf));
}
else if (device_name[0] != '\0')
strlcpy(name_buf, device_name, sizeof(name_buf));
@@ -774,9 +781,14 @@ static void android_input_handle_user(void *data)
static void android_input_poll(void *data)
{
int ident;
driver_t *driver = driver_get_ptr();
const input_driver_t *input = driver ? (const input_driver_t*)driver->input : NULL;
if (!input)
return;
while ((ident =
ALooper_pollAll((input_driver_key_pressed(RARCH_PAUSE_TOGGLE))
ALooper_pollAll((input->key_pressed(driver->input_data, RARCH_PAUSE_TOGGLE))
? -1 : 0,
NULL, NULL, NULL)) >= 0)
{
@@ -867,6 +879,11 @@ static bool android_input_key_pressed(void *data, int key)
0, settings->input.binds[0], key);
}
static bool android_input_meta_key_pressed(void *data, int key)
{
return false;
}
static void android_input_free_input(void *data)
{
android_input_t *android = (android_input_t*)data;
@@ -1012,6 +1029,7 @@ input_driver_t input_android = {
android_input_poll,
android_input_state,
android_input_key_pressed,
android_input_meta_key_pressed,
android_input_free_input,
android_input_set_sensor_state,
android_input_get_sensor_input,
+6
View File
@@ -369,6 +369,11 @@ static bool cocoa_input_key_pressed(void *data, int key)
input_joypad_pressed(apple->joypad, 0, settings->input.binds[0], key);
}
static bool cocoa_input_meta_key_pressed(void *data, int key)
{
return false;
}
static void cocoa_input_free(void *data)
{
cocoa_input_data_t *apple = (cocoa_input_data_t*)data;
@@ -442,6 +447,7 @@ input_driver_t input_cocoa = {
cocoa_input_poll,
cocoa_input_state,
cocoa_input_key_pressed,
cocoa_input_meta_key_pressed,
cocoa_input_free,
NULL,
NULL,
+7 -2
View File
@@ -88,8 +88,12 @@ static bool ctr_input_key_pressed(void *data, int key)
settings_t *settings = config_get_ptr();
ctr_input_t *ctr = (ctr_input_t*)data;
return (BIT64_GET(lifecycle_state, key)) ||
(input_joypad_pressed(ctr->joypad, 0, settings->input.binds[0], key);
return (input_joypad_pressed(ctr->joypad, 0, settings->input.binds[0], key);
}
static bool ctr_input_meta_key_pressed(void *data, int key)
{
return (BIT64_GET(lifecycle_state, key));
}
static uint64_t ctr_input_get_capabilities(void *data)
@@ -145,6 +149,7 @@ input_driver_t input_ctr = {
ctr_input_poll,
ctr_input_state,
ctr_input_key_pressed,
ctr_input_meta_key_pressed,
ctr_input_free_input,
NULL,
NULL,
+6
View File
@@ -383,6 +383,11 @@ static bool dinput_key_pressed(void *data, int key)
settings->input.binds[0], 0, key);
}
static bool dinput_meta_key_pressed(void *data, int key)
{
return false;
}
static int16_t dinput_lightgun_state(struct dinput_input *di, unsigned id)
{
switch (id)
@@ -802,6 +807,7 @@ input_driver_t input_dinput = {
dinput_poll,
dinput_input_state,
dinput_key_pressed,
dinput_meta_key_pressed,
dinput_free,
NULL,
NULL,
+7 -2
View File
@@ -97,8 +97,12 @@ static bool gx_input_key_pressed(void *data, int key)
{
settings_t *settings = config_get_ptr();
gx_input_t *gx = (gx_input_t*)data;
return (BIT64_GET(lifecycle_state, key)) ||
input_joypad_pressed(gx->joypad, 0, settings->input.binds[0], key);
return input_joypad_pressed(gx->joypad, 0, settings->input.binds[0], key);
}
static bool gx_input_meta_key_pressed(void *data, int key)
{
return (BIT64_GET(lifecycle_state, key));
}
static uint64_t gx_input_get_capabilities(void *data)
@@ -154,6 +158,7 @@ input_driver_t input_gx = {
gx_input_poll,
gx_input_state,
gx_input_key_pressed,
gx_input_meta_key_pressed,
gx_input_free_input,
NULL,
NULL,
+6
View File
@@ -182,6 +182,11 @@ static bool linuxraw_input_key_pressed(void *data, int key)
input_joypad_pressed(linuxraw->joypad, 0, settings->input.binds[0], key);
}
static bool linuxraw_input_meta_key_pressed(void *data, int key)
{
return false;
}
static int16_t linuxraw_input_state(void *data,
const struct retro_keybind **binds, unsigned port,
unsigned device, unsigned idx, unsigned id)
@@ -302,6 +307,7 @@ input_driver_t input_linuxraw = {
linuxraw_input_poll,
linuxraw_input_state,
linuxraw_input_key_pressed,
linuxraw_input_meta_key_pressed,
linuxraw_input_free,
NULL,
NULL,
+9
View File
@@ -49,6 +49,14 @@ static bool nullinput_input_key_pressed(void *data, int key)
return false;
}
static bool nullinput_input_meta_key_pressed(void *data, int key)
{
(void)data;
(void)key;
return false;
}
static void nullinput_input_free_input(void *data)
{
(void)data;
@@ -91,6 +99,7 @@ input_driver_t input_null = {
nullinput_input_poll,
nullinput_input_state,
nullinput_input_key_pressed,
nullinput_input_meta_key_pressed,
nullinput_input_free_input,
nullinput_set_sensor_state,
NULL,
+6
View File
@@ -182,6 +182,11 @@ static bool ps3_input_key_pressed(void *data, int key)
return input_joypad_pressed(ps3->joypad, 0, settings->input.binds[0], key);
}
static bool ps3_input_meta_key_pressed(void *data, int key)
{
return false;
}
static uint64_t ps3_input_get_capabilities(void *data)
{
(void)data;
@@ -265,6 +270,7 @@ input_driver_t input_ps3 = {
ps3_input_poll,
ps3_input_state,
ps3_input_key_pressed,
ps3_input_meta_key_pressed,
ps3_input_free_input,
ps3_input_set_sensor_state,
NULL,
+7 -2
View File
@@ -103,8 +103,12 @@ static bool psp_input_key_pressed(void *data, int key)
settings_t *settings = config_get_ptr();
psp_input_t *psp = (psp_input_t*)data;
return (BIT64_GET(lifecycle_state, key)) ||
input_joypad_pressed(psp->joypad, 0, settings->input.binds[0], key);
return input_joypad_pressed(psp->joypad, 0, settings->input.binds[0], key);
}
static bool psp_input_meta_key_pressed(void *data, int key)
{
return (BIT64_GET(lifecycle_state, key));
}
static uint64_t psp_input_get_capabilities(void *data)
@@ -160,6 +164,7 @@ input_driver_t input_psp = {
psp_input_poll,
psp_input_state,
psp_input_key_pressed,
psp_input_meta_key_pressed,
psp_input_free_input,
NULL,
NULL,
+6
View File
@@ -794,6 +794,11 @@ static bool qnx_input_key_pressed(void *data, int key)
return input_joypad_pressed(qnx->joypad, 0, settings->input.binds[0], key);
}
static bool qnx_input_meta_key_pressed(void *data, int key)
{
return false;
}
static void qnx_input_free_input(void *data)
{
if (data)
@@ -859,6 +864,7 @@ input_driver_t input_qnx = {
qnx_input_poll,
qnx_input_state,
qnx_input_key_pressed,
NULL,
qnx_input_free_input,
NULL,
NULL,
+7 -1
View File
@@ -82,6 +82,11 @@ static bool rwebinput_key_pressed(rwebinput_input_t *rwebinput, int key)
return ret;
}
static bool rwebinput_meta_key_pressed(rwebinput_input_t *rwebinput, int key)
{
return false;
}
static bool rwebinput_is_pressed(rwebinput_input_t *rwebinput,
const struct retro_keybind *binds, unsigned id)
{
@@ -97,7 +102,7 @@ static bool rwebinput_is_pressed(rwebinput_input_t *rwebinput,
static bool rwebinput_key_pressed(void *data, int key)
{
rwebinput_input_t *rwebinput = (rwebinput_input_t*)data;
settings_t *settings = config_get_ptr();
settings_t *settings = config_get_ptr();
return rwebinput_is_pressed(rwebinput, settings->input.binds[0], key);
}
@@ -250,6 +255,7 @@ input_driver_t input_rwebinput = {
rwebinput_input_poll,
rwebinput_input_state,
rwebinput_key_pressed,
rwebinput_meta_key_pressed,
rwebinput_input_free,
NULL,
NULL,
+6
View File
@@ -291,6 +291,11 @@ static bool sdl_input_key_pressed(void *data, int key)
return false;
}
static bool sdl_input_meta_key_pressed(void *data, int key)
{
return false;
}
static int16_t sdl_joypad_device_state(sdl_input_t *sdl, const struct retro_keybind **binds_,
unsigned port_num, unsigned id)
{
@@ -583,6 +588,7 @@ input_driver_t input_sdl = {
sdl_input_poll,
sdl_input_state,
sdl_input_key_pressed,
sdl_input_meta_key_pressed,
sdl_input_free,
NULL,
NULL,
+6
View File
@@ -561,6 +561,11 @@ static bool udev_input_key_pressed(void *data, int key)
input_joypad_pressed(udev->joypad, 0, settings->input.binds[0], key);
}
static bool udev_input_meta_key_pressed(void *data, int key)
{
return false;
}
static void udev_input_free(void *data)
{
unsigned i;
@@ -881,6 +886,7 @@ input_driver_t input_udev = {
udev_input_poll,
udev_input_state,
udev_input_key_pressed,
udev_input_meta_key_pressed,
udev_input_free,
NULL,
NULL,
+6
View File
@@ -265,6 +265,11 @@ static bool x_input_key_pressed(void *data, int key)
input_joypad_pressed(x11->joypad, 0, settings->input.binds[0], key);
}
static bool x_input_meta_key_pressed(void *data, int key)
{
return false;
}
static int16_t x_mouse_state(x11_input_t *x11, unsigned id)
{
switch (id)
@@ -546,6 +551,7 @@ input_driver_t input_x = {
x_input_poll,
x_input_state,
x_input_key_pressed,
x_input_meta_key_pressed,
x_input_free,
NULL,
NULL,
+6
View File
@@ -96,6 +96,11 @@ static bool xdk_input_key_pressed(void *data, int key)
return input_joypad_pressed(xdk->joypad, 0, settings->input.binds[0], key);
}
static bool xdk_input_meta_key_pressed(void *data, int key)
{
return false;
}
static uint64_t xdk_input_get_capabilities(void *data)
{
(void)data;
@@ -173,6 +178,7 @@ input_driver_t input_xinput = {
xdk_input_poll,
xdk_input_state,
xdk_input_key_pressed,
xdk_input_meta_key_pressed,
xdk_input_free_input,
NULL,
NULL,
+6
View File
@@ -93,6 +93,11 @@ static bool xenon360_input_key_pressed(void *data, int key)
return (lifecycle_state & (UINT64_C(1) << key));
}
static bool xenon360_input_meta_key_pressed(void *data, int key)
{
return (lifecycle_state & (UINT64_C(1) << key));
}
static uint64_t xenon360_get_capabilities(void *data)
{
uint64_t caps = 0;
@@ -124,6 +129,7 @@ input_driver_t input_xenon360 = {
xenon360_input_poll,
xenon360_input_state,
xenon360_input_key_pressed,
xenon360_input_meta_key_pressed,
xenon360_input_free_input,
NULL,
NULL,
+4 -3
View File
@@ -120,7 +120,7 @@ static void input_autoconfigure_joypad_add(
/* This will be the case if input driver is reinitialized.
* No reason to spam autoconfigure messages every time. */
bool block_osd_spam = settings &&
settings->input.autoconfigured[params->idx] && *params->name;
settings->input.autoconfigured[params->idx] && *params->name;
if (!settings)
return;
@@ -136,8 +136,9 @@ static void input_autoconfigure_joypad_add(
snprintf(msg, sizeof(msg), "%s configured in port #%u.",
params->name, params->idx);
if (!block_osd_spam)
rarch_main_msg_queue_push(msg, 0, 60, false);
if (!block_osd_spam)
rarch_main_msg_queue_push(msg, 0, 60, false);
RARCH_LOG("%s\n", msg);
}
+5 -13
View File
@@ -199,31 +199,23 @@ bool input_driver_set_rumble_state(unsigned port,
return false;
}
bool input_driver_key_pressed(int key)
{
driver_t *driver = driver_get_ptr();
const input_driver_t *input = input_get_ptr(driver);
if (!driver || !input)
return false;
return input->key_pressed(driver->input_data, key);
}
retro_input_t input_driver_keys_pressed(void)
{
int key;
retro_input_t ret = 0;
driver_t *driver = driver_get_ptr();
const input_driver_t *input = input_get_ptr(driver);
bool handle_key_pressed = !driver->block_libretro_input || !driver->block_hotkey;
for (key = 0; key < RARCH_BIND_LIST_END; key++)
{
bool state = false;
if (handle_key_pressed)
if ((!driver->block_libretro_input && ((key < RARCH_FIRST_META_KEY)))
|| !driver->block_hotkey)
state = input->key_pressed(driver->input_data, key);
if (key >= RARCH_FIRST_META_KEY)
state |= input->meta_key_pressed(driver->input_data, key);
#ifdef HAVE_OVERLAY
state |= input_overlay_key_pressed(key);
#endif
+1 -2
View File
@@ -64,6 +64,7 @@ typedef struct input_driver
const struct retro_keybind **retro_keybinds,
unsigned port, unsigned device, unsigned index, unsigned id);
bool (*key_pressed)(void *data, int key);
bool (*meta_key_pressed)(void *data, int key);
void (*free)(void *data);
bool (*set_sensor_state)(void *data, unsigned port,
enum retro_sensor_action action, unsigned rate);
@@ -144,8 +145,6 @@ retro_input_t input_driver_keys_pressed(void);
int16_t input_driver_state(const struct retro_keybind **retro_keybinds,
unsigned port, unsigned device, unsigned index, unsigned id);
bool input_driver_key_pressed(int key);
uint64_t input_driver_get_capabilities(void);
const input_device_driver_t * input_driver_get_joypad_driver(void);
+166 -1
View File
@@ -20,7 +20,172 @@ const char *msg_hash_to_str_es(uint32_t hash)
{
switch (hash)
{
case 0:
case MSG_PROGRAM:
return "RetroArch";
case MSG_MOVIE_RECORD_STOPPED:
return "Deteniendo grabación de vídeo.";
case MSG_MOVIE_PLAYBACK_ENDED:
return "Reproducción detenida.";
case MSG_AUTOSAVE_FAILED:
return "No se ha podido iniciar el autoguardado.";
case MSG_NETPLAY_FAILED_MOVIE_PLAYBACK_HAS_STARTED:
return "Se ha iniciado una reproducción. No se puede ejecutar el juego en red.";
case MSG_NETPLAY_FAILED:
return "Error al iniciar el juego en red.";
case MSG_LIBRETRO_ABI_BREAK:
return "se ha compilado con una versión distinta a esta implementación de libretro.";
case MSG_REWIND_INIT_FAILED_NO_SAVESTATES:
return "Esta implementación no admite guardados rápidos. No se puede utilizar el rebobinado.";
case MSG_REWIND_INIT_FAILED_THREADED_AUDIO:
return "La implementación utiliza sonido multinúcleo. No se puede utilizar el rebobinado.";
case MSG_REWIND_INIT_FAILED:
return "Error al iniciar el búfer de rebobinado. Rebobinado desactivado.";
case MSG_REWIND_INIT:
return "Iniciando búfer de rebobinado, tamaño";
case MSG_CUSTOM_TIMING_GIVEN:
return "Se ha indicado un ritmo personalizado";
case MSG_VIEWPORT_SIZE_CALCULATION_FAILED:
return "¡Error al calcular el tamaño de ventana! Se utilizarán datos en bruto. Probablemente esto no acabe bien...";
case MSG_HW_RENDERED_MUST_USE_POSTSHADED_RECORDING:
return "El núcleo Libretro se renderiza por hardware. Es necesario utilizar la grabación post-shaders.";
case MSG_RECORDING_TO:
return "Grabando a";
case MSG_DETECTED_VIEWPORT_OF:
return "Ventana detectada:";
case MSG_TAKING_SCREENSHOT:
return "Capturando pantalla.";
case MSG_FAILED_TO_TAKE_SCREENSHOT:
return "Error al capturar pantalla.";
case MSG_FAILED_TO_START_RECORDING:
return "Error al comenzar a grabar.";
case MSG_RECORDING_TERMINATED_DUE_TO_RESIZE:
return "Grabación terminada por cambio de tamaño.";
case MSG_USING_LIBRETRO_DUMMY_CORE_RECORDING_SKIPPED:
return "Se está utilizando el núcleo dummy de libretro. Anulando grabación.";
case MSG_UNKNOWN:
return "Desconocido";
case MSG_LOADING_CONTENT_FILE:
return "Cargando archivo de contenido";
case MSG_RECEIVED:
return "recibido";
case MSG_UNRECOGNIZED_COMMAND:
return "Comando no reconocido";
case MSG_SENDING_COMMAND:
return "Enviando comando";
case MSG_GOT_INVALID_DISK_INDEX:
return "Se ha obtenido un índice de disco no válido.";
case MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY:
return "Error al extraer el disco de la bandeja.";
case MSG_REMOVED_DISK_FROM_TRAY:
return "Se ha retirado el disco de la bandeja.";
case MSG_VIRTUAL_DISK_TRAY:
return "bandeja de disco virtual.";
case MSG_FAILED_TO:
return "Error:";
case MSG_TO:
return "a";
case MSG_SAVING_RAM_TYPE:
return "Guardando tipo de RAM";
case MSG_SAVING_STATE:
return "Guardando rápidamente";
case MSG_LOADING_STATE:
return "Cargando rápidamente";
case MSG_FAILED_TO_LOAD_MOVIE_FILE:
return "Error al cargar el archivo de película";
case MSG_FAILED_TO_LOAD_CONTENT:
return "Error al cargar el contenido";
case MSG_COULD_NOT_READ_CONTENT_FILE:
return "No se ha podido leer el archivo de contenido";
case MSG_GRAB_MOUSE_STATE:
return "Capturar estado de ratón";
case MSG_PAUSED:
return "En pausa.";
case MSG_UNPAUSED:
return "Sin pausa.";
case MSG_FAILED_TO_LOAD_OVERLAY:
return "Error al cargar sobreimposición.";
case MSG_FAILED_TO_UNMUTE_AUDIO:
return "Error al recuperar el sonido.";
case MSG_AUDIO_MUTED:
return "Sonido silenciado.";
case MSG_AUDIO_UNMUTED:
return "Sonido recuperado.";
case MSG_RESET:
return "Reiniciar";
case MSG_FAILED_TO_LOAD_STATE:
return "Error al cargar rápidamente desde";
case MSG_FAILED_TO_SAVE_STATE_TO:
return "Error al guardar rápidamente a";
case MSG_FAILED_TO_SAVE_SRAM:
return "Error al guardar la SRAM";
case MSG_STATE_SIZE:
return "Tamaño de guardado rápido";
case MSG_FOUND_SHADER:
return "Shader encontrado";
case MSG_SRAM_WILL_NOT_BE_SAVED:
return "No se guardará la SRAM.";
case MSG_BLOCKING_SRAM_OVERWRITE:
return "Bloqueando sobrescritura de SRAM";
case MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES:
return "El núcleo no es compatible con los guardados rápidos.";
case MSG_SAVED_STATE_TO_SLOT:
return "Guardando rápidamente a la ranura";
case MSG_SAVED_SUCCESSFULLY_TO:
return "Partida guardada en";
case MSG_BYTES:
return "bytes";
case MSG_CONFIG_DIRECTORY_NOT_SET:
return "No se ha asignado la carpeta de configuración. No se puede guardar la nueva configuración.";
case MSG_SKIPPING_SRAM_LOAD:
return "Omitiendo carga de SRAM.";
case MSG_APPENDED_DISK:
return "Disco incorporado";
case MSG_STARTING_MOVIE_PLAYBACK:
return "Iniciando reproducción.";
case MSG_FAILED_TO_REMOVE_TEMPORARY_FILE:
return "Error al borrar el archivo temporal";
case MSG_REMOVING_TEMPORARY_CONTENT_FILE:
return "Borrando archivo temporal de contenido";
case MSG_LOADED_STATE_FROM_SLOT:
return "Carga rápida desde la ranura";
case MSG_DOWNLOAD_PROGRESS:
return "Progreso de la descarga";
case MSG_COULD_NOT_PROCESS_ZIP_FILE:
return "No se ha podido procesar el archivo ZIP.";
case MSG_DOWNLOAD_COMPLETE:
return "Descarga completa";
case MSG_SCANNING_OF_DIRECTORY_FINISHED:
return "Escaneado de carpetas terminado";
case MSG_SCANNING:
return "Escaneando";
case MSG_REDIRECTING_CHEATFILE_TO:
return "Redirigiendo archivo de trucos a";
case MSG_REDIRECTING_SAVEFILE_TO:
return "Redirigiendo partida guardada a";
case MSG_REDIRECTING_SAVESTATE_TO:
return "Redirigiendo guardado rápido a";
case MSG_SHADER:
return "Shader";
case MSG_APPLYING_SHADER:
return "Aplicando shader";
case MSG_FAILED_TO_APPLY_SHADER:
return "Error al aplicar shader.";
case MSG_STARTING_MOVIE_RECORD_TO:
return "Iniciando grabación en";
case MSG_FAILED_TO_START_MOVIE_RECORD:
return "Error al iniciar la grabación.";
case MSG_STATE_SLOT:
return "Ranura de guardado rápido";
case MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT:
return "Reiniciando grabación debido al reinicio de un controlador.";
case MSG_SLOW_MOTION:
return "Cámara lenta.";
case MSG_SLOW_MOTION_REWIND:
return "Rebobinar cámara lenta.";
case MSG_REWINDING:
return "Rebobinando.";
case MSG_REWIND_REACHED_END:
return "Se ha llegado al final del búfer de rebobinado.";
default:
break;
}
+1 -4
View File
@@ -27,10 +27,7 @@
#include <stdint.h>
#include <stdlib.h>
#if defined(__llvm__) || (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408)
#define SWAP16 __builtin_bswap16
#define SWAP32 __builtin_bswap32
#elif defined(_MSC_VER)
#if defined(_MSC_VER)
#define SWAP16 _byteswap_ushort
#define SWAP32 _byteswap_ulong
#else
+8
View File
@@ -46,6 +46,11 @@ static int deferred_push_rdb_collection(menu_displaylist_info_t *info)
return menu_displaylist_push_list(info, DISPLAYLIST_PLAYLIST_COLLECTION);
}
static int deferred_push_help(menu_displaylist_info_t *info)
{
return menu_displaylist_push_list(info, DISPLAYLIST_HELP_SCREEN_LIST);
}
static int deferred_push_rdb_entry_detail(menu_displaylist_info_t *info)
{
int ret;
@@ -726,6 +731,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(menu_file_list_cbs_t *
case MENU_LABEL_MANAGEMENT:
cbs->action_deferred_push = deferred_push_management_options;
break;
case MENU_LABEL_HELP_LIST:
cbs->action_deferred_push = deferred_push_help;
break;
case MENU_LABEL_DEFERRED_CORE_LIST:
cbs->action_deferred_push = deferred_push_core_list_deferred;
break;
+113 -39
View File
@@ -28,6 +28,7 @@
#include "../menu_navigation.h"
#include "../../general.h"
#include "../../performance.h"
#include "../../retroarch.h"
#include "../../input/input_common.h"
#include "../../input/input_autodetect.h"
@@ -35,27 +36,60 @@
static int action_iterate_help(char *s, size_t len, const char *label)
{
unsigned i;
const unsigned binds[] = {
RETRO_DEVICE_ID_JOYPAD_UP,
RETRO_DEVICE_ID_JOYPAD_DOWN,
RETRO_DEVICE_ID_JOYPAD_A,
RETRO_DEVICE_ID_JOYPAD_B,
RETRO_DEVICE_ID_JOYPAD_SELECT,
RARCH_MENU_TOGGLE,
RARCH_QUIT_KEY,
RETRO_DEVICE_ID_JOYPAD_X,
RETRO_DEVICE_ID_JOYPAD_Y,
};
menu_handle_t *menu = menu_driver_get_ptr();
settings_t *settings = config_get_ptr();
menu_driver_render();
switch (menu->help_screen_type)
{
case MENU_HELP_DEFAULT:
case MENU_HELP_WELCOME:
{
static int64_t timeout_end;
int64_t timeout;
static bool timer_begin = false;
static bool timer_end = false;
int64_t current = rarch_get_time_usec();
if (!timer_begin)
{
timeout_end = rarch_get_time_usec() +
3 /* seconds */ * 1000000;
timer_begin = true;
timer_end = false;
}
timeout = (timeout_end - current) / 1000000;
menu_hash_get_help(MENU_LABEL_WELCOME_TO_RETROARCH,
s, len);
if (!timer_end && timeout <= 0)
{
timer_end = true;
timer_begin = false;
timeout_end = 0;
menu->help_screen_type = MENU_HELP_NONE;
return 1;
}
}
break;
case MENU_HELP_CONTROLS:
{
char s2[PATH_MAX_LENGTH];
const unsigned binds[] = {
RETRO_DEVICE_ID_JOYPAD_UP,
RETRO_DEVICE_ID_JOYPAD_DOWN,
RETRO_DEVICE_ID_JOYPAD_A,
RETRO_DEVICE_ID_JOYPAD_B,
RETRO_DEVICE_ID_JOYPAD_SELECT,
RETRO_DEVICE_ID_JOYPAD_START,
RARCH_MENU_TOGGLE,
RARCH_QUIT_KEY,
RETRO_DEVICE_ID_JOYPAD_X,
RETRO_DEVICE_ID_JOYPAD_Y,
};
char desc[ARRAY_SIZE(binds)][64] = {{0}};
settings_t *settings = config_get_ptr();
for (i = 0; i < ARRAY_SIZE(binds); i++)
{
@@ -67,40 +101,72 @@ static int action_iterate_help(char *s, size_t len, const char *label)
input_get_bind_string(desc[i], keybind, auto_bind, sizeof(desc[i]));
}
menu_hash_get_help(MENU_LABEL_VALUE_MENU_CONTROLS_PROLOG,
s2, sizeof(s2));
snprintf(s, len,
"Welcome to RetroArch\n"
" \n" /* strtok_r doesn't split empty strings. */
"Basic Menu controls:\n"
" Scroll (Up): %-20s\n"
" Scroll (Down): %-20s\n"
" Accept/OK: %-20s\n"
" Back: %-20s\n"
" Info: %-20s\n"
"Enter/Exit Menu: %-20s\n"
" Exit RetroArch: %-20s\n"
"Toggle Keyboard: %-20s\n"
" \n"
"To run content:\n"
"Load a libretro core (Core).\n"
"Load a content file (Load Content). \n"
" \n"
"See Path Settings to set directories \n"
"for faster access to files.\n"
" \n"
"Press Accept/OK to continue.",
desc[0], desc[1], desc[2], desc[3], desc[4], desc[5], desc[6], desc[7]);
"%s"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n"
"[%s]: "
"%-20s\n",
s2,
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP), desc[0],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN), desc[1],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM), desc[2],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK), desc[3],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO), desc[4],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_START), desc[5],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU), desc[6],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT), desc[7],
menu_hash_to_str(MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD), desc[8]
);
}
break;
case MENU_HELP_EXTRACT:
strlcpy(s, "Extracting, please wait...\n", len);
case MENU_HELP_WHAT_IS_A_CORE:
menu_hash_get_help(MENU_LABEL_VALUE_WHAT_IS_A_CORE_DESC,
s, len);
break;
case MENU_HELP_LOADING_CONTENT:
menu_hash_get_help(MENU_LABEL_LOAD_CONTENT,
s, len);
break;
case MENU_HELP_CHANGE_VIRTUAL_GAMEPAD:
menu_hash_get_help(MENU_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD_DESC,
s, len);
break;
case MENU_HELP_AUDIO_VIDEO_TROUBLESHOOTING:
menu_hash_get_help(MENU_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING_DESC,
s, len);
break;
case MENU_HELP_SCANNING_CONTENT:
menu_hash_get_help(MENU_LABEL_VALUE_HELP_SCANNING_CONTENT_DESC,
s, len);
break;
case MENU_HELP_EXTRACT:
menu_hash_get_help(MENU_LABEL_VALUE_EXTRACTING_PLEASE_WAIT,
s, len);
break;
case MENU_HELP_NONE:
default:
break;
}
return 0;
}
@@ -346,6 +412,12 @@ static enum action_iterate_type action_iterate_type(uint32_t hash)
switch (hash)
{
case MENU_LABEL_HELP:
case MENU_LABEL_HELP_CONTROLS:
case MENU_LABEL_HELP_WHAT_IS_A_CORE:
case MENU_LABEL_HELP_LOADING_CONTENT:
case MENU_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD:
case MENU_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING:
case MENU_LABEL_HELP_SCANNING_CONTENT:
return ITERATE_TYPE_HELP;
case MENU_LABEL_INFO_SCREEN:
return ITERATE_TYPE_INFO;
@@ -394,6 +466,8 @@ static int action_iterate_main(const char *label, unsigned action)
do_messagebox = true;
do_pop_stack = true;
do_post_iterate = true;
if (ret == 1)
action = MENU_ACTION_OK;
break;
case ITERATE_TYPE_BIND:
if (menu_input_bind_iterate())
+137
View File
@@ -1833,6 +1833,7 @@ static int action_ok_help(const char *path,
{
menu_displaylist_info_t info = {0};
menu_list_t *menu_list = menu_list_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu_list)
return -1;
@@ -1840,6 +1841,123 @@ static int action_ok_help(const char *path,
strlcpy(info.label,
menu_hash_to_str(MENU_LABEL_HELP),
sizeof(info.label));
menu->push_help_screen = true;
menu->help_screen_type = MENU_HELP_WELCOME;
return menu_displaylist_push_list(&info, DISPLAYLIST_HELP);
}
static int action_ok_help_controls(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
menu_displaylist_info_t info = {0};
menu_list_t *menu_list = menu_list_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu_list)
return -1;
info.list = menu_list->menu_stack;
strlcpy(info.label,
menu_hash_to_str(MENU_LABEL_HELP_CONTROLS),
sizeof(info.label));
menu->push_help_screen = true;
menu->help_screen_type = MENU_HELP_CONTROLS;
return menu_displaylist_push_list(&info, DISPLAYLIST_HELP);
}
static int action_ok_help_what_is_a_core(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
menu_displaylist_info_t info = {0};
menu_list_t *menu_list = menu_list_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu_list)
return -1;
info.list = menu_list->menu_stack;
strlcpy(info.label,
menu_hash_to_str(MENU_LABEL_HELP_WHAT_IS_A_CORE),
sizeof(info.label));
menu->push_help_screen = true;
menu->help_screen_type = MENU_HELP_WHAT_IS_A_CORE;
return menu_displaylist_push_list(&info, DISPLAYLIST_HELP);
}
static int action_ok_help_audio_video_troubleshooting(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
menu_displaylist_info_t info = {0};
menu_list_t *menu_list = menu_list_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu_list)
return -1;
info.list = menu_list->menu_stack;
strlcpy(info.label,
menu_hash_to_str(MENU_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING),
sizeof(info.label));
menu->push_help_screen = true;
menu->help_screen_type = MENU_HELP_AUDIO_VIDEO_TROUBLESHOOTING;
return menu_displaylist_push_list(&info, DISPLAYLIST_HELP);
}
static int action_ok_help_scanning_content(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
menu_displaylist_info_t info = {0};
menu_list_t *menu_list = menu_list_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu_list)
return -1;
info.list = menu_list->menu_stack;
strlcpy(info.label,
menu_hash_to_str(MENU_LABEL_HELP_SCANNING_CONTENT),
sizeof(info.label));
menu->push_help_screen = true;
menu->help_screen_type = MENU_HELP_SCANNING_CONTENT;
return menu_displaylist_push_list(&info, DISPLAYLIST_HELP);
}
static int action_ok_help_change_virtual_gamepad(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
menu_displaylist_info_t info = {0};
menu_list_t *menu_list = menu_list_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu_list)
return -1;
info.list = menu_list->menu_stack;
strlcpy(info.label,
menu_hash_to_str(MENU_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD),
sizeof(info.label));
menu->push_help_screen = true;
menu->help_screen_type = MENU_HELP_CHANGE_VIRTUAL_GAMEPAD;
return menu_displaylist_push_list(&info, DISPLAYLIST_HELP);
}
static int action_ok_help_load_content(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
menu_displaylist_info_t info = {0};
menu_list_t *menu_list = menu_list_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu_list)
return -1;
info.list = menu_list->menu_stack;
strlcpy(info.label,
menu_hash_to_str(MENU_LABEL_HELP_LOADING_CONTENT),
sizeof(info.label));
menu->push_help_screen = true;
menu->help_screen_type = MENU_HELP_LOADING_CONTENT;
return menu_displaylist_push_list(&info, DISPLAYLIST_HELP);
}
@@ -1979,6 +2097,24 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_HELP:
cbs->action_ok = action_ok_help;
break;
case MENU_LABEL_HELP_CONTROLS:
cbs->action_ok = action_ok_help_controls;
break;
case MENU_LABEL_HELP_WHAT_IS_A_CORE:
cbs->action_ok = action_ok_help_what_is_a_core;
break;
case MENU_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD:
cbs->action_ok = action_ok_help_change_virtual_gamepad;
break;
case MENU_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING:
cbs->action_ok = action_ok_help_audio_video_troubleshooting;
break;
case MENU_LABEL_HELP_SCANNING_CONTENT:
cbs->action_ok = action_ok_help_scanning_content;
break;
case MENU_LABEL_HELP_LOADING_CONTENT:
cbs->action_ok = action_ok_help_load_content;
break;
case MENU_LABEL_VIDEO_SHADER_PASS:
cbs->action_ok = action_ok_shader_pass;
break;
@@ -2022,6 +2158,7 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_ONLINE_UPDATER:
case MENU_LABEL_LOAD_CONTENT_LIST:
case MENU_LABEL_ADD_CONTENT_LIST:
case MENU_LABEL_HELP_LIST:
case MENU_LABEL_INFORMATION_LIST:
case MENU_LABEL_CONTENT_SETTINGS:
cbs->action_ok = action_ok_push_default;
+10
View File
@@ -69,6 +69,13 @@ static int action_get_title_help(const char *path, const char *label,
return 0;
}
static int action_get_title_help_list(const char *path, const char *label,
unsigned menu_type, char *s, size_t len)
{
strlcpy(s, "HELP", len);
return 0;
}
static int action_get_title_overlay(const char *path, const char *label,
unsigned menu_type, char *s, size_t len)
{
@@ -682,6 +689,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_HELP:
cbs->action_get_title = action_get_title_help;
break;
case MENU_LABEL_HELP_LIST:
cbs->action_get_title = action_get_title_help_list;
break;
case MENU_LABEL_INPUT_OVERLAY:
cbs->action_get_title = action_get_title_overlay;
break;
+60 -41
View File
@@ -42,7 +42,7 @@ typedef struct glui_handle
{
unsigned line_height;
unsigned margin;
unsigned ticker_limit;
unsigned glyph_width;
char box_message[PATH_MAX_LENGTH];
struct
@@ -308,6 +308,32 @@ static void glui_render(void)
menu_entries_set_start(menu->scroll_y / glui->line_height);
}
static void glui_render_label_value(glui_handle_t *glui, int y, unsigned width,
uint64_t index, uint32_t color, bool selected, const char *label, const char *value)
{
char label_str[PATH_MAX_LENGTH];
char value_str[PATH_MAX_LENGTH];
int value_len = strlen(value);
int ticker_limit = 0;
int usable_width = 0;
label_str[0] = '\0';
value_str[0] = '\0';
usable_width = width - (glui->margin * 2);
if (value_len * glui->glyph_width > usable_width / 2)
value_len = (usable_width/2) / glui->glyph_width;
ticker_limit = (usable_width / glui->glyph_width) - (value_len + 2);
menu_animation_ticker_str(label_str, ticker_limit, index, label, selected);
menu_animation_ticker_str(value_str, value_len, index, value, selected);
glui_blit_line(glui->margin, y, label_str, color, TEXT_ALIGN_LEFT);
glui_blit_line(width - glui->margin, y, value_str, color, TEXT_ALIGN_RIGHT);
}
static void glui_render_menu_list(glui_handle_t *glui,
menu_handle_t *menu,
uint32_t normal_color,
@@ -331,40 +357,25 @@ static void glui_render_menu_list(glui_handle_t *glui,
{
bool entry_selected;
menu_entry_t entry;
char message[PATH_MAX_LENGTH];
char entry_title_buf[PATH_MAX_LENGTH];
char type_str_buf[PATH_MAX_LENGTH];
int y = disp->header_height - menu->scroll_y + (glui->line_height * i);
if (y > (int)height || ((y + (int)glui->line_height) < 0))
continue;
message[0] = '\0';
entry_title_buf[0] = '\0';
type_str_buf[0] = '\0';
menu_entries_get(i, &entry);
entry_selected = entries->navigation.selection_ptr == i;
menu_animation_ticker_line(entry_title_buf, glui->ticker_limit,
frame_count / 40, entry.path, entry_selected);
menu_animation_ticker_line(type_str_buf, glui->ticker_limit,
frame_count / 40, entry.value, entry_selected);
strlcpy(message, entry_title_buf, sizeof(message));
glui_blit_line(glui->margin, y, message,
entry_selected ? hover_color : normal_color, TEXT_ALIGN_LEFT);
glui_blit_line(width - glui->margin, y, type_str_buf,
entry_selected ? hover_color : normal_color, TEXT_ALIGN_RIGHT);
glui_render_label_value(glui, y, width, frame_count / 40,
entry_selected ? hover_color : normal_color, entry_selected,
entry.path, entry.value);
}
}
static void glui_frame(void)
{
unsigned width, height;
unsigned width, height, ticker_limit;
char title[PATH_MAX_LENGTH];
char title_buf[PATH_MAX_LENGTH];
char title_msg[PATH_MAX_LENGTH];
@@ -429,7 +440,9 @@ static void glui_frame(void)
glui_render_quad(gl, 0, 0, width,
disp->header_height, 0.2, 0.2, 0.2, 1);
menu_animation_ticker_line(title_buf, glui->ticker_limit,
ticker_limit = (width - glui->margin*2) / glui->glyph_width -
strlen(menu_hash_to_str(MENU_VALUE_BACK)) * 2;
menu_animation_ticker_str(title_buf, ticker_limit,
frame_count / 100, title, true);
glui_blit_line(width / 2, 0, title_buf,
title_color, TEXT_ALIGN_CENTER);
@@ -505,9 +518,21 @@ static void glui_allocate_white_texture(glui_handle_t *glui)
TEXTURE_BACKEND_OPENGL, TEXTURE_FILTER_NEAREST);
}
static void glui_font(menu_handle_t *menu)
{
settings_t *settings = config_get_ptr();
const char *font_path = NULL;
font_path = settings->video.font_enable ? settings->video.font_path : NULL;
if (!menu_display_init_main_font(menu, font_path, menu->display.font.size))
RARCH_ERR("Failed to load font.");
}
static void glui_layout(menu_handle_t *menu, glui_handle_t *glui)
{
float scale_factor, glyph_width;
menu_display_t *disp = menu_display_get_ptr();
float scale_factor;
unsigned width, height;
video_driver_get_size(&width, &height);
@@ -515,19 +540,25 @@ static void glui_layout(menu_handle_t *menu, glui_handle_t *glui)
resolution, so we should be dpi aware to ensure the entries hitboxes are big
enough. On desktops, we just care about readability, with every widget size
proportional to the display width. */
#ifdef RARCH_MOBILE
scale_factor = menu_display_get_dpi();
#else
scale_factor = width / 7.5;
#endif
glui->line_height = scale_factor / 3;
glui->margin = scale_factor / 6;
menu->display.header_height = scale_factor / 3;
menu->display.font.size = scale_factor / 8;
/* we assume the average glyph aspect ratio is close to 3:4 */
glyph_width = menu->display.font.size * 3/4;
glui->ticker_limit = (width/2) / glyph_width;
glui->glyph_width = menu->display.font.size * 3/4;
glui_font(menu);
if (disp && disp->font.buf) /* calculate a more realistic ticker_limit */
{
driver_t *driver = driver_get_ptr();
int m_width = driver->font_osd_driver->get_message_width(disp->font.buf, "M", 1, 1);
if (m_width)
glui->glyph_width = m_width;
}
}
static void *glui_init(void)
@@ -717,17 +748,6 @@ static void glui_populate_entries(const char *path,
menu->scroll_y = glui_get_scroll();
}
static void glui_font(menu_handle_t *menu)
{
settings_t *settings = config_get_ptr();
const char *font_path = NULL;
font_path = settings->video.font_enable ? settings->video.font_path : NULL;
if (!menu_display_init_main_font(menu, font_path, menu->display.font.size))
RARCH_WARN("Failed to load font.");
}
static void glui_context_reset(void)
{
glui_handle_t *glui = NULL;
@@ -740,7 +760,6 @@ static void glui_context_reset(void)
glui = (glui_handle_t*)menu->userdata;
glui_layout(menu, glui);
glui_font(menu);
glui_context_bg_destroy(glui);
glui_allocate_white_texture(glui);
+3 -3
View File
@@ -466,7 +466,7 @@ static void rgui_render(void)
menu_entries_get_title(title, sizeof(title));
menu_animation_ticker_line(title_buf, RGUI_TERM_WIDTH - 10,
menu_animation_ticker_str(title_buf, RGUI_TERM_WIDTH - 10,
frame_count / RGUI_TERM_START_X, title, true);
hover_color = HOVER_COLOR(settings);
@@ -527,9 +527,9 @@ static void rgui_render(void)
menu_entry_get_value(i, entry_value, sizeof(entry_value));
menu_entry_get_path(i, entry_path, sizeof(entry_path));
menu_animation_ticker_line(entry_title_buf, RGUI_TERM_WIDTH - (entry_spacing + 1 + 2),
menu_animation_ticker_str(entry_title_buf, RGUI_TERM_WIDTH - (entry_spacing + 1 + 2),
frame_count / RGUI_TERM_START_X, entry_path, entry_selected);
menu_animation_ticker_line(type_str_buf, entry_spacing,
menu_animation_ticker_str(type_str_buf, entry_spacing,
frame_count / RGUI_TERM_START_X,
entry_value, entry_selected);
+3 -3
View File
@@ -171,7 +171,7 @@ static void rmenu_render(void)
menu_entries_get_title(title, sizeof(title));
menu_animation_ticker_line(title_buf, RMENU_TERM_WIDTH,
menu_animation_ticker_str(title_buf, RMENU_TERM_WIDTH,
frame_count / 15, title, true);
font_parms.x = POSITION_EDGE_MIN + POSITION_OFFSET;
@@ -206,9 +206,9 @@ static void rmenu_render(void)
menu_entry_get_value(i, entry_value, sizeof(entry_value));
menu_entry_get_path(i, entry_path, sizeof(entry_path));
menu_animation_ticker_line(entry_title_buf, RMENU_TERM_WIDTH - (entry_spacing + 1 + 2),
menu_animation_ticker_str(entry_title_buf, RMENU_TERM_WIDTH - (entry_spacing + 1 + 2),
frame_count / 15, entry_path, entry_selected);
menu_animation_ticker_line(type_str_buf, entry_spacing,
menu_animation_ticker_str(type_str_buf, entry_spacing,
frame_count / 15, entry_value, entry_selected);
snprintf(message, sizeof(message), "%c %s",
+1 -1
View File
@@ -560,7 +560,7 @@ static void rmenu_xui_render(void)
menu_entries_get_title(title, sizeof(title));
mbstowcs(strw_buffer, title, sizeof(strw_buffer) / sizeof(wchar_t));
XuiTextElementSetText(m_menutitle, strw_buffer);
menu_animation_ticker_line(title, RXUI_TERM_WIDTH - 3, (unsigned int)frame_count / 15, title, true);
menu_animation_ticker_str(title, RXUI_TERM_WIDTH - 3, (unsigned int)frame_count / 15, title, true);
}
if (XuiHandleIsValid(m_menutitle))
+2 -2
View File
@@ -1388,7 +1388,7 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl,
ticker_limit = 70;
}
menu_animation_ticker_line(name, ticker_limit,
menu_animation_ticker_str(name, ticker_limit,
frame_count / 20, entry.path,
(i == current));
@@ -1398,7 +1398,7 @@ static void xmb_draw_items(xmb_handle_t *xmb, gl_t *gl,
xmb->margins.screen.top + node->y + xmb->margins.label.top,
1, node->label_alpha, TEXT_ALIGN_LEFT);
menu_animation_ticker_line(value, 35,
menu_animation_ticker_str(value, 35,
frame_count / 20, entry.value,
(i == current));
+1 -1
View File
@@ -248,7 +248,7 @@ const char *menu_hash_to_str_de(uint32_t hash)
case MENU_LABEL_VALUE_UI_COMPANION_START_ON_BOOT:
return "UI-Companion beim Hochfahren starten";
case MENU_LABEL_VALUE_UI_MENUBAR_ENABLE:
return "Menüleiste (Hint)";
return "Menüleiste";
case MENU_LABEL_VALUE_ARCHIVE_MODE:
return "Verknüpfte Aktion bei Archivdateien";
case MENU_LABEL_VALUE_NETWORK_CMD_ENABLE:
+1951 -7
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -271,7 +271,7 @@ const char *menu_hash_to_str_fr(uint32_t hash)
case MENU_LABEL_VALUE_UI_COMPANION_START_ON_BOOT:
return "UI Companion Start On Boot";
case MENU_LABEL_VALUE_UI_MENUBAR_ENABLE:
return "Menubar (Hint)";
return "Menubar";
case MENU_LABEL_VALUE_ARCHIVE_MODE:
return "Mode d'ouverture des archives";
case MENU_LABEL_VALUE_NETWORK_CMD_ENABLE:
+1 -1
View File
@@ -236,7 +236,7 @@ const char *menu_hash_to_str_nl(uint32_t hash)
case MENU_LABEL_VALUE_UI_COMPANION_START_ON_BOOT:
return "UI Companion Start Tijdens Boot";
case MENU_LABEL_VALUE_UI_MENUBAR_ENABLE:
return "Menubalk (Hint)";
return "Menubalk";
case MENU_LABEL_VALUE_ARCHIVE_MODE:
return "Archief Bestand Associatie";
case MENU_LABEL_VALUE_NETWORK_CMD_ENABLE:
+1 -1
View File
@@ -256,7 +256,7 @@ const char *menu_hash_to_str_pl(uint32_t hash)
case MENU_LABEL_VALUE_UI_COMPANION_START_ON_BOOT:
return "UI Companion Start On Boot";
case MENU_LABEL_VALUE_UI_MENUBAR_ENABLE:
return "Pasek menu (Hint)";
return "Pasek menu";
case MENU_LABEL_VALUE_ARCHIVE_MODE:
return "Archive File Assocation Action";
case MENU_LABEL_VALUE_NETWORK_CMD_ENABLE:
+1 -1
View File
@@ -64,7 +64,7 @@ const char *menu_hash_to_str_pt(uint32_t hash)
case MENU_LABEL_VALUE_CONFIGURATION_SETTINGS:
return "Configurações";
case MENU_LABEL_VALUE_CORE_SETTINGS:
return "Atualização Online";
return "Core";
case MENU_LABEL_VALUE_VIDEO_SETTINGS:
return "Vídeo";
case MENU_LABEL_VALUE_LOGGING_SETTINGS:
+172 -8
View File
@@ -26,6 +26,20 @@ static const char *menu_hash_to_str_us_label(uint32_t hash)
{
switch (hash)
{
case MENU_LABEL_HELP_SCANNING_CONTENT:
return "help_scanning_content";
case MENU_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING:
return "help_audio_video_troubleshooting";
case MENU_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD:
return "help_change_virtual_gamepad";
case MENU_LABEL_HELP_WHAT_IS_A_CORE:
return "help_what_is_a_core";
case MENU_LABEL_HELP_LOADING_CONTENT:
return "help_loading_content";
case MENU_LABEL_HELP_LIST:
return "help_list";
case MENU_LABEL_HELP_CONTROLS:
return "help_controls";
case MENU_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE:
return "deferred_archive_open_detect_core";
case MENU_LABEL_DEFERRED_ARCHIVE_OPEN:
@@ -636,6 +650,40 @@ const char *menu_hash_to_str_us(uint32_t hash)
switch (hash)
{
case MENU_LABEL_VALUE_HELP_SCANNING_CONTENT:
return "Scanning For Content";
case MENU_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING:
return "Audio/Video Troubleshooting";
case MENU_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD:
return "Changing Virtual Gamepad Overlay";
case MENU_LABEL_VALUE_HELP_WHAT_IS_A_CORE:
return "What Is A Core?";
case MENU_LABEL_VALUE_HELP_LOADING_CONTENT:
return "Loading Content";
case MENU_LABEL_VALUE_HELP_LIST:
return "Help";
case MENU_LABEL_VALUE_HELP_CONTROLS:
return "Basic Menu Controls";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS:
return "Basic menu controls";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP:
return "Scroll Up";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN:
return "Scroll Down";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM:
return "Confirm/OK";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK:
return "Back";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_START:
return "Defaults";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO:
return "Info";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU:
return "Toggle Menu";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT:
return "Quit";
case MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD:
return "Toggle Keyboard";
case MENU_LABEL_VALUE_OPEN_ARCHIVE:
return "Open Archive As Folder";
case MENU_LABEL_VALUE_LOAD_ARCHIVE:
@@ -869,7 +917,7 @@ const char *menu_hash_to_str_us(uint32_t hash)
case MENU_LABEL_VALUE_UI_COMPANION_START_ON_BOOT:
return "UI Companion Start On Boot";
case MENU_LABEL_VALUE_UI_MENUBAR_ENABLE:
return "Menubar (Hint)";
return "Menubar";
case MENU_LABEL_VALUE_ARCHIVE_MODE:
return "Archive File Assocation Action";
case MENU_LABEL_VALUE_NETWORK_CMD_ENABLE:
@@ -1101,7 +1149,7 @@ const char *menu_hash_to_str_us(uint32_t hash)
case MENU_LABEL_VALUE_QUIT_RETROARCH:
return "Quit RetroArch";
case MENU_LABEL_VALUE_HELP:
return "Help";
return "help";
case MENU_LABEL_VALUE_SAVE_NEW_CONFIG:
return "Save New Config";
case MENU_LABEL_VALUE_RESTART_CONTENT:
@@ -1492,6 +1540,75 @@ int menu_hash_get_help_us(uint32_t hash, char *s, size_t len)
switch (hash)
{
case MENU_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING_DESC:
snprintf(s, len,
"RetroArch relies on an unique form of\n"
"audio/video synchronization where it needs to be\n"
"calibrated against the refresh rate of your\n"
"display for best performance results.\n"
" \n"
"If you experience any audio crackling or video\n"
"tearing, usually it means that you need to\n"
"calibrate the settings. Some choices below:\n"
" \n"
"a) Go to '%s' -> '%s', and enable\n"
"'Threaded Video'. Refresh rate will not matter\n"
"in this mode, framerate will be higher,\n"
"but video might be less smooth.\n"
"b) Go to '%s' -> '%s', and look at\n"
"'%s'. Let it run for\n"
"2048 frames, then press 'OK'.",
menu_hash_to_str(MENU_LABEL_VALUE_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_VIDEO_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_VIDEO_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_VIDEO_REFRESH_RATE_AUTO)
);
break;
case MENU_LABEL_VALUE_HELP_SCANNING_CONTENT_DESC:
snprintf(s, len,
"To scan for content, go to '%s' and\n"
"select either '%s' or %s'.\n"
" \n"
"Files will be compared to database entries.\n"
"If there is a match, it will add an entry\n"
"to a collection.\n"
" \n"
"You can then easily access this content by\n"
"going to '%s' ->\n"
"'%s'\n"
"instead of having to go through the\n"
"filebrowser everytime.\n"
" \n"
"NOTE: Content for some cores might still not be\n"
"scannable. Examples include: PlayStation,\n"
"MAME, FBA, and maybe others."
,
menu_hash_to_str(MENU_LABEL_VALUE_ADD_CONTENT_LIST),
menu_hash_to_str(MENU_LABEL_VALUE_SCAN_DIRECTORY),
menu_hash_to_str(MENU_LABEL_VALUE_SCAN_FILE),
menu_hash_to_str(MENU_LABEL_VALUE_LOAD_CONTENT_LIST),
menu_hash_to_str(MENU_LABEL_VALUE_CONTENT_COLLECTION_LIST)
);
break;
case MENU_LABEL_VALUE_MENU_CONTROLS_PROLOG:
snprintf(s, len,
"You can use the following controls below \n"
"on either your gamepad or keyboard in order\n"
"to control the menu: \n"
" \n"
);
break;
case MENU_LABEL_VALUE_EXTRACTING_PLEASE_WAIT:
strlcpy(s, "Extracting, please wait...\n", len);
break;
case MENU_LABEL_WELCOME_TO_RETROARCH:
snprintf(s, len,
"Welcome to RetroArch\n"
"\n"
"For further information, go to Help.\n"
);
break;
case MENU_LABEL_INPUT_DRIVER:
driver_hash = menu_hash_calculate(settings->input.driver);
@@ -1543,18 +1660,17 @@ int menu_hash_get_help_us(uint32_t hash, char *s, size_t len)
"Browse for content. \n"
" \n"
"To load content, you need a \n"
"libretro core to use, and a \n"
"content file. \n"
"'Core' to use, and a content file.\n"
" \n"
"To control where the menu starts \n"
" to browse for content, set \n"
"Browser Directory. If not set, \n"
"it will start in root. \n"
"'File Browser Directory'. \n"
"If not set, it will start in root. \n"
" \n"
"The browser will filter out \n"
"extensions for the last core set \n"
"in 'Core', and use that core when \n"
"content is loaded."
"in 'Load Core', and use that core \n"
"when content is loaded."
);
break;
case MENU_LABEL_CORE_LIST:
@@ -2426,6 +2542,54 @@ int menu_hash_get_help_us(uint32_t hash, char *s, size_t len)
"Positive X axis is right. \n"
"Positive Y axis is down.");
break;
case MENU_LABEL_VALUE_WHAT_IS_A_CORE_DESC:
snprintf(s, len,
"RetroArch by itself does nothing. \n"
" \n"
"To make it do things, you need to \n"
"load a program into it. \n"
"\n"
"We call such a program 'Libretro core', \n"
"or 'core' in short. \n"
" \n"
"To load a core, select one from\n"
"'Load Core'.\n"
" \n"
#ifdef HAVE_NETWORKING
"You can obtain cores in several ways: \n"
"* Download them by going to\n"
"'%s' -> '%s'.\n"
"* Manually move them over to\n"
"'%s'.",
menu_hash_to_str(MENU_LABEL_VALUE_ONLINE_UPDATER),
menu_hash_to_str(MENU_LABEL_VALUE_CORE_UPDATER_LIST),
menu_hash_to_str(MENU_LABEL_VALUE_LIBRETRO_DIR_PATH)
#else
"You can obtain cores by\n"
"manually moving them over to\n"
"'%s'.",
menu_hash_to_str(MENU_LABEL_VALUE_ONLINE_UPDATER),
menu_hash_to_str(MENU_LABEL_VALUE_CORE_UPDATER_LIST),
menu_hash_to_str(MENU_LABEL_VALUE_LIBRETRO_DIR_PATH)
#endif
);
break;
case MENU_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD_DESC:
snprintf(s, len,
"You can change the virtual gamepad overlay\n"
"by going to '%s' -> '%s'."
" \n"
"From there you can change the overlay,\n"
"change the size and opacity of the buttons, etc.\n"
" \n"
"NOTE: By default, virtual gamepad overlays are\n"
"hidden when in the menu.\n"
"If you'd like to change this behavior,\n"
"you can set '%s' to false.",
menu_hash_to_str(MENU_LABEL_VALUE_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_OVERLAY_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU)
);
default:
if (s[0] == '\0')
strlcpy(s, menu_hash_to_str(MENU_LABEL_VALUE_NO_INFORMATION_AVAILABLE), len);
+1 -1
View File
@@ -229,7 +229,7 @@ void *menu_init(const void *data)
#endif
menu->push_help_screen = settings->menu_show_start_screen;
menu->help_screen_type = MENU_HELP_DEFAULT;
menu->help_screen_type = MENU_HELP_WELCOME;
settings->menu_show_start_screen = false;
#if 0
+40 -30
View File
@@ -545,8 +545,42 @@ bool menu_animation_update(menu_animation_t *anim, float dt)
return true;
}
void menu_animation_ticker_generic(uint64_t idx, int max_width,
int *offset, int *width)
{
int ticker_period, phase, phase_left_stop;
int phase_left_moving, phase_right_stop;
int left_offset, right_offset;
*offset = 0;
if (*width <= max_width)
return;
ticker_period = 2 * (*width - max_width) + 4;
phase = idx % ticker_period;
phase_left_stop = 2;
phase_left_moving = phase_left_stop + (*width - max_width);
phase_right_stop = phase_left_moving + 2;
left_offset = phase - phase_left_stop;
right_offset = (*width - max_width) - (phase - phase_right_stop);
if (phase < phase_left_stop)
*offset = 0;
else if (phase < phase_left_moving)
*offset = -left_offset;
else if (phase < phase_right_stop)
*offset = -(*width - max_width);
else
*offset = -right_offset;
*width = max_width;
}
/**
* menu_animation_ticker_line:
* menu_animation_ticker_str:
* @s : buffer to write new message line to.
* @len : length of buffer @input.
* @idx : Index. Will be used for ticker logic.
@@ -556,14 +590,12 @@ bool menu_animation_update(menu_animation_t *anim, float dt)
* Take the contents of @str and apply a ticker effect to it,
* and write the results in @s.
**/
void menu_animation_ticker_line(char *s, size_t len, uint64_t idx,
void menu_animation_ticker_str(char *s, size_t len, uint64_t idx,
const char *str, bool selected)
{
unsigned ticker_period, phase, phase_left_stop;
unsigned phase_left_moving, phase_right_stop;
unsigned left_offset, right_offset;
size_t str_len = strlen(str);
menu_animation_t *anim = menu_animation_get_ptr();
int str_len = strlen(str);
int offset = 0;
if (str_len <= len)
{
@@ -578,31 +610,9 @@ void menu_animation_ticker_line(char *s, size_t len, uint64_t idx,
return;
}
/* Wrap long strings in options with some kind of ticker line. */
ticker_period = 2 * (str_len - len) + 4;
phase = idx % ticker_period;
menu_animation_ticker_generic(idx, len, &offset, &str_len);
phase_left_stop = 2;
phase_left_moving = phase_left_stop + (str_len - len);
phase_right_stop = phase_left_moving + 2;
left_offset = phase - phase_left_stop;
right_offset = (str_len - len) - (phase - phase_right_stop);
/* Ticker period:
* [Wait at left (2 ticks),
* Progress to right(type_len - w),
* Wait at right (2 ticks),
* Progress to left].
*/
if (phase < phase_left_stop)
strlcpy(s, str, len + 1);
else if (phase < phase_left_moving)
strlcpy(s, str + left_offset, len + 1);
else if (phase < phase_right_stop)
strlcpy(s, str + str_len - len, len + 1);
else
strlcpy(s, str + right_offset, len + 1);
strlcpy(s, str - offset, str_len + 1);
anim->is_active = true;
}
+5 -2
View File
@@ -135,7 +135,7 @@ bool menu_animation_update(
float dt);
/**
* menu_animation_ticker_line:
* menu_animation_ticker_str:
* @s : buffer to write new message line to.
* @len : length of buffer @input.
* @idx : Index. Will be used for ticker logic.
@@ -145,9 +145,12 @@ bool menu_animation_update(
* Take the contents of @str and apply a ticker effect to it,
* and write the results in @s.
**/
void menu_animation_ticker_line(char *s, size_t len, uint64_t tick,
void menu_animation_ticker_str(char *s, size_t len, uint64_t tick,
const char *str, bool selected);
void menu_animation_ticker_generic(uint64_t idx, int max_width,
int *offset, int *width);
menu_animation_t *menu_animation_get_ptr(void);
void menu_animation_update_time(menu_animation_t *anim);
+33
View File
@@ -2176,6 +2176,39 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type)
menu_navigation_clear(nav, true);
menu_entries_set_refresh();
break;
case DISPLAYLIST_HELP_SCREEN_LIST:
menu_list_clear(info->list);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_HELP_CONTROLS),
menu_hash_to_str(MENU_LABEL_HELP_CONTROLS),
0, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_HELP_WHAT_IS_A_CORE),
menu_hash_to_str(MENU_LABEL_HELP_WHAT_IS_A_CORE),
0, 0, 0);
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_HELP_LOADING_CONTENT),
menu_hash_to_str(MENU_LABEL_HELP_LOADING_CONTENT),
0, 0, 0);
#ifdef HAVE_LIBRETRODB
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_HELP_SCANNING_CONTENT),
menu_hash_to_str(MENU_LABEL_HELP_SCANNING_CONTENT),
0, 0, 0);
#endif
#ifdef HAVE_OVERLAY
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD),
menu_hash_to_str(MENU_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD),
0, 0, 0);
#endif
menu_list_push(info->list,
menu_hash_to_str(MENU_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING),
menu_hash_to_str(MENU_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING),
0, 0, 0);
need_refresh = true;
need_push = true;
break;
case DISPLAYLIST_HELP:
menu_list_push(info->list, info->path, info->label, info->type, info->directory_ptr, 0);
menu->push_help_screen = false;
+1
View File
@@ -32,6 +32,7 @@ enum
DISPLAYLIST_NONE = 0,
DISPLAYLIST_INFO,
DISPLAYLIST_HELP,
DISPLAYLIST_HELP_SCREEN_LIST,
DISPLAYLIST_MAIN_MENU,
DISPLAYLIST_GENERIC,
DISPLAYLIST_SETTINGS,
+8 -1
View File
@@ -52,8 +52,15 @@ typedef enum
typedef enum
{
MENU_HELP_DEFAULT = 0,
MENU_HELP_NONE = 0,
MENU_HELP_WELCOME,
MENU_HELP_EXTRACT,
MENU_HELP_CONTROLS,
MENU_HELP_LOADING_CONTENT,
MENU_HELP_WHAT_IS_A_CORE,
MENU_HELP_CHANGE_VIRTUAL_GAMEPAD,
MENU_HELP_AUDIO_VIDEO_TROUBLESHOOTING,
MENU_HELP_SCANNING_CONTENT,
MENU_HELP_LAST
} menu_help_type_t;
+43
View File
@@ -22,6 +22,35 @@
extern "C" {
#endif
#define MENU_LABEL_VALUE_MENU_CONTROLS_PROLOG 0x72674cdfU
#define MENU_LABEL_VALUE_HELP_WHAT_IS_A_CORE 0xf3b0f77eU
#define MENU_LABEL_HELP_WHAT_IS_A_CORE 0x83fcbc44U
#define MENU_LABEL_HELP_LOADING_CONTENT 0x231d8245U
#define MENU_LABEL_VALUE_HELP_LOADING_CONTENT 0x70bab027U
#define MENU_LABEL_HELP_LIST 0x006af669U
#define MENU_LABEL_VALUE_HELP_LIST 0x6c57426aU
#define MENU_LABEL_VALUE_HELP_CONTROLS 0xe5c9f6a2U
#define MENU_LABEL_HELP_CONTROLS 0x04859221U
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS 0x7c05810eU
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_UP 0x8c2f7b00U
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_SCROLL_DOWN 0x55f0f413U
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_CONFIRM 0x40e50edbU
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK 0xd834d89eU
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_START 0xe00df0fbU
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_INFO 0xd838e6f9U
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_MENU 0x98159c23U
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_QUIT 0xd83d6830U
#define MENU_LABEL_VALUE_BASIC_MENU_CONTROLS_TOGGLE_KEYBOARD 0xe408c2ffU
#define MENU_LABEL_VALUE_EXTRACTING_PLEASE_WAIT 0xec5a348bU
#define MENU_LABEL_WELCOME_TO_RETROARCH 0xbcff0b3cU
#define MENU_LABEL_DEFERRED_ARCHIVE_ACTION_DETECT_CORE 0xdc9c0064U
#define MENU_LABEL_DEFERRED_ARCHIVE_ACTION 0x7faf0284U
#define MENU_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE 0xd9452498U
@@ -999,6 +1028,20 @@ extern "C" {
#define MENU_LABEL_VALUE_OPEN_ARCHIVE 0x96da22b9U
#define MENU_LABEL_VALUE_LOAD_ARCHIVE 0xe19ca6c7U
#define MENU_LABEL_VALUE_WHAT_IS_A_CORE_DESC 0xc832957eU
#define MENU_LABEL_HELP_CHANGE_VIRTUAL_GAMEPAD 0x6e66ef07U
#define MENU_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD 0x27ed0204U
#define MENU_LABEL_VALUE_HELP_CHANGE_VIRTUAL_GAMEPAD_DESC 0x9d0e79dbU
#define MENU_LABEL_HELP_AUDIO_VIDEO_TROUBLESHOOTING 0xd44d395cU
#define MENU_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING 0xd0e5c3ffU
#define MENU_LABEL_VALUE_HELP_AUDIO_VIDEO_TROUBLESHOOTING_DESC 0x60031d7aU
#define MENU_LABEL_HELP_SCANNING_CONTENT 0x1dec52b8U
#define MENU_LABEL_VALUE_HELP_SCANNING_CONTENT 0x74b36f11U
#define MENU_LABEL_VALUE_HELP_SCANNING_CONTENT_DESC 0xac947056U
const char *menu_hash_to_str_de(uint32_t hash);
int menu_hash_get_help_de(uint32_t hash, char *s, size_t len);
+12 -11
View File
@@ -2502,6 +2502,16 @@ static bool setting_append_list_main_menu_options(
START_GROUP(group_info,main_menu, parent_group);
START_SUB_GROUP(list, list_info, "State", group_info.name, subgroup_info, parent_group);
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY))
{
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_CONTENT_SETTINGS),
group_info.name,
subgroup_info.name,
parent_group);
}
#if defined(HAVE_DYNAMIC) || defined(HAVE_LIBRETRO_MANAGEMENT)
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_CORE_LIST),
@@ -2557,15 +2567,6 @@ static bool setting_append_list_main_menu_options(
parent_group);
#endif
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY))
{
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_CONTENT_SETTINGS),
menu_hash_to_str(MENU_LABEL_VALUE_CONTENT_SETTINGS),
group_info.name,
subgroup_info.name,
parent_group);
}
if (mask & SL_FLAG_MAIN_MENU_SETTINGS)
{
@@ -2610,8 +2611,8 @@ static bool setting_append_list_main_menu_options(
menu_settings_list_current_add_cmd(list, list_info, EVENT_CMD_MENU_SAVE_CONFIG);
CONFIG_ACTION(
menu_hash_to_str(MENU_LABEL_HELP),
menu_hash_to_str(MENU_LABEL_VALUE_HELP),
menu_hash_to_str(MENU_LABEL_HELP_LIST),
menu_hash_to_str(MENU_LABEL_VALUE_HELP_LIST),
group_info.name,
subgroup_info.name,
parent_group);
+23 -11
View File
@@ -61,7 +61,6 @@
char orig_savestate_dir[PATH_MAX_LENGTH];
char orig_savefile_dir[PATH_MAX_LENGTH];
bool orig_system_dir_empty = false;
/* Descriptive names for options without short variant. Please keep the name in
sync with the option name. Order does not matter. */
@@ -314,11 +313,14 @@ static void set_special_paths(char **argv, unsigned num_content)
/* If this is already set,
* do not overwrite it as this was initialized before in
* a menu or otherwise. */
if (settings->system_directory[0] == '\0')
orig_system_dir_empty = true;
if (!*settings->system_directory)
if (!settings->system_directory || settings->system_directory[0] == '\0')
{
RARCH_WARN("SYSTEM DIR is empty, assume CONTENT DIR %s\n",argv[0]);
fill_pathname_basedir(settings->system_directory, argv[0],
sizeof(settings->system_directory));
}
else
settings->system_in_content_dir = false;
}
void set_paths_redirect(const char *path)
@@ -355,7 +357,7 @@ void set_paths_redirect(const char *path)
}
/* per-core states: append the library_name to the save location */
if (settings->sort_savestates_enable)
if (settings->sort_savestates_enable && global->savefile_dir[0] != '\0')
{
strlcpy(orig_savestate_dir,
global->savestate_dir,
@@ -429,12 +431,14 @@ void rarch_set_paths(const char *path)
/* If this is already set, do not overwrite it
* as this was initialized before in a menu or otherwise. */
if (*settings->system_directory)
return;
if (settings->system_directory[0] == '\0')
orig_system_dir_empty = true;
fill_pathname_basedir(settings->system_directory, path,
sizeof(settings->system_directory));
if (!settings->system_directory || settings->system_directory[0] == '\0')
{
RARCH_WARN("SYSTEM DIR is empty, assume CONTENT DIR %s\n",path);
fill_pathname_basedir(settings->system_directory, path,
sizeof(settings->system_directory));
}
else
settings->system_in_content_dir = false;
}
@@ -1398,6 +1402,10 @@ void rarch_main_set_state(unsigned cmd)
menu_entries_set_refresh();
menu_driver_set_alive();
#endif
#ifdef HAVE_OVERLAY
if (settings->input.overlay_hide_in_menu)
event_command(EVENT_CMD_OVERLAY_DEINIT);
#endif
break;
case RARCH_ACTION_STATE_LOAD_CONTENT:
@@ -1449,6 +1457,10 @@ void rarch_main_set_state(unsigned cmd)
system->key_event = global->frontend_key_event;
#endif
video_driver_set_texture_enable(false, false);
#ifdef HAVE_OVERLAY
if (settings && settings->input.overlay_hide_in_menu)
event_command(EVENT_CMD_OVERLAY_INIT);
#endif
break;
case RARCH_ACTION_STATE_QUIT:
if (global)
+4 -10
View File
@@ -424,18 +424,11 @@ static void do_state_check_menu_toggle(settings_t *settings, global_t *global)
if (menu_driver_alive())
{
if (global->main_is_init && (global->core_type != CORE_TYPE_DUMMY))
{
rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING_FINISHED);
if (settings->input.overlay_hide_in_menu)
event_command(EVENT_CMD_OVERLAY_INIT);
}
return;
}
rarch_main_set_state(RARCH_ACTION_STATE_MENU_RUNNING);
if (settings->input.overlay_hide_in_menu)
event_command(EVENT_CMD_OVERLAY_DEINIT);
}
#endif
@@ -619,8 +612,8 @@ static INLINE int time_to_exit(driver_t *driver, global_t *global,
{
const video_driver_t *video = driver ? (const video_driver_t*)driver->video : NULL;
rarch_system_info_t *system = rarch_system_info_get_ptr();
bool shutdown_pressed = system->shutdown;
bool video_alive = video->alive(driver->video_data);
bool shutdown_pressed = system && system->shutdown;
bool video_alive = video && video->alive(driver->video_data);
bool movie_end = (global->bsv.movie_end && global->bsv.eof_exit);
uint64_t frame_count = video_driver_get_frame_count();
bool frame_count_end = (runloop->frames.video.max &&
@@ -761,7 +754,8 @@ static INLINE retro_input_t input_keys_pressed(driver_t *driver,
global->turbo_count++;
driver->block_libretro_input = check_block_hotkey(driver,
settings, input_driver_key_pressed(RARCH_ENABLE_HOTKEY));
settings, driver->input->key_pressed(
driver->input_data, RARCH_ENABLE_HOTKEY));
for (i = 0; i < settings->input.max_users; i++)
{
+36
View File
@@ -268,6 +268,42 @@ static void poll_iteration(void)
}
}
- (IBAction)openCore:(id)sender {
NSOpenPanel* panel = (NSOpenPanel*)[NSOpenPanel openPanel];
#if defined(MAC_OS_X_VERSION_10_6)
[panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result)
{
[[NSApplication sharedApplication] stopModal];
if (result == NSOKButton && panel.URL)
{
menu_handle_t *menu = menu_driver_get_ptr();
global_t *global = global_get_ptr();
settings_t *settings = config_get_ptr();
NSURL *url = (NSURL*)panel.URL;
NSString *__core = url.path;
if (__core)
{
strlcpy(settings->libretro, __core.UTF8String, sizeof(settings->libretro));
ui_companion_event_command(EVENT_CMD_LOAD_CORE);
if (menu->load_no_content && settings->core.set_supports_no_game_enable)
{
*global->fullpath = '\0';
menu_common_load_content(false, CORE_TYPE_PLAIN);
}
}
else
[self performSelector:@selector(chooseCore) withObject:nil afterDelay:.5f];
}
}];
#else
[panel beginSheetForDirectory:nil file:nil modalForWindopw:[self window] modalDelegate:self didEndSelector:@selector(didEndSaveSheet:returnCode:contextInfo:) contextInfo:NULL];
#endif
[[NSApplication sharedApplication] runModalForWindow:panel];
}
- (void)openDocument:(id)sender
{
NSOpenPanel* panel = (NSOpenPanel*)[NSOpenPanel openPanel];
+1 -1
View File
@@ -2,7 +2,7 @@
<app version="1">
<name>RetroArch</name>
<coder>Libretro</coder>
<version>1.2.1</version>
<version>1.2.2</version>
<release_date>2012-2015</release_date>
<short_description>The cross-platform entertainment system</short_description>
<long_description>A port of RetroArch to the GameCube/Wii.</long_description>