mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-08 08:10:30 -10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
589b92cc99 | ||
|
|
e223821c22 | ||
|
|
f073739970 | ||
|
|
0bbb0d6913 | ||
|
|
c56f1403e5 | ||
|
|
1fab41ad63 | ||
|
|
f3f238381f | ||
|
|
49931f4df7 | ||
|
|
d06bd1870e | ||
|
|
2f36994f67 | ||
|
|
5cd9fb1da2 | ||
|
|
99e1a9b297 | ||
|
|
60f681f5f8 | ||
|
|
b886f7ab96 | ||
|
|
727e71d206 | ||
|
|
824c647377 | ||
|
|
5c258a52f5 | ||
|
|
0bc2a86fb5 | ||
|
|
8ee4fd9c15 | ||
|
|
cb9deedbf2 | ||
|
|
8bf42618d9 | ||
|
|
cf915d6524 | ||
|
|
0961446b19 | ||
|
|
09b9683e26 | ||
|
|
88caa51a5e | ||
|
|
eba3506b55 | ||
|
|
5a324c1dac | ||
|
|
6cb42bde29 | ||
|
|
d9a72d9b5c | ||
|
|
fd33f2153a | ||
|
|
e35fab5dc8 | ||
|
|
f02f1ebc8f | ||
|
|
5bc03fb3a8 | ||
|
|
edac6e0afc | ||
|
|
7ad1beeb81 | ||
|
|
a54a4d6cbe | ||
|
|
ffc075166e | ||
|
|
34c2791fa4 | ||
|
|
b9831cdc14 | ||
|
|
09ee27337c | ||
|
|
67c5d14900 | ||
|
|
31e76e4329 | ||
|
|
b3bb7def66 | ||
|
|
a86e4304b4 | ||
|
|
a919c26b81 | ||
|
|
b45c8bf916 | ||
|
|
280fab6cab | ||
|
|
ef1b066b64 | ||
|
|
d3b1eef196 | ||
|
|
34be1b9c9c | ||
|
|
6636fbaf15 | ||
|
|
f48c31cf68 | ||
|
|
ac9d54032f | ||
|
|
d725ff9738 | ||
|
|
ab55ed7908 | ||
|
|
7f3424ab15 | ||
|
|
40541d60c9 | ||
|
|
673e2ba57d | ||
|
|
4e64eac514 | ||
|
|
3222351ef0 | ||
|
|
11c3e3f4ff | ||
|
|
f7a443b4e9 | ||
|
|
a06dd9c3a2 | ||
|
|
450c665619 | ||
|
|
8162b77bae | ||
|
|
a2af5252c1 | ||
|
|
f1d8f98c90 | ||
|
|
63582f83b1 | ||
|
|
95da20190a | ||
|
|
eeeba3f343 | ||
|
|
e4da044c99 | ||
|
|
d10bb24328 | ||
|
|
f938c75e0b | ||
|
|
b298b2d4f0 | ||
|
|
a5f5e34e21 | ||
|
|
f5566cbe3b | ||
|
|
a73f91e68a | ||
|
|
bad3238ac7 | ||
|
|
badf8bdaad | ||
|
|
2a1f2b81c2 | ||
|
|
ca682d38eb | ||
|
|
b717828cf0 | ||
|
|
637c977b45 | ||
|
|
5ffd48217c | ||
|
|
0cdde16e2d | ||
|
|
ec00f709f7 | ||
|
|
b217bbad24 | ||
|
|
06838d044f | ||
|
|
615b8b39f1 | ||
|
|
9b019dbc1e | ||
|
|
eb406c7a91 | ||
|
|
f43be22e2d | ||
|
|
0e6ec34255 | ||
|
|
16c8fc35eb |
No files matched your search
@@ -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 \
|
||||
|
||||
@@ -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>
|
||||
@@ -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.
@@ -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
@@ -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>
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
+4
-4
@@ -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
@@ -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
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
Vendored
+514
-47
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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) \
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef PACKAGE_VERSION
|
||||
#define PACKAGE_VERSION "1.2.1"
|
||||
#define PACKAGE_VERSION "1.2.2"
|
||||
#endif
|
||||
|
||||
/* Platform-specific headers */
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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())
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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
@@ -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);
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
@@ -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));
|
||||
|
||||
|
||||
@@ -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
File diff suppressed because it is too large.
Load diff
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
@@ -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++)
|
||||
{
|
||||
|
||||
@@ -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
@@ -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>
|
||||
|
||||
Reference in new issue
Block a user