mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-08 08:10:30 -10:00
Compare commits
229
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36802f7133 | ||
|
|
ca782bd015 | ||
|
|
7b3aaa6bbb | ||
|
|
16d12e804c | ||
|
|
25be09acd3 | ||
|
|
621e220177 | ||
|
|
a305a48a11 | ||
|
|
877a7f8d6c | ||
|
|
702bc18128 | ||
|
|
afe68f9cd8 | ||
|
|
3ecde62930 | ||
|
|
ab7c2f23cf | ||
|
|
0554e3cb3d | ||
|
|
c9dcc18fa4 | ||
|
|
43c521de44 | ||
|
|
4ef5eb1eb2 | ||
|
|
1a07476138 | ||
|
|
3f2ba2e791 | ||
|
|
9dc963e15a | ||
|
|
fb28c79e13 | ||
|
|
1e751d00ea | ||
|
|
548c5dc925 | ||
|
|
9c100ded3a | ||
|
|
5160f35bd8 | ||
|
|
34d3641d0a | ||
|
|
4198a0d3a8 | ||
|
|
8f0ef54455 | ||
|
|
e92331cf1f | ||
|
|
3a3c4f60bf | ||
|
|
19a8a815f0 | ||
|
|
35bf716766 | ||
|
|
3883616d93 | ||
|
|
de0b34aa0a | ||
|
|
e14fc1b087 | ||
|
|
53d07b30cc | ||
|
|
0b294faa71 | ||
|
|
d995fa045a | ||
|
|
5ed60cde04 | ||
|
|
bb27496e2e | ||
|
|
9b8c596057 | ||
|
|
30555f8132 | ||
|
|
a319db9119 | ||
|
|
b5eabf633a | ||
|
|
a27912b816 | ||
|
|
156d3629e6 | ||
|
|
4f9a3f6813 | ||
|
|
3b6b067fe5 | ||
|
|
1ac544b612 | ||
|
|
e3a78e0ecf | ||
|
|
58e6ca9ad4 | ||
|
|
0c40b2b3ef | ||
|
|
6642868b86 | ||
|
|
14c63e0cd5 | ||
|
|
fcb4933671 | ||
|
|
571d9708e1 | ||
|
|
bd319de5cf | ||
|
|
78a67bd775 | ||
|
|
3744f2454c | ||
|
|
39aae2872d | ||
|
|
e9a35c1cab | ||
|
|
d87fa1799e | ||
|
|
9eb8472805 | ||
|
|
6921ca44a7 | ||
|
|
7b4a4d1da4 | ||
|
|
60cfbce48b | ||
|
|
3e3a84a602 | ||
|
|
0e4857c8f6 | ||
|
|
68021903c9 | ||
|
|
f803ee2c0b | ||
|
|
c40f2ae5bb | ||
|
|
8d71714446 | ||
|
|
cc6a5a6077 | ||
|
|
004588d627 | ||
|
|
49d0045434 | ||
|
|
f5c7b1bf73 | ||
|
|
6972492fb4 | ||
|
|
311a7d40d2 | ||
|
|
c88ffa56ff | ||
|
|
05b1785f24 | ||
|
|
9b99393c20 | ||
|
|
38c70d5705 | ||
|
|
8def289271 | ||
|
|
88abadce43 | ||
|
|
7f7680da6e | ||
|
|
7b71f22e85 | ||
|
|
c4d6c9541c | ||
|
|
5a468c8b3e | ||
|
|
12e68bf477 | ||
|
|
1040e57c94 | ||
|
|
b18219687c | ||
|
|
e6fcf73a1e | ||
|
|
b92ac7d439 | ||
|
|
0e3026d41f | ||
|
|
3346124d21 | ||
|
|
89c405b196 | ||
|
|
69305fda96 | ||
|
|
8cf629b3c2 | ||
|
|
25c6499c5d | ||
|
|
bdf9969c7e | ||
|
|
62c2842c86 | ||
|
|
e8fe4e26ff | ||
|
|
1085e553d5 | ||
|
|
e38808b17c | ||
|
|
21f15d5cbd | ||
|
|
0c42b643a9 | ||
|
|
28bf33cd78 | ||
|
|
7f0f36fb7a | ||
|
|
941b369016 | ||
|
|
a85ed986de | ||
|
|
21d0320e42 | ||
|
|
843503e92a | ||
|
|
08dfd58994 | ||
|
|
ed24d05752 | ||
|
|
28d30064b6 | ||
|
|
7bac0220dc | ||
|
|
cb510f04d8 | ||
|
|
92dc0dc6d0 | ||
|
|
fa9290cf1e | ||
|
|
1fcdddf579 | ||
|
|
ce4c750326 | ||
|
|
ce99109001 | ||
|
|
8a15f0094a | ||
|
|
3a2a365ec9 | ||
|
|
3529f2da4c | ||
|
|
64bbe5b646 | ||
|
|
2427d90f48 | ||
|
|
6c49ae5152 | ||
|
|
0d1fd657ab | ||
|
|
b4cadb1a16 | ||
|
|
a2192b14db | ||
|
|
ae467486ba | ||
|
|
88d162452a | ||
|
|
3fa60d08de | ||
|
|
1eb612135b | ||
|
|
7e3a400cb7 | ||
|
|
48b6b4ca8e | ||
|
|
c2319b3a21 | ||
|
|
9a50205867 | ||
|
|
b1503bc7c8 | ||
|
|
d5d4c1a319 | ||
|
|
8988e2d34b | ||
|
|
9588eb451b | ||
|
|
acfa3fc4d4 | ||
|
|
6ef5fa1aa5 | ||
|
|
af140741bc | ||
|
|
ddc860d4b0 | ||
|
|
c1f4a7536a | ||
|
|
b91c342ff4 | ||
|
|
352519c91e | ||
|
|
f3b82dc998 | ||
|
|
9f3a2db44e | ||
|
|
018a0baed6 | ||
|
|
ddaeb2b24b | ||
|
|
51183787af | ||
|
|
2e3b6c5a17 | ||
|
|
f5a8e16109 | ||
|
|
950cd41dfa | ||
|
|
0b86348711 | ||
|
|
c8555924e0 | ||
|
|
a029cb9fc5 | ||
|
|
5b668ae421 | ||
|
|
99e9a1ea0d | ||
|
|
56159976af | ||
|
|
ac4b49f1c2 | ||
|
|
875bb8bda3 | ||
|
|
c76e46d930 | ||
|
|
baf67a7dff | ||
|
|
adb5c4c7dd | ||
|
|
5303ecee22 | ||
|
|
233456df47 | ||
|
|
725ee77383 | ||
|
|
289be872f3 | ||
|
|
910da74519 | ||
|
|
2e0f85ac93 | ||
|
|
ef2e51b4f6 | ||
|
|
af3980ff66 | ||
|
|
e3cbd2e62f | ||
|
|
d98731d5d9 | ||
|
|
ca4328b53c | ||
|
|
26bed1e264 | ||
|
|
4dec80e9e3 | ||
|
|
587a425f77 | ||
|
|
8096ced303 | ||
|
|
86e8aeaaa5 | ||
|
|
223cae66c1 | ||
|
|
d6058bba82 | ||
|
|
3249c10215 | ||
|
|
c957e07399 | ||
|
|
df1fefd775 | ||
|
|
d521945479 | ||
|
|
74fb8cb7b2 | ||
|
|
887999904b | ||
|
|
545e5fd6ab | ||
|
|
ac5e151d1e | ||
|
|
c8d269e5de | ||
|
|
e7173e974b | ||
|
|
7b0d527ffe | ||
|
|
6f5f600f47 | ||
|
|
ad8a1174f7 | ||
|
|
24b5e5234f | ||
|
|
1d438d8d06 | ||
|
|
891372c4b1 | ||
|
|
3de030ba74 | ||
|
|
a6dd70a320 | ||
|
|
ffe79897e5 | ||
|
|
b01aabf7d1 | ||
|
|
304e13ac16 | ||
|
|
c1d41e190c | ||
|
|
13df7795fc | ||
|
|
f559798750 | ||
|
|
e88568625c | ||
|
|
0716fa02d6 | ||
|
|
325a8a4cbd | ||
|
|
b0820ca1db | ||
|
|
8d44c0c752 | ||
|
|
5b5a086fd3 | ||
|
|
f7e6d9e7b8 | ||
|
|
1f43533ff9 | ||
|
|
4f5616cb91 | ||
|
|
23ba478f82 | ||
|
|
ff3b033815 | ||
|
|
a08840de6d | ||
|
|
ed34643f01 | ||
|
|
a9c496e01f | ||
|
|
a9154373fc | ||
|
|
92c472c227 | ||
|
|
4589fde775 | ||
|
|
8b8d9e0841 | ||
|
|
19c68fad43 |
No files matched your search
+66
-1
@@ -1,18 +1,83 @@
|
||||
# Future
|
||||
|
||||
# 1.8.6
|
||||
- 3DS: Add IDs for UZEM, TGB Dual, and NeoCD
|
||||
- 3DS: Fix font driver horizontal text alignment
|
||||
- 3DS: Allow button presses up to INPUT_MAX_USERS - this enables the 3DS to bind and use buttons and axis for users up to the maximum set by 'Max Users' in the input settings menu.
|
||||
- 3DS: Disable video filter if upscaled resolution exceeds hardware limits. The 3DS has a maximum video buffer size of 2048x2048. This is sufficient for every core that it supports, but when using software video filters the core output resolution is doubled. This is made worse by the fact that the video filter upscaling buffer size is dependent upon the maximum output resolution of the core - which in some cases is very large indeed (e.g. pcsx-rearmed sets a maximum width of 1024, for enhanced resolution support). The 3DS has very limited 'linear memory' for graphics buffer purposes, and a large base core buffer + video filter buffer can easily exceed this - which may also disable video output, or cause a crash. This PR very simply adds a 3DS-specific check to the video filter initialisation: if the resultant upscaling buffer exceeds the hardware limitation, then the filter is automatically disabled.
|
||||
- 3DS/FONT/BUGFIX: Text colour was wrong: the RGBA channels were muddled, and R was always set to 255
|
||||
- 3DS/FONT/BUGFIX: When drawing multiline strings, the line spacing was completely incorrect
|
||||
- 3DS/FONT: Improves the appearance of the drop shadow effect on notification text.
|
||||
- 3DS/ARCHIVE/7Z: Re-enable 7zip support.
|
||||
- ARCHIVE/ZIP: Expand functionality of 'rzip_stream' interface. This PR expands the functionality of the new rzip_stream archived stream interface such that it now has almost complete feature parity with the standard file_stream interface, and can therefore be used as a drop-in replacement in most situations
|
||||
- AI SERVICE: Hide redundant entries when service is disabled
|
||||
- AI SERVICE: Added in auto-translate support
|
||||
- AI SERVICE: support for NVDA and SAPI narration
|
||||
- AUTOCONFIG: Use correct port index in input device configured/disconnected notifications
|
||||
- CHD: Fixes a crash caused by ignoring the return value from one of the CHD library functions.
|
||||
- BUGFIX: Fix race condition where task could momentarily not be in the queue when reordering
|
||||
- CHEEVOS/BUGFIX: Prevent null reference rendering achievement list while closing application
|
||||
- CHEEVOS/BUGFIX: Report non-memorymap GBA cores as unsupported
|
||||
- COMMANDLINE: Advise against using -s and -S variables on the command line. …
|
||||
- CONFIG FILE: Only write config files to disk when parameters change
|
||||
- CONFIG FILE/BUGFIX: RetroArch no longer crashes when attempting to save a config file after 'unsetting' a parameter (currently, this can be triggered quite easily by manipulating input remaps)
|
||||
- CONFIG FILE/BUGFIX: When using Material UI, RetroArch no longer modifies the wrong setting (or segfaults...) when tapping entries in the Quick Menu > Controls input remapping submenu
|
||||
- CONFIG FILE/BUGFIX: Quite a few real and potential memory leaks have been fixed.
|
||||
- CHD: Fixes a crash caused by ignoring the return value from one of the CHD library functions
|
||||
- FASTFORWARDING: A new Mute When Fast-Forwarding option has been added under Settings > Audio. When enabled, users can fast forward without having to listen to distorted audio.
|
||||
- GLCORE/SLANG: Set filter and wrap mode correctly when intialising shader textures. Before, the glcore shader driver did not correctly initialise loaded textures. The texture filtering and wrap mode were forced on texture creation, but these settings were not recorded - subsequent updates would set garbage values, that would resolve to linear filtering OFF and wrap mode = CLAMP_TO_EDGE.
|
||||
- LOCALIZATION: Update Japanese translation
|
||||
- LOCALIZATION: Update Spanish translation
|
||||
- LOCALIZATION: Update Portuguese Brazilian translation
|
||||
- IOS: Set audio session category to ambient so sound does not get cut off on interruption (phone call/playing back audio)
|
||||
- MAC/IOHIDMANAGER/BUGFIX: Fix for Mayflash N64 adapter. In case last hatswitch does not match cookie. For the mayflash N64 adapter, I was getting a BAD EXC ADDRESS (in mac OS 10.13) for this line (tmp was NULL). Retroarch would crash in the gui if I pressed a button from the DPAD on controller 2. With this change, it no longer crashes in the gui and still registers the button push.
|
||||
- MAC/COCOA: Fix mouse input - this brings back two lines of code that have been removed over time but
|
||||
appear to be required in order for mouse input to work on macOS
|
||||
- METAL/BUGFIX: GPU capture on Metal/OSX/NVidia could crash
|
||||
- METAL/BUGFIX: Taking screenshots could capture black frames. Resulting PNG screenshots were black.
|
||||
- METAL/BUGFIX: Corrupted image due to incorrect viewport copy when taking screenshot
|
||||
- MENU: Prevent font-related segfaults when using extremely small scales/window sizes
|
||||
- MENU: Fix 'gfx_display_draw_texture_slice()'
|
||||
- MENU/FONT: Enable correct vertical alignment of text (+ font rendering fixes)
|
||||
- MENU/RGUI: Enable automatic menu size reduction when running at low resolutions (down to 256x192)
|
||||
- MENU/OZONE: Update timedate style options for Last Played sublabel metadata
|
||||
- MENU/OZONE: Hide 'Menu Color Theme' setting when 'Use preferred system color theme' is enabled
|
||||
- MENU/OZONE: Fix thumbnail switching via 'scan' button functionality
|
||||
- MENU/OZONE: Prevent glitches when rendering Ozone's selection cursor
|
||||
- MENU/OZONE: Enable proper vertical text alignment + thumbnail display improvements
|
||||
- MENU/OZONE: Enable second thumbnail/content metadata toggle using RetroPad 'select'
|
||||
- MENU/OZONE: Refactor footer display
|
||||
- MENU/OZONE: Hide thumbnail button hints when viewing file browser lists
|
||||
- MENU/OZONE/INPUT/BUGFIX: Fix undefined behaviour when using touch screen to change input remaps
|
||||
- MENU/OZONE/INPUT/BUGFIX: It turns out that Windows reports negative pointer coordinates when the mouse cursor goes beyond the left hand edge of the RetroArch window (this doesn't happen on Linux, so I never encountered this issue before!). As a result, if Ozone is currently not showing the sidebar (menu depth > 1), moving the cursor off the left edge of the window generates a false positive 'cursor in sidebar' event - which breaks menu navigation, as described in #10419. With this PR, we now handle 'cursor in sidebar' status correctly in all cases
|
||||
- MENU/OZONE/INPUT/BUGFIX: Pointer input is now correctly disabled when message boxes are displayed
|
||||
- MENU/XMB: Fix thumbnail switching via 'scan' button functionality
|
||||
- ODROID GO ADVANCE: Add DRM HW context driver
|
||||
- PSL1GHT: Initial port
|
||||
- PSL1GHT/KEYBOARD: Implement PSL1GHT keyboard
|
||||
- PLAYLIST/BUGFIX: Improve handling of 'broken' playlists - RetroArch will no longer segfault when attempting to run content via a playlist entry with missing path or core path fields.
|
||||
- PLAYLIST/BUGFIX: Improve handling of 'broken' playlists - when a playlist entry has either core path and/or core name set to NULL, DETECT or an empty string, attempting to load content will fallback to the normal 'core selection' code (currently this happens only if both core path and core name are DETECT - this is wholly inadequate!)
|
||||
- PLAYLIST/BUGFIX: RetroArch will no longer segfault when attempting to fetch content runtime information when core path is NULL
|
||||
- PLAYLIST/BUGFIX: Core name + runtime info will only be displayed on playlists and in the Information submenu if both the core path and core name fields are 'valid' (i.e. not NULL or DETECT)
|
||||
- PLAYLIST/BUGFIX: When handling entries with missing path fields, the menu sorting order now matches that of the playlist sorting order (at present, everything goes out of sync when paths are empty). Moreover, entries with missing path fields can now be 'selected', so users can remove them (currently, hitting A on such an entry immediately tries - and fails - to load the content, so the only way to remove the broken entry is via the Playlist Management > Clean Playlist feature)
|
||||
- PLAYLIST: Add optional per-playlist alphabetical sorting
|
||||
- PLAYLIST: Omit whitespace when writing compressed JSON format playlists
|
||||
- PLAYLIST: Add optional playlist compression
|
||||
- QNX: Support analog sticks
|
||||
- SAVESTATES: Add optional save state compression (enabled by default now)
|
||||
- SRAM: Add optional save (SRAM) file compression
|
||||
- SCANNER: Prevent redundant playlist entries when handling M3U content
|
||||
- SCANNER/ANDROID: Fix content scanner being unable to identify certain games from CHD images (raw data sector/subcode)
|
||||
- TASKS/BUGFIX: Fix task deadlocks
|
||||
- TASKS/SCREENSHOT/BUGFIX: Fix heap-use-after-free error when widgets are disabled
|
||||
- TVOS: Disable overlays for tvOS, fix app icon
|
||||
- VIDEO/WIDGETS/BUGFIX: The font ascender/descender metrics added in #10375 are now used to achieve 'pixel perfect' vertical text alignment
|
||||
- VIDEO/WIDGETS/BUGFIX: Message queue text now uses its own dedicated font. Previously, a single (larger) font was used for all active widgets, and this was scaled down for message queue items. This 'squished' the text a little; more importantly, when using the stb font renderers (on Android. etc.) it caused ugly artefacts around the edges of glyphs due to pixel interpolation errors. Now that a correctly sized font is used, the message queue is always rendered cleanly.
|
||||
- VIDEO/WIDGETS/BUGFIX: Previously, each widget font was 'flushed' (font_driver_flush()) at least once a frame. This is quite a slow operation. Now we only flush fonts if they have actually been used.
|
||||
- VULKAN/BUGFIX: Fix display of statistics text
|
||||
- UNIX/BUGFIX: Fix overflow when computing total memory on i386
|
||||
- WIIU/BUGFIX: Fix font driver horizontal text alignment
|
||||
- WIIU/BUGFIX: Fix non-vertex coordinates in draws using tex shader
|
||||
- WIIU/BUGFIX: Update and fix meta.xml file for the WiiU release. This change makes it so the information from the meta.xml file parsed for the WiiU's Homebrew Launcher is displayed properly.
|
||||
|
||||
# 1.8.5
|
||||
- 3DS: Keep the bottom screen hidden on sleep/wakeup. When the 3DS wakes back up after being closed, the bottom screen needs to be reinitialized. Adding the condition here will cause the screen to be turned on or off based on the state of ctr_bottom_screen_enabled, as you'd expect
|
||||
|
||||
+15
-1
@@ -19,6 +19,16 @@ ifeq ($(HAVE_CXX11), 1)
|
||||
CXXFLAGS += $(CXX11_CFLAGS)
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_NVDA), 1)
|
||||
LIBS += nvdaControllerClient64.dll
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_SAPI), 1)
|
||||
LIBS += sapi.dll
|
||||
endif
|
||||
|
||||
|
||||
|
||||
ifeq ($(HAVE_GL_CONTEXT),)
|
||||
HAVE_GL_CONTEXT = 0
|
||||
HAVE_GL_MODERN = 0
|
||||
@@ -1681,7 +1691,8 @@ endif
|
||||
|
||||
ifeq ($(HAVE_ZLIB_COMMON), 1)
|
||||
OBJ += $(LIBRETRO_COMM_DIR)/file/archive_file_zlib.o \
|
||||
$(LIBRETRO_COMM_DIR)/streams/trans_stream_zlib.o
|
||||
$(LIBRETRO_COMM_DIR)/streams/trans_stream_zlib.o \
|
||||
$(LIBRETRO_COMM_DIR)/streams/rzip_stream.o
|
||||
DEFINES += -DHAVE_ZLIB
|
||||
HAVE_COMPRESSION = 1
|
||||
|
||||
@@ -1765,11 +1776,14 @@ endif
|
||||
ifeq ($(HAVE_ACCESSIBILITY), 1)
|
||||
DEFINES += -DHAVE_ACCESSIBILITY
|
||||
|
||||
ifeq ($(HAVE_SAPI), 1)
|
||||
ifneq ($(findstring Win32,$(OS)),)
|
||||
LIBS += -lsapi
|
||||
endif
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
|
||||
|
||||
# Things that depend on network availability
|
||||
|
||||
+1
-1
@@ -51,7 +51,7 @@ DEFINES :=
|
||||
ifeq ($(GRIFFIN_BUILD), 1)
|
||||
OBJ += griffin/griffin.o
|
||||
DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_CONFIGFILE -DHAVE_RGUI -DHAVE_XMB -DHAVE_MATERIALUI -DHAVE_LIBRETRODB -DHAVE_CC_RESAMPLER
|
||||
DEFINES += -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA
|
||||
DEFINES += -DHAVE_ZLIB -DHAVE_7ZIP -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA
|
||||
#DEFINES += -DHAVE_NETWORKING -DHAVE_CHEEVOS -DRC_DISABLE_LUA -DHAVE_SOCKET_LEGACY -DHAVE_THREADS
|
||||
#-DHAVE_SSL -DHAVE_BUILTINMBEDTLS -DMBEDTLS_SSL_DEBUG_ALL
|
||||
#ssl is currently incompatible with griffin due to use of the "static" flag on repeating functions that will conflict when included in one file
|
||||
|
||||
+1
-1
@@ -155,7 +155,7 @@ else ifeq ($(libogc_platform), 1)
|
||||
endif
|
||||
|
||||
LIBDIRS += -L.
|
||||
MACHDEP += -DGEKKO -mcpu=750 -meabi -mhard-float -DMSB_FIRST
|
||||
MACHDEP += -DGEKKO -mcpu=750 -meabi -mhard-float
|
||||
|
||||
ifeq ($(platform), ngc)
|
||||
LDFLAGS += $(MACHDEP) -Wl,-Map,$(notdir $(EXT_INTER_TARGET)).map
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ endif
|
||||
PPU_SRCS = griffin/griffin.c
|
||||
|
||||
DEFINES += -DHAVE_VIDEO_LAYOUT
|
||||
DEFINES += -DHAVE_MENU -DHAVE_CONFIGFILE -DHAVE_GFX_WIDGETS -DHAVE_RGUI -DHAVE_XMB -DHAVE_OZONE -DHAVE_LIBRETRODB -DHAVE_MATERIALUI -DHAVE_SHADERPIPELINE -DRARCH_INTERNAL -DMSB_FIRST -DHAVE_OVERLAY -DHAVE_CC_RESAMPLER -DHAVE_STB_VORBIS -DHAVE_STB_FONT -DHAVE_RUNAHEAD -DHAVE_DR_MP3 -DHAVE_DR_FLAC
|
||||
DEFINES += -DHAVE_MENU -DHAVE_CONFIGFILE -DHAVE_GFX_WIDGETS -DHAVE_RGUI -DHAVE_XMB -DHAVE_OZONE -DHAVE_LIBRETRODB -DHAVE_MATERIALUI -DHAVE_SHADERPIPELINE -DRARCH_INTERNAL -DHAVE_OVERLAY -DHAVE_CC_RESAMPLER -DHAVE_STB_VORBIS -DHAVE_STB_FONT -DHAVE_RUNAHEAD -DHAVE_DR_MP3 -DHAVE_DR_FLAC
|
||||
DEFINES += -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORES
|
||||
|
||||
ifeq ($(DEX_BUILD), 1)
|
||||
|
||||
+2
-2
@@ -163,7 +163,7 @@ OBJ := $(addprefix $(BUILD_DIR)/,$(OBJ))
|
||||
#-----------------------------
|
||||
# Compile flags
|
||||
|
||||
DEFINES += -DWIIU -DMSB_FIRST -D__WUT__ -DHW_WUP -D__wiiu__
|
||||
DEFINES += -DWIIU -D__WUT__ -DHW_WUP -D__wiiu__
|
||||
DEFINES += -DHAVE_MAIN
|
||||
DEFINES += -DRARCH_CONSOLE
|
||||
|
||||
@@ -184,7 +184,7 @@ CFLAGS := -mcpu=750 -meabi -mhard-float
|
||||
CFLAGS += -ffast-math -Werror=implicit-function-declaration
|
||||
CFLAGS += -ffunction-sections -fdata-sections
|
||||
#CFLAGS += -fomit-frame-pointer -mword-relocations
|
||||
#CFLAGS += -Wall
|
||||
CFLAGS += -Wall
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
CFLAGS += -O0 -g
|
||||
|
||||
@@ -106,7 +106,7 @@ static ssize_t switch_audio_write(void *data, const void *buf, size_t size)
|
||||
num = 0;
|
||||
|
||||
#ifdef HAVE_LIBNX
|
||||
if (audoutWaitPlayFinish(&swa->current_buffer, &num, U64_MAX) != 0) { }
|
||||
if (audoutWaitPlayFinish(&swa->current_buffer, &num, UINT64_MAX) != 0) { }
|
||||
#else
|
||||
svcWaitSynchronization(&handle_idx, &swa->event, 1, 33333333);
|
||||
svcResetSignal(swa->event);
|
||||
|
||||
@@ -46,6 +46,10 @@ typedef AudioOutBuffer compat_audio_out_buffer;
|
||||
#define switch_audio_ipc_output_stop(a) audoutStopAudioOut()
|
||||
#define switch_audio_ipc_output_start(a) audoutStartAudioOut()
|
||||
|
||||
#ifndef UINT64_MAX
|
||||
#define UINT64_MAX U64_MAX
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
/* libtransistor definitions */
|
||||
|
||||
@@ -86,7 +86,7 @@ static void mainLoop(void* data)
|
||||
if (!released_out_buffer)
|
||||
{
|
||||
#ifdef HAVE_LIBNX
|
||||
rc = audoutWaitPlayFinish(&released_out_buffer, &released_out_count, U64_MAX);
|
||||
rc = audoutWaitPlayFinish(&released_out_buffer, &released_out_count, UINT64_MAX);
|
||||
#else
|
||||
uint32_t handle_idx = 0;
|
||||
svcWaitSynchronization(&handle_idx, &swa->event, 1, 33333333);
|
||||
|
||||
@@ -1133,12 +1133,12 @@ void rcheevos_get_achievement_state(unsigned index, char *buffer, size_t buffer_
|
||||
if (index < rcheevos_locals.patchdata.core_count)
|
||||
{
|
||||
enum_idx = MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY;
|
||||
cheevo = &rcheevos_locals.core[index];
|
||||
cheevo = rcheevos_locals.core ? &rcheevos_locals.core[index] : NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
enum_idx = MENU_ENUM_LABEL_VALUE_CHEEVOS_UNOFFICIAL_ENTRY;
|
||||
cheevo = &rcheevos_locals.unofficial[index - rcheevos_locals.patchdata.core_count];
|
||||
cheevo = rcheevos_locals.unofficial ? &rcheevos_locals.unofficial[index - rcheevos_locals.patchdata.core_count] : NULL;
|
||||
}
|
||||
|
||||
if (!cheevo || !cheevo->trigger)
|
||||
|
||||
@@ -248,6 +248,14 @@ const uint8_t* rcheevos_patch_address(unsigned address, int console)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (console == RC_CONSOLE_GAMEBOY_ADVANCE)
|
||||
{
|
||||
/* The RetroAchievements implementation of memory access for GBA puts the save RAM first,
|
||||
* so the default looping behavior below is backwards. If the core doesn't expose a
|
||||
* memory map, say it isn't supported.
|
||||
*/
|
||||
pointer = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
+20
-5
@@ -803,6 +803,10 @@ static const bool audio_enable_menu_bgm = false;
|
||||
#define DEFAULT_WASAPI_SH_BUFFER_LENGTH -16
|
||||
#endif
|
||||
|
||||
/* Automatically mute audio when fast forward
|
||||
* is enabled */
|
||||
#define DEFAULT_AUDIO_FASTFORWARD_MUTE false
|
||||
|
||||
/* MISC */
|
||||
|
||||
/* Enables displaying the current frames per second. */
|
||||
@@ -911,6 +915,14 @@ static const bool savestate_auto_load = false;
|
||||
|
||||
static const bool savestate_thumbnail_enable = false;
|
||||
|
||||
/* When creating save (srm) files, compress
|
||||
* written data */
|
||||
#define DEFAULT_SAVE_FILE_COMPRESSION false
|
||||
|
||||
/* When creating save state files, compress
|
||||
* written data */
|
||||
#define DEFAULT_SAVESTATE_FILE_COMPRESSION true
|
||||
|
||||
/* Slowmotion ratio. */
|
||||
#define DEFAULT_SLOWMOTION_RATIO 3.0
|
||||
|
||||
@@ -950,22 +962,25 @@ static const unsigned default_content_history_size = 200;
|
||||
static const int default_content_favorites_size = 200;
|
||||
|
||||
/* Sort all playlists (apart from histories) alphabetically */
|
||||
static const bool playlist_sort_alphabetical = true;
|
||||
#define DEFAULT_PLAYLIST_SORT_ALPHABETICAL true
|
||||
|
||||
/* File format to use when writing playlists to disk */
|
||||
static const bool playlist_use_old_format = false;
|
||||
#define DEFAULT_PLAYLIST_USE_OLD_FORMAT false
|
||||
|
||||
/* When creating/updating playlists, compress written data */
|
||||
#define DEFAULT_PLAYLIST_COMPRESSION false
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
/* Specify when to display 'core name' inline on playlist entries */
|
||||
static const unsigned playlist_show_inline_core_name = PLAYLIST_INLINE_CORE_DISPLAY_HIST_FAV;
|
||||
#define DEFAULT_PLAYLIST_SHOW_INLINE_CORE_NAME PLAYLIST_INLINE_CORE_DISPLAY_HIST_FAV
|
||||
|
||||
/* Specifies which runtime record to use on playlist sublabels */
|
||||
static const unsigned playlist_sublabel_runtime_type = PLAYLIST_RUNTIME_PER_CORE;
|
||||
#define DEFAULT_PLAYLIST_SUBLABEL_RUNTIME_TYPE PLAYLIST_RUNTIME_PER_CORE
|
||||
|
||||
/* Specifies time/date display format for runtime 'last played' data */
|
||||
#define DEFAULT_PLAYLIST_SUBLABEL_LAST_PLAYED_STYLE PLAYLIST_LAST_PLAYED_STYLE_YMD_HMS
|
||||
|
||||
static const unsigned playlist_entry_remove_enable = PLAYLIST_ENTRY_REMOVE_ENABLE_ALL;
|
||||
#define DEFAULT_PLAYLIST_ENTRY_REMOVE_ENABLE PLAYLIST_ENTRY_REMOVE_ENABLE_ALL
|
||||
#endif
|
||||
|
||||
#define DEFAULT_SCAN_WITHOUT_CORE_MATCH false
|
||||
|
||||
+10
-5
@@ -1432,6 +1432,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
|
||||
#ifdef HAVE_AUDIOMIXER
|
||||
SETTING_BOOL("audio_mixer_mute_enable", audio_get_bool_ptr(AUDIO_ACTION_MIXER_MUTE_ENABLE), true, false, false);
|
||||
#endif
|
||||
SETTING_BOOL("audio_fastforward_mute", &settings->bools.audio_fastforward_mute, true, DEFAULT_AUDIO_FASTFORWARD_MUTE, false);
|
||||
SETTING_BOOL("location_allow", &settings->bools.location_allow, true, false, false);
|
||||
SETTING_BOOL("video_font_enable", &settings->bools.video_font_enable, true, DEFAULT_FONT_ENABLE, false);
|
||||
SETTING_BOOL("core_updater_auto_extract_archive", &settings->bools.network_buildbot_auto_extract_archive, true, true, false);
|
||||
@@ -1614,6 +1615,8 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
|
||||
SETTING_BOOL("savestate_auto_save", &settings->bools.savestate_auto_save, true, savestate_auto_save, false);
|
||||
SETTING_BOOL("savestate_auto_load", &settings->bools.savestate_auto_load, true, savestate_auto_load, false);
|
||||
SETTING_BOOL("savestate_thumbnail_enable", &settings->bools.savestate_thumbnail_enable, true, savestate_thumbnail_enable, false);
|
||||
SETTING_BOOL("save_file_compression", &settings->bools.save_file_compression, true, DEFAULT_SAVE_FILE_COMPRESSION, false);
|
||||
SETTING_BOOL("savestate_file_compression", &settings->bools.savestate_file_compression, true, DEFAULT_SAVESTATE_FILE_COMPRESSION, false);
|
||||
SETTING_BOOL("history_list_enable", &settings->bools.history_list_enable, true, DEFAULT_HISTORY_LIST_ENABLE, false);
|
||||
SETTING_BOOL("playlist_entry_rename", &settings->bools.playlist_entry_rename, true, DEFAULT_PLAYLIST_ENTRY_RENAME, false);
|
||||
SETTING_BOOL("game_specific_options", &settings->bools.game_specific_options, true, default_game_specific_options, false);
|
||||
@@ -1648,11 +1651,12 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
|
||||
SETTING_BOOL("video_3ds_lcd_bottom", &settings->bools.video_3ds_lcd_bottom, true, video_3ds_lcd_bottom, false);
|
||||
#endif
|
||||
|
||||
SETTING_BOOL("playlist_use_old_format", &settings->bools.playlist_use_old_format, true, playlist_use_old_format, false);
|
||||
SETTING_BOOL("playlist_use_old_format", &settings->bools.playlist_use_old_format, true, DEFAULT_PLAYLIST_USE_OLD_FORMAT, false);
|
||||
SETTING_BOOL("playlist_compression", &settings->bools.playlist_compression, true, DEFAULT_PLAYLIST_COMPRESSION, false);
|
||||
SETTING_BOOL("content_runtime_log", &settings->bools.content_runtime_log, true, DEFAULT_CONTENT_RUNTIME_LOG, false);
|
||||
SETTING_BOOL("content_runtime_log_aggregate", &settings->bools.content_runtime_log_aggregate, true, DEFAULT_CONTENT_RUNTIME_LOG_AGGREGATE, false);
|
||||
SETTING_BOOL("playlist_show_sublabels", &settings->bools.playlist_show_sublabels, true, DEFAULT_PLAYLIST_SHOW_SUBLABELS, false);
|
||||
SETTING_BOOL("playlist_sort_alphabetical", &settings->bools.playlist_sort_alphabetical, true, playlist_sort_alphabetical, false);
|
||||
SETTING_BOOL("playlist_sort_alphabetical", &settings->bools.playlist_sort_alphabetical, true, DEFAULT_PLAYLIST_SORT_ALPHABETICAL, false);
|
||||
SETTING_BOOL("playlist_fuzzy_archive_match", &settings->bools.playlist_fuzzy_archive_match, true, DEFAULT_PLAYLIST_FUZZY_ARCHIVE_MATCH, false);
|
||||
|
||||
SETTING_BOOL("quit_press_twice", &settings->bools.quit_press_twice, true, DEFAULT_QUIT_PRESS_TWICE, false);
|
||||
@@ -1894,9 +1898,9 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
SETTING_UINT("playlist_entry_remove_enable", &settings->uints.playlist_entry_remove_enable, true, playlist_entry_remove_enable, false);
|
||||
SETTING_UINT("playlist_show_inline_core_name", &settings->uints.playlist_show_inline_core_name, true, playlist_show_inline_core_name, false);
|
||||
SETTING_UINT("playlist_sublabel_runtime_type", &settings->uints.playlist_sublabel_runtime_type, true, playlist_sublabel_runtime_type, false);
|
||||
SETTING_UINT("playlist_entry_remove_enable", &settings->uints.playlist_entry_remove_enable, true, DEFAULT_PLAYLIST_ENTRY_REMOVE_ENABLE, false);
|
||||
SETTING_UINT("playlist_show_inline_core_name", &settings->uints.playlist_show_inline_core_name, true, DEFAULT_PLAYLIST_SHOW_INLINE_CORE_NAME, false);
|
||||
SETTING_UINT("playlist_sublabel_runtime_type", &settings->uints.playlist_sublabel_runtime_type, true, DEFAULT_PLAYLIST_SUBLABEL_RUNTIME_TYPE, false);
|
||||
SETTING_UINT("playlist_sublabel_last_played_style", &settings->uints.playlist_sublabel_last_played_style, true, DEFAULT_PLAYLIST_SUBLABEL_LAST_PLAYED_STYLE, false);
|
||||
#endif
|
||||
|
||||
@@ -4245,6 +4249,7 @@ bool config_save_overrides(enum override_type type, void *data)
|
||||
free(override_directory);
|
||||
free(core_path);
|
||||
free(game_path);
|
||||
free(content_path);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -131,6 +131,7 @@ typedef struct settings
|
||||
bool audio_rate_control;
|
||||
bool audio_wasapi_exclusive_mode;
|
||||
bool audio_wasapi_float_format;
|
||||
bool audio_fastforward_mute;
|
||||
|
||||
/* Input */
|
||||
bool input_remap_binds_enable;
|
||||
@@ -344,6 +345,8 @@ typedef struct settings
|
||||
bool savestate_auto_save;
|
||||
bool savestate_auto_load;
|
||||
bool savestate_thumbnail_enable;
|
||||
bool save_file_compression;
|
||||
bool savestate_file_compression;
|
||||
bool network_cmd_enable;
|
||||
bool stdin_cmd_enable;
|
||||
bool keymapper_enable;
|
||||
@@ -377,6 +380,7 @@ typedef struct settings
|
||||
|
||||
bool sustained_performance_mode;
|
||||
bool playlist_use_old_format;
|
||||
bool playlist_compression;
|
||||
bool content_runtime_log;
|
||||
bool content_runtime_log_aggregate;
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ typedef struct content_ctx_info
|
||||
bool content_load_ram_file(unsigned slot);
|
||||
|
||||
/* Save a RAM state from memory to disk. */
|
||||
bool content_save_ram_file(unsigned slot);
|
||||
bool content_save_ram_file(unsigned slot, bool compress);
|
||||
|
||||
/* Load a state from disk to memory. */
|
||||
bool content_load_state(const char* path, bool load_to_backup_buffer, bool autoload);
|
||||
|
||||
+78
-60
@@ -140,15 +140,17 @@ static void core_info_list_resolve_all_firmware(
|
||||
snprintf(desc_key, sizeof(desc_key), "firmware%u_desc", c);
|
||||
snprintf(opt_key, sizeof(opt_key), "firmware%u_opt", c);
|
||||
|
||||
if (config_get_string(config, path_key, &tmp) && !string_is_empty(tmp))
|
||||
if (config_get_string(config, path_key, &tmp))
|
||||
{
|
||||
info->firmware[c].path = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
info->firmware[c].path = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
if (config_get_string(config, desc_key, &tmp) && !string_is_empty(tmp))
|
||||
if (config_get_string(config, desc_key, &tmp))
|
||||
{
|
||||
info->firmware[c].desc = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
info->firmware[c].desc = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
@@ -315,48 +317,48 @@ static core_info_list_t *core_info_list_new(const char *path,
|
||||
{
|
||||
char *tmp = NULL;
|
||||
|
||||
if (config_get_string(conf, "display_name", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "display_name", &tmp))
|
||||
{
|
||||
core_info[i].display_name = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
core_info[i].display_name = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
if (config_get_string(conf, "display_version", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "display_version", &tmp))
|
||||
{
|
||||
core_info[i].display_version = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
core_info[i].display_version = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
if (config_get_string(conf, "corename", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "corename", &tmp))
|
||||
{
|
||||
core_info[i].core_name = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
core_info[i].core_name = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "systemname", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "systemname", &tmp))
|
||||
{
|
||||
core_info[i].systemname = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
core_info[i].systemname = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "systemid", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "systemid", &tmp))
|
||||
{
|
||||
core_info[i].system_id = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
core_info[i].system_id = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "manufacturer", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "manufacturer", &tmp))
|
||||
{
|
||||
core_info[i].system_manufacturer = strdup(tmp);
|
||||
if (!string_is_empty(tmp))
|
||||
core_info[i].system_manufacturer = strdup(tmp);
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
@@ -367,87 +369,103 @@ static core_info_list_t *core_info_list_new(const char *path,
|
||||
core_info[i].firmware_count = count;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "supported_extensions", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "supported_extensions", &tmp))
|
||||
{
|
||||
core_info[i].supported_extensions = strdup(tmp);
|
||||
core_info[i].supported_extensions_list =
|
||||
string_split(core_info[i].supported_extensions, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].supported_extensions = strdup(tmp);
|
||||
core_info[i].supported_extensions_list =
|
||||
string_split(core_info[i].supported_extensions, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "authors", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "authors", &tmp))
|
||||
{
|
||||
core_info[i].authors = strdup(tmp);
|
||||
core_info[i].authors_list =
|
||||
string_split(core_info[i].authors, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].authors = strdup(tmp);
|
||||
core_info[i].authors_list =
|
||||
string_split(core_info[i].authors, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "permissions", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "permissions", &tmp))
|
||||
{
|
||||
core_info[i].permissions = strdup(tmp);
|
||||
core_info[i].permissions_list =
|
||||
string_split(core_info[i].permissions, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].permissions = strdup(tmp);
|
||||
core_info[i].permissions_list =
|
||||
string_split(core_info[i].permissions, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "license", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "license", &tmp))
|
||||
{
|
||||
core_info[i].licenses = strdup(tmp);
|
||||
core_info[i].licenses_list =
|
||||
string_split(core_info[i].licenses, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].licenses = strdup(tmp);
|
||||
core_info[i].licenses_list =
|
||||
string_split(core_info[i].licenses, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "categories", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "categories", &tmp))
|
||||
{
|
||||
core_info[i].categories = strdup(tmp);
|
||||
core_info[i].categories_list =
|
||||
string_split(core_info[i].categories, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].categories = strdup(tmp);
|
||||
core_info[i].categories_list =
|
||||
string_split(core_info[i].categories, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "database", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "database", &tmp))
|
||||
{
|
||||
core_info[i].databases = strdup(tmp);
|
||||
core_info[i].databases_list =
|
||||
string_split(core_info[i].databases, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].databases = strdup(tmp);
|
||||
core_info[i].databases_list =
|
||||
string_split(core_info[i].databases, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "notes", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "notes", &tmp))
|
||||
{
|
||||
core_info[i].notes = strdup(tmp);
|
||||
core_info[i].note_list = string_split(core_info[i].notes, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].notes = strdup(tmp);
|
||||
core_info[i].note_list = string_split(core_info[i].notes, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
}
|
||||
|
||||
if (config_get_string(conf, "required_hw_api", &tmp)
|
||||
&& !string_is_empty(tmp))
|
||||
if (config_get_string(conf, "required_hw_api", &tmp))
|
||||
{
|
||||
core_info[i].required_hw_api = strdup(tmp);
|
||||
core_info[i].required_hw_api_list = string_split(core_info[i].required_hw_api, "|");
|
||||
if (!string_is_empty(tmp))
|
||||
{
|
||||
core_info[i].required_hw_api = strdup(tmp);
|
||||
core_info[i].required_hw_api_list = string_split(core_info[i].required_hw_api, "|");
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
tmp = NULL;
|
||||
|
||||
@@ -126,12 +126,6 @@ else ifneq (,$(findstring win,$(platform)))
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_BIGENDIAN),1)
|
||||
CPUOPTS += -DHAVE_BIGENDIAN=1 -DMSB_FIRST
|
||||
else
|
||||
CPUOPTS += -DHAVE_BIGENDIAN=0
|
||||
endif
|
||||
|
||||
ifeq ($(HAVE_SSA), 1)
|
||||
LIBS += $(shell pkg-config libass --libs)
|
||||
DEFINES += -DHAVE_SSA
|
||||
|
||||
Vendored
+1
@@ -4,6 +4,7 @@
|
||||
#ifndef __CPU_ARCH_H
|
||||
#define __CPU_ARCH_H
|
||||
|
||||
#include <retro_endianness.h>
|
||||
#include "7zTypes.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Vendored
-5
@@ -1162,19 +1162,14 @@ void _FAT_directory_entryStat (PARTITION* partition, DIR_ENTRY* entry, struct st
|
||||
0,
|
||||
u8array_to_u16 (entry->entryData, DIR_ENTRY_aDate)
|
||||
);
|
||||
st->st_spare1 = 0;
|
||||
st->st_mtime = _FAT_filetime_to_time_t (
|
||||
u8array_to_u16 (entry->entryData, DIR_ENTRY_mTime),
|
||||
u8array_to_u16 (entry->entryData, DIR_ENTRY_mDate)
|
||||
);
|
||||
st->st_spare2 = 0;
|
||||
st->st_ctime = _FAT_filetime_to_time_t (
|
||||
u8array_to_u16 (entry->entryData, DIR_ENTRY_cTime),
|
||||
u8array_to_u16 (entry->entryData, DIR_ENTRY_cDate)
|
||||
);
|
||||
st->st_spare3 = 0;
|
||||
st->st_blksize = partition->bytesPerSector; /* Prefered file I/O block size */
|
||||
st->st_blocks = (st->st_size + partition->bytesPerSector - 1) / partition->bytesPerSector; /* File size in blocks */
|
||||
st->st_spare4[0] = 0;
|
||||
st->st_spare4[1] = 0;
|
||||
}
|
||||
Vendored
+1
@@ -812,6 +812,7 @@ enum
|
||||
#endif /* __STB_INCLUDE_STB_TRUETYPE_H__ */
|
||||
|
||||
#include <retro_assert.h>
|
||||
#include <retro_endianness.h>
|
||||
|
||||
/* IMPLEMENTATION */
|
||||
|
||||
|
||||
@@ -260,8 +260,8 @@ for f in `ls -v *_${platform}.${EXT}`; do
|
||||
if [ $platform = "psl1ght" ] ; then
|
||||
mv -fv ../retroarch_psl1ght.self ../pkg/psl1ght/pkg/USRDIR/cores/"${name}_libretro_${platform}.SELF"
|
||||
if [ -d ../../dist/info ]; then
|
||||
mkdir -p ../pkg/psl1ght/USRDIR/cores/info
|
||||
cp -fv ../../dist/info/"${name}_libretro.info" ../pkg/psl1ght/USRDIR/pkg/cores/info/"${name}_libretro.info"
|
||||
mkdir -p ../pkg/psl1ght/pkg/USRDIR/cores/info
|
||||
cp -fv ../../dist/info/"${name}_libretro.info" ../pkg/psl1ght/pkg/USRDIR/cores/info/"${name}_libretro.info"
|
||||
fi
|
||||
elif [ $platform = "ps3" ] ; then
|
||||
if [ $PLATFORM = "ode-ps3" ] ; then
|
||||
@@ -428,7 +428,7 @@ elif [ $PLATFORM = "cex-ps3" ] ; then
|
||||
find ../tools/ps3/ps3py/build -name '*.dll' -exec cp {} ../tools/ps3/ps3py \;
|
||||
../tools/ps3/ps3py/pkg.py --contentid UP0001-SSNE10000_00-0000000000000001 ../pkg/${platform}/SSNE10000/ ../pkg/${platform}/RetroArch.PS3.CEX.PS3.pkg
|
||||
elif [ $PLATFORM = "psl1ght" ] ; then
|
||||
pkg.py --contentid UP0001-SSNE10001_00-0000000000000001 ../pkg/psl1ght/pkg/ ../pkg/psl1ght/RetroArch.PSL1GHT.pkg
|
||||
${PS3DEV}/bin/pkg.py --contentid UP0001-SSNE10001_00-0000000000000001 ../pkg/psl1ght/pkg/ ../pkg/psl1ght/RetroArch.PSL1GHT.pkg
|
||||
elif [ $PLATFORM = "ode-ps3" ] ; then
|
||||
rsync -av ../pkg/${platform}_iso/PS3_GAME/USRDIR/cores/*.SELF ../pkg/${platform}/${PLATFORM}/
|
||||
$SCETOOL_PATH $SCETOOL_FLAGS_ODE ../retroarch-salamander_${platform}.elf ../pkg/${platform}_iso/PS3_GAME/USRDIR/EBOOT.BIN
|
||||
|
||||
@@ -2091,8 +2091,8 @@ static void frontend_unix_exitspawn(char *s, size_t len, char *args)
|
||||
|
||||
static uint64_t frontend_unix_get_mem_total(void)
|
||||
{
|
||||
long pages = sysconf(_SC_PHYS_PAGES);
|
||||
long page_size = sysconf(_SC_PAGE_SIZE);
|
||||
uint64_t pages = sysconf(_SC_PHYS_PAGES);
|
||||
uint64_t page_size = sysconf(_SC_PAGE_SIZE);
|
||||
return pages * page_size;
|
||||
}
|
||||
|
||||
|
||||
@@ -878,56 +878,69 @@ static bool create_win32_process(char* cmd)
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef HAVE_SAPI
|
||||
#define COBJMACROS
|
||||
#include <sapi.h>
|
||||
#include <ole2.h>
|
||||
#endif
|
||||
|
||||
ISpVoice* pVoice = NULL;
|
||||
bool USE_POWERSHELL = false;
|
||||
bool USE_NVDA = true;
|
||||
bool USE_NVDA_BRAILLE = false;
|
||||
#ifdef HAVE_SAPI
|
||||
static ISpVoice* pVoice = NULL;
|
||||
#endif
|
||||
#ifdef HAVE_NVDA
|
||||
bool USE_POWERSHELL = false;
|
||||
bool USE_NVDA = true;
|
||||
#else
|
||||
bool USE_POWERSHELL = true;
|
||||
bool USE_NVDA = false;
|
||||
#endif
|
||||
bool USE_NVDA_BRAILLE = false;
|
||||
|
||||
static bool is_narrator_running_windows(void)
|
||||
{
|
||||
DWORD status = 0;
|
||||
bool res;
|
||||
|
||||
if (USE_POWERSHELL)
|
||||
{
|
||||
if (pi_set == false)
|
||||
return false;
|
||||
if (GetExitCodeProcess(&g_pi, &status) && status == STILL_ACTIVE)
|
||||
return true;
|
||||
if (GetExitCodeProcess(g_pi.hProcess, &status))
|
||||
{
|
||||
if (status == STILL_ACTIVE)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#ifdef HAVE_NVDA
|
||||
else if (USE_NVDA)
|
||||
{
|
||||
long res=nvdaController_testIfRunning();
|
||||
if(res!=0)
|
||||
long res = nvdaController_testIfRunning();
|
||||
|
||||
if (res != 0)
|
||||
{
|
||||
/* The running nvda service wasn't found, so revert
|
||||
back to the powershell method
|
||||
*/
|
||||
RARCH_LOG("Error communicating with NVDA\n");
|
||||
return false;
|
||||
USE_POWERSHELL = true;
|
||||
USE_NVDA = false;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
/*
|
||||
nvdaController_speakText(L"This is a test speech message");
|
||||
nvdaController_brailleMessage(L"This is a test braille message");
|
||||
*/
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_SAPI
|
||||
else
|
||||
{
|
||||
SPVOICESTATUS pStatus;
|
||||
if (pVoice != NULL)
|
||||
if (pVoice)
|
||||
{
|
||||
ISpVoice_GetStatus(pVoice, &pStatus, NULL);
|
||||
if (pStatus.dwRunningState == SPRS_IS_SPEAKING)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -976,8 +989,13 @@ static bool accessibility_speak_windows(int speed,
|
||||
#ifdef HAVE_NVDA
|
||||
else if (USE_NVDA)
|
||||
{
|
||||
long res=nvdaController_testIfRunning();
|
||||
if(res!=0)
|
||||
long res = nvdaController_testIfRunning();
|
||||
const size_t cSize = strlen(speak_text) + 1;
|
||||
wchar_t *wc = malloc(sizeof(wchar_t) * cSize);
|
||||
|
||||
mbstowcs(wc, speak_text, cSize);
|
||||
|
||||
if (res != 0)
|
||||
{
|
||||
RARCH_LOG("Error communicating with NVDA\n");
|
||||
return false;
|
||||
@@ -988,36 +1006,45 @@ static bool accessibility_speak_windows(int speed,
|
||||
}
|
||||
|
||||
if (USE_NVDA_BRAILLE)
|
||||
nvdaController_brailleMessage((wchar_t*) speak_text);
|
||||
nvdaController_brailleMessage(wc);
|
||||
else
|
||||
nvdaController_speakText((wchar_t *) speak_text);
|
||||
{
|
||||
nvdaController_speakText(wc);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
#ifdef HAVE_SAPI
|
||||
else
|
||||
{
|
||||
/* stop the old voice if running */
|
||||
CoUninitialize();
|
||||
if (pVoice != NULL)
|
||||
if (pVoice)
|
||||
{
|
||||
CoUninitialize();
|
||||
ISpVoice_Release(pVoice);
|
||||
}
|
||||
pVoice = NULL;
|
||||
|
||||
/* Play the new voice */
|
||||
if (FAILED(CoInitialize(NULL)))
|
||||
return NULL;
|
||||
|
||||
hr = CoCreateInstance(&CLSID_SpVoice, NULL, CLSCTX_ALL, &IID_ISpVoice, (void **)&pVoice);
|
||||
hr = CoCreateInstance(&CLSID_SpVoice, NULL,
|
||||
CLSCTX_ALL, &IID_ISpVoice, (void **)&pVoice);
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
wchar_t wtext[1200];
|
||||
snprintf(cmd, sizeof(cmd),
|
||||
"<rate speed=\"%s\"/><volume level=\"80\"/><lang langid=\"%s\"/>%s", speeds[speed], langid, speak_text);
|
||||
mbstowcs(wtext, cmd, strlen(cmd)+1);
|
||||
|
||||
hr = ISpVoice_Speak(pVoice, (LPWSTR) wtext, SPF_ASYNC /*SVSFlagsAsync*/, NULL);
|
||||
mbstowcs(wtext, speak_text, sizeof(wtext));
|
||||
|
||||
hr = ISpVoice_Speak(pVoice, wtext, SPF_ASYNC /*SVSFlagsAsync*/, NULL);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -793,9 +793,6 @@ static bool drm_gfx_frame(void *data, const void *frame, unsigned width,
|
||||
menu_driver_frame(video_info);
|
||||
#endif
|
||||
|
||||
video_info->cb_update_window_title(
|
||||
video_info->context_data);
|
||||
|
||||
/* Update main surface: locate free page, blit and flip. */
|
||||
drm_surface_update(_drmvars, frame, _drmvars->main_surface);
|
||||
return true;
|
||||
|
||||
+6
-24
@@ -349,8 +349,9 @@ static bool gdi_gfx_frame(void *data, const void *frame,
|
||||
|
||||
InvalidateRect(hwnd, NULL, false);
|
||||
|
||||
video_info->cb_update_window_title(
|
||||
video_info->context_data);
|
||||
if (gdi->ctx_driver->update_window_title)
|
||||
gdi->ctx_driver->update_window_title(
|
||||
video_info->context_data);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -490,25 +491,6 @@ static void gdi_set_texture_frame(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
static void gdi_get_video_output_size(void *data,
|
||||
unsigned *width, unsigned *height)
|
||||
{
|
||||
gfx_ctx_size_t size_data;
|
||||
size_data.width = width;
|
||||
size_data.height = height;
|
||||
video_context_driver_get_video_output_size(&size_data);
|
||||
}
|
||||
|
||||
static void gdi_get_video_output_prev(void *data)
|
||||
{
|
||||
video_context_driver_get_video_output_prev();
|
||||
}
|
||||
|
||||
static void gdi_get_video_output_next(void *data)
|
||||
{
|
||||
video_context_driver_get_video_output_next();
|
||||
}
|
||||
|
||||
static void gdi_set_video_mode(void *data, unsigned width, unsigned height,
|
||||
bool fullscreen)
|
||||
{
|
||||
@@ -589,9 +571,9 @@ static const video_poke_interface_t gdi_poke_interface = {
|
||||
gdi_set_video_mode,
|
||||
win32_get_refresh_rate,
|
||||
NULL,
|
||||
gdi_get_video_output_size,
|
||||
gdi_get_video_output_prev,
|
||||
gdi_get_video_output_next,
|
||||
NULL, /* get_video_output_size */
|
||||
NULL, /* get_video_output_prev */
|
||||
NULL, /* get_video_output_next */
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
+5
-4
@@ -3065,8 +3065,8 @@ static bool gl2_frame(void *data, const void *frame,
|
||||
font_driver_render_msg(gl, msg, NULL, NULL);
|
||||
}
|
||||
|
||||
if (video_info->cb_update_window_title)
|
||||
video_info->cb_update_window_title(context_data);
|
||||
if (gl->ctx_driver->update_window_title)
|
||||
gl->ctx_driver->update_window_title(context_data);
|
||||
|
||||
/* Reset state which could easily mess up libretro core. */
|
||||
if (gl->hw_render_fbo_init)
|
||||
@@ -3100,12 +3100,13 @@ static bool gl2_frame(void *data, const void *frame,
|
||||
&& !runloop_is_slowmotion
|
||||
&& !runloop_is_paused)
|
||||
{
|
||||
video_info->cb_swap_buffers(context_data);
|
||||
if (gl->ctx_driver->swap_buffers)
|
||||
gl->ctx_driver->swap_buffers(context_data);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
}
|
||||
#endif
|
||||
|
||||
video_info->cb_swap_buffers(context_data);
|
||||
gl->ctx_driver->swap_buffers(context_data);
|
||||
|
||||
/* check if we are fast forwarding or in menu, if we are ignore hard sync */
|
||||
if ( gl->have_sync
|
||||
|
||||
+5
-4
@@ -869,8 +869,9 @@ static bool gl1_gfx_frame(void *data, const void *frame,
|
||||
if (msg)
|
||||
font_driver_render_msg(gl1, msg, NULL, NULL);
|
||||
|
||||
video_info->cb_update_window_title(
|
||||
video_info->context_data);
|
||||
if (gl1->ctx_driver->update_window_title)
|
||||
gl1->ctx_driver->update_window_title(
|
||||
video_info->context_data);
|
||||
|
||||
/* Screenshots. */
|
||||
if (gl1->readback_buffer_screenshot)
|
||||
@@ -888,12 +889,12 @@ static bool gl1_gfx_frame(void *data, const void *frame,
|
||||
&& !video_info->runloop_is_slowmotion
|
||||
&& !video_info->runloop_is_paused)
|
||||
{
|
||||
video_info->cb_swap_buffers(video_info->context_data);
|
||||
gl1->ctx_driver->swap_buffers(video_info->context_data);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
}
|
||||
#endif
|
||||
|
||||
video_info->cb_swap_buffers(video_info->context_data);
|
||||
gl1->ctx_driver->swap_buffers(video_info->context_data);
|
||||
|
||||
/* check if we are fast forwarding or in menu, if we are ignore hard sync */
|
||||
if (video_info->hard_sync
|
||||
|
||||
@@ -1949,7 +1949,8 @@ static bool gl_core_frame(void *data, const void *frame,
|
||||
font_driver_render_msg(gl, msg, NULL, NULL);
|
||||
}
|
||||
|
||||
video_info->cb_update_window_title(context_data);
|
||||
if (gl->ctx_driver->update_window_title)
|
||||
gl->ctx_driver->update_window_title(context_data);
|
||||
|
||||
if (gl->readback_buffer_screenshot)
|
||||
{
|
||||
@@ -1973,11 +1974,11 @@ static bool gl_core_frame(void *data, const void *frame,
|
||||
&& !runloop_is_slowmotion
|
||||
&& !runloop_is_paused)
|
||||
{
|
||||
video_info->cb_swap_buffers(context_data);
|
||||
gl->ctx_driver->swap_buffers(context_data);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
}
|
||||
|
||||
video_info->cb_swap_buffers(context_data);
|
||||
gl->ctx_driver->swap_buffers(context_data);
|
||||
|
||||
if (video_info->hard_sync &&
|
||||
!input_driver_nonblock_state &&
|
||||
|
||||
@@ -176,6 +176,7 @@ static void render_msg(oga_video_t* vid, go2_surface_t* surface, const char* msg
|
||||
const struct font_atlas* atlas = vid->font_driver->get_atlas(vid->font);
|
||||
int msg_width = get_message_width(vid, msg);
|
||||
int dest_x = MAX(0, width - get_message_width(vid, msg));
|
||||
int dest_stride = go2_surface_stride_get(surface);
|
||||
|
||||
const char* c = msg;
|
||||
while (*c) {
|
||||
@@ -202,7 +203,7 @@ static void render_msg(oga_video_t* vid, go2_surface_t* surface, const char* msg
|
||||
*(dest++) = px;
|
||||
}
|
||||
}
|
||||
dest += go2_surface_stride_get(surface) - g->advance_x * bpp;
|
||||
dest += dest_stride - g->advance_x * bpp;
|
||||
source += atlas->width - g->width;
|
||||
}
|
||||
|
||||
@@ -239,10 +240,11 @@ static bool oga_gfx_frame(void *data, const void *frame, unsigned width,
|
||||
uint8_t* dst = (uint8_t*)go2_surface_map(dst_surface);
|
||||
int yy = height;
|
||||
int stride = width * bpp;
|
||||
int dst_stride = go2_surface_stride_get(dst_surface);
|
||||
while (yy > 0) {
|
||||
memcpy(dst, src, stride);
|
||||
src += pitch;
|
||||
dst += go2_surface_stride_get(dst_surface);
|
||||
dst += dst_stride;
|
||||
--yy;
|
||||
}
|
||||
|
||||
|
||||
+4
-3
@@ -454,9 +454,10 @@ static bool vg_frame(void *data, const void *frame,
|
||||
vg_draw_message(vg, msg);
|
||||
#endif
|
||||
|
||||
video_info->cb_update_window_title(
|
||||
video_info->context_data);
|
||||
video_info->cb_swap_buffers(video_info->context_data);
|
||||
if (vg->ctx_driver->update_window_title)
|
||||
vg->ctx_driver->update_window_title(video_info->context_data);
|
||||
|
||||
vg->ctx_driver->swap_buffers(video_info->context_data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -229,9 +229,6 @@ static bool vga_gfx_frame(void *data, const void *frame,
|
||||
if (msg)
|
||||
font_driver_render_msg(data, msg, NULL, NULL);
|
||||
|
||||
video_info->cb_update_window_title(
|
||||
video_info->context_data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1659,7 +1659,7 @@ static void vulkan_inject_black_frame(vk_t *vk, video_frame_info_t *video_info,
|
||||
slock_unlock(vk->context->queue_lock);
|
||||
#endif
|
||||
|
||||
video_info->cb_swap_buffers(context_data);
|
||||
vk->ctx_driver->swap_buffers(context_data);
|
||||
}
|
||||
|
||||
static bool vulkan_frame(void *data, const void *frame,
|
||||
@@ -1686,7 +1686,6 @@ static bool vulkan_frame(void *data, const void *frame,
|
||||
struct font_params *osd_params = (struct font_params*)
|
||||
&video_info->osd_stat_params;
|
||||
|
||||
|
||||
VkCommandBufferBeginInfo begin_info = {
|
||||
VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO };
|
||||
VkRenderPassBeginInfo rp_info = {
|
||||
@@ -1974,7 +1973,7 @@ static bool vulkan_frame(void *data, const void *frame,
|
||||
if (osd_params)
|
||||
font_driver_render_msg(vk,
|
||||
stat_text,
|
||||
&osd_params, NULL);
|
||||
osd_params, NULL);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -2116,10 +2115,13 @@ static bool vulkan_frame(void *data, const void *frame,
|
||||
slock_unlock(vk->context->queue_lock);
|
||||
#endif
|
||||
|
||||
video_info->cb_swap_buffers(context_data);
|
||||
vk->ctx_driver->swap_buffers(context_data);
|
||||
|
||||
if (!vk->context->swap_interval_emulation_lock)
|
||||
video_info->cb_update_window_title(context_data);
|
||||
{
|
||||
if (vk->ctx_driver->update_window_title)
|
||||
vk->ctx_driver->update_window_title(context_data);
|
||||
}
|
||||
|
||||
/* Handle spurious swapchain invalidations as soon as we can,
|
||||
* i.e. right after swap buffers. */
|
||||
|
||||
@@ -89,6 +89,7 @@ static void gfx_display_wiiu_draw(gfx_display_ctx_draw_t *draw,
|
||||
}
|
||||
|
||||
}
|
||||
/* TODO come up with a better check for "not all vertexes are the same color" */
|
||||
else if (draw->coords->vertex || draw->coords->color[0] != draw->coords->color[12])
|
||||
{
|
||||
if (wiiu->vertex_cache_tex.current + 4 > wiiu->vertex_cache_tex.size)
|
||||
@@ -106,14 +107,20 @@ static void gfx_display_wiiu_draw(gfx_display_ctx_draw_t *draw,
|
||||
|
||||
if (!draw->coords->vertex)
|
||||
{
|
||||
v[0].pos.x = 0.0f;
|
||||
v[0].pos.y = 1.0f;
|
||||
v[1].pos.x = 1.0f;
|
||||
v[1].pos.y = 1.0f;
|
||||
v[2].pos.x = 0.0f;
|
||||
v[2].pos.y = 0.0f;
|
||||
v[3].pos.x = 1.0f;
|
||||
v[3].pos.y = 0.0f;
|
||||
/* Convert the libretro bottom-up coordinate system to GX2 - low y at
|
||||
the top of the screen, large y at the bottom
|
||||
The compiler will optimise 90% of this out anyway */
|
||||
float y = -(draw->y + draw->height - video_height);
|
||||
/* Remember: this is a triangle strip, not a quad, draw in a Z shape
|
||||
Bottom-left, right, top-left, right */
|
||||
v[0].pos.x = (draw->x ) / video_width;
|
||||
v[0].pos.y = (y + draw->height) / video_height;
|
||||
v[1].pos.x = (draw->x + draw->width ) / video_width;
|
||||
v[1].pos.y = (y + draw->height) / video_height;
|
||||
v[2].pos.x = (draw->x ) / video_width;
|
||||
v[2].pos.y = (y ) / video_height;
|
||||
v[3].pos.x = (draw->x + draw->width ) / video_width;
|
||||
v[3].pos.y = (y ) / video_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -243,7 +243,7 @@ static void ctr_font_render_line(
|
||||
GPU_TEVSOURCES(GPU_TEXTURE0, GPU_CONSTANT, 0),
|
||||
GPU_TEVSOURCES(GPU_TEXTURE0, GPU_CONSTANT, 0),
|
||||
0,
|
||||
GPU_TEVOPERANDS(GPU_TEVOP_RGB_SRC_R, GPU_TEVOP_RGB_SRC_ALPHA, 0),
|
||||
GPU_TEVOPERANDS(GPU_TEVOP_RGB_SRC_ALPHA, 0, 0),
|
||||
GPU_MODULATE, GPU_MODULATE,
|
||||
color);
|
||||
|
||||
@@ -329,7 +329,7 @@ static void ctr_font_render_message(
|
||||
return;
|
||||
}
|
||||
|
||||
line_height = scale / line_metrics->height;
|
||||
line_height = (float)line_metrics->height * scale / (float)height;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@@ -369,8 +369,8 @@ static void ctr_font_render_msg(
|
||||
alpha, r_dark, g_dark, b_dark, alpha_dark;
|
||||
ctr_font_t * font = (ctr_font_t*)data;
|
||||
ctr_video_t *ctr = (ctr_video_t*)userdata;
|
||||
unsigned width = ctr->vp.width;
|
||||
unsigned height = ctr->vp.height;
|
||||
unsigned width = ctr->vp.full_width;
|
||||
unsigned height = ctr->vp.full_height;
|
||||
settings_t *settings = config_get_ptr();
|
||||
float video_msg_pos_x = settings->floats.video_msg_pos_x;
|
||||
float video_msg_pos_y = settings->floats.video_msg_pos_y;
|
||||
@@ -397,7 +397,7 @@ static void ctr_font_render_msg(
|
||||
b = FONT_COLOR_GET_BLUE(params->color);
|
||||
alpha = FONT_COLOR_GET_ALPHA(params->color);
|
||||
|
||||
color = params->color;
|
||||
color = COLOR_ABGR(r, g, b, alpha);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -412,10 +412,10 @@ static void ctr_font_render_msg(
|
||||
alpha = 255;
|
||||
color = COLOR_ABGR(r, g, b, alpha);
|
||||
|
||||
drop_x = -2;
|
||||
drop_y = -2;
|
||||
drop_mod = 0.3f;
|
||||
drop_alpha = 1.0f;
|
||||
drop_x = 1;
|
||||
drop_y = -1;
|
||||
drop_mod = 0.0f;
|
||||
drop_alpha = 0.75f;
|
||||
}
|
||||
|
||||
max_glyphs = strlen(msg);
|
||||
|
||||
@@ -299,8 +299,8 @@ static void wiiu_font_render_msg(
|
||||
alpha, r_dark, g_dark, b_dark, alpha_dark;
|
||||
wiiu_video_t *wiiu = (wiiu_video_t*)userdata;
|
||||
wiiu_font_t *font = (wiiu_font_t*)data;
|
||||
unsigned width = wiiu->vp.width;
|
||||
unsigned height = wiiu->vp.height;
|
||||
unsigned width = wiiu->vp.full_width;
|
||||
unsigned height = wiiu->vp.full_height;
|
||||
settings_t *settings = config_get_ptr();
|
||||
float video_msg_pos_x = settings->floats.video_msg_pos_x;
|
||||
float video_msg_pos_y = settings->floats.video_msg_pos_y;
|
||||
|
||||
@@ -431,7 +431,7 @@ public:
|
||||
unsigned width, unsigned height,
|
||||
bool linear,
|
||||
bool mipmap,
|
||||
GLenum address);
|
||||
gl_core_filter_chain_address address);
|
||||
~StaticTexture();
|
||||
|
||||
StaticTexture(StaticTexture&&) = delete;
|
||||
@@ -449,17 +449,27 @@ private:
|
||||
|
||||
StaticTexture::StaticTexture(string id_, GLuint image_,
|
||||
unsigned width, unsigned height, bool linear, bool mipmap,
|
||||
GLenum address)
|
||||
gl_core_filter_chain_address address)
|
||||
: id(std::move(id_)), image(image_)
|
||||
{
|
||||
texture.texture.width = width;
|
||||
GLenum gl_address = address_to_gl(address);
|
||||
|
||||
texture.filter = GL_CORE_FILTER_CHAIN_NEAREST;
|
||||
texture.mip_filter = GL_CORE_FILTER_CHAIN_NEAREST;
|
||||
texture.address = address;
|
||||
texture.texture.width = width;
|
||||
texture.texture.height = height;
|
||||
texture.texture.format = 0;
|
||||
texture.texture.image = image;
|
||||
texture.texture.image = image;
|
||||
|
||||
if (linear)
|
||||
texture.filter = GL_CORE_FILTER_CHAIN_LINEAR;
|
||||
if (mipmap && linear)
|
||||
texture.mip_filter = GL_CORE_FILTER_CHAIN_LINEAR;
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, image);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, address);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, address);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, gl_address);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, gl_address);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, linear ? GL_LINEAR : GL_NEAREST);
|
||||
if (linear && mipmap)
|
||||
@@ -2126,7 +2136,7 @@ static unique_ptr<gl_core_shader::StaticTexture> gl_core_filter_chain_load_lut(
|
||||
tex, image.width, image.height,
|
||||
shader->filter != RARCH_FILTER_NEAREST,
|
||||
levels > 1,
|
||||
gl_core_shader::address_to_gl(gl_core_shader::wrap_to_address(shader->wrap))));
|
||||
gl_core_shader::wrap_to_address(shader->wrap)));
|
||||
}
|
||||
|
||||
static bool gl_core_filter_chain_load_luts(
|
||||
|
||||
+242
-211
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include <retro_miscellaneous.h>
|
||||
#include <retro_inline.h>
|
||||
|
||||
#include <lists/file_list.h>
|
||||
#include <queues/fifo_queue.h>
|
||||
@@ -74,21 +75,29 @@ static float color_task_progress_bar[16] = COLOR_HEX_TO_FLOAT(0x22B14C, 1.0f);
|
||||
static uint64_t gfx_widgets_frame_count = 0;
|
||||
|
||||
/* Font data */
|
||||
static font_data_t *font_regular = NULL;
|
||||
static font_data_t *font_bold = NULL;
|
||||
|
||||
font_data_t* gfx_widgets_get_font_regular(void)
|
||||
typedef struct
|
||||
{
|
||||
return font_regular;
|
||||
gfx_widget_font_data_t regular;
|
||||
gfx_widget_font_data_t bold;
|
||||
gfx_widget_font_data_t msg_queue;
|
||||
} gfx_widget_fonts_t;
|
||||
|
||||
static gfx_widget_fonts_t gfx_widget_fonts;
|
||||
|
||||
gfx_widget_font_data_t* gfx_widgets_get_font_regular(void)
|
||||
{
|
||||
return &gfx_widget_fonts.regular;
|
||||
}
|
||||
|
||||
font_data_t* gfx_widgets_get_font_bold(void)
|
||||
gfx_widget_font_data_t* gfx_widgets_get_font_bold(void)
|
||||
{
|
||||
return font_bold;
|
||||
return &gfx_widget_fonts.bold;
|
||||
}
|
||||
|
||||
static video_font_raster_block_t font_raster_regular;
|
||||
static video_font_raster_block_t font_raster_bold;
|
||||
gfx_widget_font_data_t* gfx_widgets_get_font_msg_queue(void)
|
||||
{
|
||||
return &gfx_widget_fonts.msg_queue;
|
||||
}
|
||||
|
||||
static float gfx_widgets_pure_white[16] = {
|
||||
1.00, 1.00, 1.00, 1.00,
|
||||
@@ -288,19 +297,12 @@ static uintptr_t ai_service_overlay_texture = 0;
|
||||
|
||||
/* Metrics */
|
||||
#define BASE_FONT_SIZE 32.0f
|
||||
#define MSG_QUEUE_FONT_SIZE (BASE_FONT_SIZE * 0.69f)
|
||||
|
||||
static float last_scale_factor = 0.0f;
|
||||
static float msg_queue_text_scale_factor = 0.0f;
|
||||
static float widget_font_size = 0.0f;
|
||||
|
||||
float gfx_widgets_get_font_size(void)
|
||||
{
|
||||
return widget_font_size;
|
||||
}
|
||||
|
||||
static unsigned simple_widget_padding = 0;
|
||||
static unsigned simple_widget_height = 0;
|
||||
static unsigned glyph_width = 0;
|
||||
|
||||
unsigned gfx_widgets_get_padding(void)
|
||||
{
|
||||
@@ -312,16 +314,10 @@ unsigned gfx_widgets_get_height(void)
|
||||
return simple_widget_height;
|
||||
}
|
||||
|
||||
unsigned gfx_widgets_get_glyph_width(void)
|
||||
{
|
||||
return glyph_width;
|
||||
}
|
||||
|
||||
static unsigned msg_queue_height;
|
||||
static unsigned msg_queue_icon_size_x;
|
||||
static unsigned msg_queue_icon_size_y;
|
||||
static unsigned msg_queue_spacing;
|
||||
static unsigned msg_queue_glyph_width;
|
||||
static unsigned msg_queue_rect_start_x;
|
||||
static unsigned msg_queue_internal_icon_size;
|
||||
static unsigned msg_queue_internal_icon_offset;
|
||||
@@ -332,7 +328,6 @@ static unsigned msg_queue_default_rect_width;
|
||||
static unsigned msg_queue_task_text_start_x;
|
||||
static unsigned msg_queue_regular_padding_x;
|
||||
static unsigned msg_queue_regular_text_start;
|
||||
static unsigned msg_queue_regular_text_base_y;
|
||||
static unsigned msg_queue_task_rect_start_x;
|
||||
static unsigned msg_queue_task_hourglass_x;
|
||||
|
||||
@@ -463,8 +458,8 @@ void gfx_widgets_msg_queue_push(
|
||||
msg_widget->unfolded = true;
|
||||
|
||||
msg_widget->width = font_driver_get_message_width(
|
||||
font_regular, title, msg_widget->msg_len,
|
||||
msg_queue_text_scale_factor) + simple_widget_padding/2;
|
||||
gfx_widget_fonts.msg_queue.font, title, msg_widget->msg_len, 1) +
|
||||
simple_widget_padding/2;
|
||||
|
||||
task->frontend_userdata = msg_widget;
|
||||
|
||||
@@ -481,9 +476,8 @@ void gfx_widgets_msg_queue_push(
|
||||
? msg_queue_default_rect_width_menu_alive
|
||||
: msg_queue_default_rect_width;
|
||||
unsigned text_width = font_driver_get_message_width(
|
||||
font_regular, title, title_length, msg_queue_text_scale_factor);
|
||||
msg_widget->text_height = msg_queue_text_scale_factor
|
||||
* widget_font_size;
|
||||
gfx_widget_fonts.msg_queue.font, title, title_length, 1);
|
||||
msg_widget->text_height = gfx_widget_fonts.msg_queue.line_height;
|
||||
|
||||
/* Text is too wide, split it into two lines */
|
||||
if (text_width > width)
|
||||
@@ -497,13 +491,10 @@ void gfx_widgets_msg_queue_push(
|
||||
word_wrap(msg, msg, (title_length * width) / text_width,
|
||||
false, 2);
|
||||
|
||||
msg_widget->text_height *= 2.5f;
|
||||
msg_widget->text_height *= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
width = text_width;
|
||||
msg_widget->text_height *= 1.35f;
|
||||
}
|
||||
width = text_width;
|
||||
|
||||
msg_widget->msg = msg;
|
||||
msg_widget->msg_len = (unsigned)strlen(msg);
|
||||
@@ -525,7 +516,7 @@ void gfx_widgets_msg_queue_push(
|
||||
{
|
||||
unsigned len = (unsigned)strlen(task->title);
|
||||
unsigned new_width = font_driver_get_message_width(
|
||||
font_regular, task->title, len, msg_queue_text_scale_factor);
|
||||
gfx_widget_fonts.msg_queue.font, task->title, len, 1);
|
||||
|
||||
if (msg_widget->msg_new)
|
||||
{
|
||||
@@ -850,6 +841,47 @@ static void gfx_widgets_draw_icon_blend(
|
||||
}
|
||||
#endif
|
||||
|
||||
void gfx_widgets_draw_text(
|
||||
gfx_widget_font_data_t* font_data,
|
||||
const char *text,
|
||||
float x, float y,
|
||||
int width, int height,
|
||||
uint32_t color,
|
||||
enum text_alignment text_align,
|
||||
bool draw_outside)
|
||||
{
|
||||
if (!font_data || string_is_empty(text))
|
||||
return;
|
||||
|
||||
gfx_display_draw_text(
|
||||
font_data->font,
|
||||
text,
|
||||
x, y,
|
||||
width, height,
|
||||
color,
|
||||
text_align,
|
||||
1.0f,
|
||||
false,
|
||||
0.0f,
|
||||
draw_outside);
|
||||
|
||||
font_data->usage_count++;
|
||||
}
|
||||
|
||||
void gfx_widgets_flush_text(
|
||||
unsigned video_width, unsigned video_height,
|
||||
gfx_widget_font_data_t* font_data)
|
||||
{
|
||||
/* Flushing is slow - only do it if font
|
||||
* has actually been used */
|
||||
if (!font_data || (font_data->usage_count == 0))
|
||||
return;
|
||||
|
||||
font_driver_flush(video_width, video_height, font_data->font);
|
||||
font_data->raster_block.carr.coords.vertices = 0;
|
||||
font_data->usage_count = 0;
|
||||
}
|
||||
|
||||
float gfx_widgets_get_thumbnail_scale_factor(
|
||||
const float dst_width, const float dst_height,
|
||||
const float image_width, const float image_height)
|
||||
@@ -1084,7 +1116,7 @@ static int gfx_widgets_draw_indicator(
|
||||
unsigned height = simple_widget_height;
|
||||
const char *txt = msg_hash_to_str(msg);
|
||||
|
||||
width = font_driver_get_message_width(font_regular, txt, (unsigned)strlen(txt), 1) + simple_widget_padding*2;
|
||||
width = font_driver_get_message_width(gfx_widget_fonts.regular.font, txt, (unsigned)strlen(txt), 1) + simple_widget_padding*2;
|
||||
|
||||
gfx_display_draw_quad(userdata,
|
||||
video_width, video_height,
|
||||
@@ -1094,14 +1126,12 @@ static int gfx_widgets_draw_indicator(
|
||||
gfx_widgets_backdrop_orig
|
||||
);
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
txt,
|
||||
top_right_x_advance - width + simple_widget_padding, widget_font_size + simple_widget_padding/4,
|
||||
video_width, video_height,
|
||||
0xFFFFFFFF, TEXT_ALIGN_LEFT,
|
||||
1.0f,
|
||||
false, 0, false
|
||||
);
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.regular,
|
||||
txt,
|
||||
top_right_x_advance - width + simple_widget_padding, y + (height / 2.0f) + gfx_widget_fonts.regular.line_centre_offset,
|
||||
video_width, video_height,
|
||||
0xFFFFFFFF, TEXT_ALIGN_LEFT,
|
||||
false);
|
||||
}
|
||||
|
||||
return width;
|
||||
@@ -1120,6 +1150,7 @@ static void gfx_widgets_draw_task_msg(
|
||||
unsigned rect_y;
|
||||
unsigned rect_width;
|
||||
unsigned rect_height;
|
||||
float text_y_base;
|
||||
|
||||
float *msg_queue_current_background;
|
||||
float *msg_queue_current_bar;
|
||||
@@ -1131,7 +1162,7 @@ static void gfx_widgets_draw_task_msg(
|
||||
if (msg->msg_new)
|
||||
draw_msg_new = !string_is_equal(msg->msg_new, msg->msg);
|
||||
|
||||
task_percentage_offset = glyph_width * (msg->task_error ? 12 : 5) + simple_widget_padding * 1.25f; /*11 = strlen("Task failed")+1 */
|
||||
task_percentage_offset = gfx_widget_fonts.msg_queue.glyph_width * (msg->task_error ? 12 : 5) + simple_widget_padding * 1.25f; /*11 = strlen("Task failed")+1 */
|
||||
|
||||
if (msg->task_finished)
|
||||
{
|
||||
@@ -1210,64 +1241,52 @@ static void gfx_widgets_draw_task_msg(
|
||||
gfx_display_blend_end(userdata);
|
||||
|
||||
/* Text */
|
||||
text_y_base = video_height - msg->offset_y + msg_queue_height/4.0f + gfx_widget_fonts.msg_queue.line_centre_offset;
|
||||
|
||||
if (draw_msg_new)
|
||||
{
|
||||
font_driver_flush(video_width, video_height, font_regular);
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.msg_queue);
|
||||
|
||||
gfx_display_scissor_begin(userdata,
|
||||
video_width, video_height,
|
||||
rect_x, rect_y, rect_width, rect_height);
|
||||
gfx_display_draw_text(font_regular,
|
||||
msg->msg_new,
|
||||
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.msg_queue,
|
||||
msg->msg_new,
|
||||
msg_queue_task_text_start_x,
|
||||
text_y_base - msg_queue_height/2.0f + msg->msg_transition_animation,
|
||||
video_width, video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_LEFT,
|
||||
true);
|
||||
}
|
||||
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.msg_queue,
|
||||
msg->msg,
|
||||
msg_queue_task_text_start_x,
|
||||
video_height - msg->offset_y + msg_queue_text_scale_factor * widget_font_size + msg_queue_height/4 - widget_font_size/2.25f - msg_queue_height/2 + msg->msg_transition_animation,
|
||||
text_y_base + msg->msg_transition_animation,
|
||||
video_width, video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_LEFT,
|
||||
msg_queue_text_scale_factor,
|
||||
false,
|
||||
0,
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
msg->msg,
|
||||
msg_queue_task_text_start_x,
|
||||
video_height - msg->offset_y + msg_queue_text_scale_factor * widget_font_size + msg_queue_height/4 - widget_font_size/2.25f + msg->msg_transition_animation,
|
||||
video_width, video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_LEFT,
|
||||
msg_queue_text_scale_factor,
|
||||
false,
|
||||
0,
|
||||
true
|
||||
);
|
||||
true);
|
||||
|
||||
if (draw_msg_new)
|
||||
{
|
||||
font_driver_flush(video_width, video_height, font_regular);
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.msg_queue);
|
||||
gfx_display_scissor_end(userdata,
|
||||
video_width, video_height);
|
||||
}
|
||||
|
||||
/* Progress text */
|
||||
text_color = COLOR_TEXT_ALPHA(0xFFFFFF00, (unsigned)(msg->alpha/2*255.0f));
|
||||
gfx_display_draw_text(font_regular,
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.msg_queue,
|
||||
task_percentage,
|
||||
msg_queue_rect_start_x - msg_queue_icon_size_x + rect_width - msg_queue_glyph_width,
|
||||
video_height - msg->offset_y + msg_queue_text_scale_factor * widget_font_size + msg_queue_height/4 - widget_font_size/2.25f,
|
||||
msg_queue_rect_start_x - msg_queue_icon_size_x + rect_width - gfx_widget_fonts.msg_queue.glyph_width,
|
||||
text_y_base,
|
||||
video_width, video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_RIGHT,
|
||||
msg_queue_text_scale_factor,
|
||||
false,
|
||||
0,
|
||||
true
|
||||
);
|
||||
true);
|
||||
}
|
||||
|
||||
static void gfx_widgets_draw_regular_msg(
|
||||
@@ -1290,11 +1309,9 @@ static void gfx_widgets_draw_regular_msg(
|
||||
|
||||
if (!msg->unfolded || msg->unfolding)
|
||||
{
|
||||
font_driver_flush(video_width, video_height, font_regular);
|
||||
font_driver_flush(video_width, video_height, font_bold);
|
||||
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
font_raster_bold.carr.coords.vertices = 0;
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.regular);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.bold);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.msg_queue);
|
||||
|
||||
gfx_display_scissor_begin(userdata,
|
||||
video_width, video_height,
|
||||
@@ -1333,23 +1350,20 @@ static void gfx_widgets_draw_regular_msg(
|
||||
/* Text */
|
||||
text_color = COLOR_TEXT_ALPHA(0xFFFFFF00, (unsigned)(msg->alpha*255.0f));
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.msg_queue,
|
||||
msg->msg,
|
||||
msg_queue_regular_text_start - ((1.0f-msg->unfold) * msg->width/2),
|
||||
video_height - msg->offset_y + msg_queue_regular_text_base_y - msg->text_height/2,
|
||||
video_height - msg->offset_y + (msg_queue_height - msg->text_height)/2.0f + gfx_widget_fonts.msg_queue.line_ascender,
|
||||
video_width, video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_LEFT,
|
||||
msg_queue_text_scale_factor, false, 0, true
|
||||
);
|
||||
true);
|
||||
|
||||
if (!msg->unfolded || msg->unfolding)
|
||||
{
|
||||
font_driver_flush(video_width, video_height, font_regular);
|
||||
font_driver_flush(video_width, video_height, font_bold);
|
||||
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
font_raster_bold.carr.coords.vertices = 0;
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.regular);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.bold);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.msg_queue);
|
||||
|
||||
gfx_display_scissor_end(userdata,
|
||||
video_width, video_height);
|
||||
@@ -1439,27 +1453,23 @@ static void gfx_widgets_draw_load_content_animation(
|
||||
);
|
||||
gfx_display_blend_end(userdata);
|
||||
|
||||
/* Text */
|
||||
gfx_display_draw_text(font_bold,
|
||||
load_content_animation_content_name,
|
||||
video_width / 2,
|
||||
video_height / 2 + (175 + 25) * last_scale_factor + text_offset,
|
||||
video_width,
|
||||
video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_CENTER,
|
||||
1,
|
||||
false,
|
||||
0,
|
||||
false
|
||||
);
|
||||
/* Text
|
||||
* TODO/FIXME: Check vertical alignment - where is
|
||||
* this text actually meant to go...? */
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.bold,
|
||||
load_content_animation_content_name,
|
||||
video_width / 2,
|
||||
video_height / 2 + (175 + 25) * last_scale_factor + text_offset + gfx_widget_fonts.bold.line_centre_offset,
|
||||
video_width,
|
||||
video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_CENTER,
|
||||
false);
|
||||
|
||||
/* Flush text layer */
|
||||
font_driver_flush(video_width, video_height, font_regular);
|
||||
font_driver_flush(video_width, video_height, font_bold);
|
||||
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
font_raster_bold.carr.coords.vertices = 0;
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.regular);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.bold);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.msg_queue);
|
||||
|
||||
/* Everything disappears */
|
||||
gfx_widgets_draw_backdrop(userdata,
|
||||
@@ -1468,6 +1478,18 @@ static void gfx_widgets_draw_load_content_animation(
|
||||
#endif
|
||||
}
|
||||
|
||||
static void INLINE gfx_widgets_font_bind(gfx_widget_font_data_t *font_data)
|
||||
{
|
||||
font_driver_bind_block(font_data->font, &font_data->raster_block);
|
||||
font_data->raster_block.carr.coords.vertices = 0;
|
||||
font_data->usage_count = 0;
|
||||
}
|
||||
|
||||
static void INLINE gfx_widgets_font_unbind(gfx_widget_font_data_t *font_data)
|
||||
{
|
||||
font_driver_bind_block(font_data->font, NULL);
|
||||
}
|
||||
|
||||
void gfx_widgets_frame(void *data)
|
||||
{
|
||||
/* (Pointless) optimisation: allocating these
|
||||
@@ -1512,11 +1534,9 @@ void gfx_widgets_frame(void *data)
|
||||
gfx_display_set_viewport(video_width, video_height);
|
||||
|
||||
/* Font setup */
|
||||
font_driver_bind_block(font_regular, &font_raster_regular);
|
||||
font_driver_bind_block(font_bold, &font_raster_bold);
|
||||
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
font_raster_bold.carr.coords.vertices = 0;
|
||||
gfx_widgets_font_bind(&gfx_widget_fonts.regular);
|
||||
gfx_widgets_font_bind(&gfx_widget_fonts.bold);
|
||||
gfx_widgets_font_bind(&gfx_widget_fonts.msg_queue);
|
||||
|
||||
#ifdef HAVE_TRANSLATE
|
||||
/* AI Service overlay */
|
||||
@@ -1650,33 +1670,30 @@ void gfx_widgets_frame(void *data)
|
||||
gfx_widgets_backdrop_orig);
|
||||
|
||||
/* Title */
|
||||
gfx_display_draw_text(font_regular,
|
||||
msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED),
|
||||
cheevo_height + simple_widget_padding - unfold_offet,
|
||||
widget_font_size * 1.9f + cheevo_y,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_FAINT,
|
||||
TEXT_ALIGN_LEFT,
|
||||
1, false, 0, true
|
||||
);
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.regular,
|
||||
msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED),
|
||||
cheevo_height + simple_widget_padding - unfold_offet,
|
||||
cheevo_y + gfx_widget_fonts.regular.line_height + gfx_widget_fonts.regular.line_ascender,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_FAINT,
|
||||
TEXT_ALIGN_LEFT,
|
||||
true);
|
||||
|
||||
/* Title */
|
||||
/* Cheevo name */
|
||||
|
||||
/* TODO: is a ticker necessary ? */
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
cheevo_popup_queue[cheevo_popup_queue_read_index].title,
|
||||
cheevo_height + simple_widget_padding - unfold_offet, widget_font_size * 2.9f + cheevo_y,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_INFO,
|
||||
TEXT_ALIGN_LEFT,
|
||||
1, false, 0, true
|
||||
);
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.regular,
|
||||
cheevo_popup_queue[cheevo_popup_queue_read_index].title,
|
||||
cheevo_height + simple_widget_padding - unfold_offet,
|
||||
cheevo_y + cheevo_height - gfx_widget_fonts.regular.line_height - gfx_widget_fonts.regular.line_descender,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_INFO,
|
||||
TEXT_ALIGN_LEFT,
|
||||
true);
|
||||
|
||||
if (scissor_me_timbers)
|
||||
{
|
||||
font_driver_flush(video_width, video_height, font_regular);
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.regular);
|
||||
gfx_display_scissor_end(userdata,
|
||||
video_width, video_height);
|
||||
}
|
||||
@@ -1710,7 +1727,7 @@ void gfx_widgets_frame(void *data)
|
||||
{
|
||||
const char *text = *gfx_widgets_fps_text == '\0' ? "N/A" : gfx_widgets_fps_text;
|
||||
|
||||
int text_width = font_driver_get_message_width(font_regular, text, (unsigned)strlen(text), 1.0f);
|
||||
int text_width = font_driver_get_message_width(gfx_widget_fonts.regular.font, text, (unsigned)strlen(text), 1.0f);
|
||||
int total_width = text_width + simple_widget_padding * 2;
|
||||
|
||||
int fps_text_x = top_right_x_advance - simple_widget_padding - text_width;
|
||||
@@ -1729,14 +1746,13 @@ void gfx_widgets_frame(void *data)
|
||||
gfx_widgets_backdrop_orig
|
||||
);
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
text,
|
||||
fps_text_x, widget_font_size + simple_widget_padding/4,
|
||||
video_width, video_height,
|
||||
0xFFFFFFFF,
|
||||
TEXT_ALIGN_LEFT,
|
||||
1, false,0, true
|
||||
);
|
||||
gfx_widgets_draw_text(&gfx_widget_fonts.regular,
|
||||
text,
|
||||
fps_text_x, simple_widget_height/2.0f + gfx_widget_fonts.regular.line_centre_offset,
|
||||
video_width, video_height,
|
||||
0xFFFFFFFF,
|
||||
TEXT_ALIGN_LEFT,
|
||||
true);
|
||||
}
|
||||
|
||||
/* Indicators */
|
||||
@@ -1754,7 +1770,7 @@ void gfx_widgets_frame(void *data)
|
||||
video_width,
|
||||
video_height,
|
||||
gfx_widgets_icons_textures[MENU_WIDGETS_ICON_FAST_FORWARD], (fps_show ? simple_widget_height : 0), top_right_x_advance,
|
||||
MSG_PAUSED);
|
||||
MSG_FAST_FORWARD);
|
||||
|
||||
if (widgets_is_rewinding)
|
||||
top_right_x_advance -= gfx_widgets_draw_indicator(
|
||||
@@ -1788,13 +1804,16 @@ void gfx_widgets_frame(void *data)
|
||||
else
|
||||
#endif
|
||||
{
|
||||
font_driver_flush(video_width, video_height, font_regular);
|
||||
font_driver_flush(video_width, video_height, font_bold);
|
||||
|
||||
font_raster_regular.carr.coords.vertices = 0;
|
||||
font_raster_bold.carr.coords.vertices = 0;
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.regular);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.bold);
|
||||
gfx_widgets_flush_text(video_width, video_height, &gfx_widget_fonts.msg_queue);
|
||||
}
|
||||
|
||||
/* Unbind fonts */
|
||||
gfx_widgets_font_unbind(&gfx_widget_fonts.regular);
|
||||
gfx_widgets_font_unbind(&gfx_widget_fonts.bold);
|
||||
gfx_widgets_font_unbind(&gfx_widget_fonts.msg_queue);
|
||||
|
||||
gfx_display_unset_viewport(video_width, video_height);
|
||||
}
|
||||
|
||||
@@ -1861,71 +1880,80 @@ void gfx_widgets_deinit(void)
|
||||
gfx_widgets_free();
|
||||
}
|
||||
|
||||
static void gfx_widgets_font_init(
|
||||
gfx_widget_font_data_t *font_data,
|
||||
bool is_threaded, char *font_path, float font_size)
|
||||
{
|
||||
float scaled_size = font_size * last_scale_factor;
|
||||
int glyph_width = 0;
|
||||
|
||||
/* Free existing font */
|
||||
if (font_data->font)
|
||||
{
|
||||
gfx_display_font_free(font_data->font);
|
||||
font_data->font = NULL;
|
||||
}
|
||||
|
||||
/* Get approximate glyph width */
|
||||
font_data->glyph_width = scaled_size * (3.0f / 4.0f);
|
||||
|
||||
/* Create font */
|
||||
font_data->font = gfx_display_font_file(font_path, scaled_size, is_threaded);
|
||||
|
||||
/* Get font metadata */
|
||||
glyph_width = font_driver_get_message_width(font_data->font, "a", 1, 1.0f);
|
||||
if (glyph_width > 0)
|
||||
font_data->glyph_width = (float)glyph_width;
|
||||
font_data->line_height = (float)font_driver_get_line_height(font_data->font, 1.0f);
|
||||
font_data->line_ascender = (float)font_driver_get_line_ascender(font_data->font, 1.0f);
|
||||
font_data->line_descender = (float)font_driver_get_line_descender(font_data->font, 1.0f);
|
||||
font_data->line_centre_offset = (float)font_driver_get_line_centre_offset(font_data->font, 1.0f);
|
||||
|
||||
font_data->usage_count = 0;
|
||||
}
|
||||
|
||||
static void gfx_widgets_layout(
|
||||
bool is_threaded, const char *dir_assets, char *font_path)
|
||||
{
|
||||
size_t i;
|
||||
int font_height = 0;
|
||||
|
||||
/* Base font size must be determined first
|
||||
* > Note that size must be at least 2,
|
||||
* otherwise gfx_display_font_file() will
|
||||
* generate a heap-buffer-overflow */
|
||||
widget_font_size = BASE_FONT_SIZE * last_scale_factor;
|
||||
widget_font_size = (widget_font_size > 2.0f) ? widget_font_size : 2.0f;
|
||||
|
||||
/* Initialise fonts */
|
||||
|
||||
/* > Free existing */
|
||||
if (font_regular)
|
||||
{
|
||||
gfx_display_font_free(font_regular);
|
||||
font_regular = NULL;
|
||||
}
|
||||
if (font_bold)
|
||||
{
|
||||
gfx_display_font_free(font_bold);
|
||||
font_bold = NULL;
|
||||
}
|
||||
|
||||
/* > Create new */
|
||||
if (string_is_empty(font_path))
|
||||
{
|
||||
char ozone_path[PATH_MAX_LENGTH];
|
||||
char font_path[PATH_MAX_LENGTH];
|
||||
char font_file[PATH_MAX_LENGTH];
|
||||
|
||||
ozone_path[0] = '\0';
|
||||
font_path[0] = '\0';
|
||||
font_file[0] = '\0';
|
||||
|
||||
/* Base path */
|
||||
fill_pathname_join(ozone_path, dir_assets, "ozone", sizeof(ozone_path));
|
||||
|
||||
/* Create regular font */
|
||||
fill_pathname_join(font_path, ozone_path, "regular.ttf", sizeof(font_path));
|
||||
font_regular = gfx_display_font_file(font_path, widget_font_size, is_threaded);
|
||||
fill_pathname_join(font_file, ozone_path, "regular.ttf", sizeof(font_file));
|
||||
gfx_widgets_font_init(&gfx_widget_fonts.regular, is_threaded, font_file, BASE_FONT_SIZE);
|
||||
|
||||
/* Create bold font */
|
||||
fill_pathname_join(font_path, ozone_path, "bold.ttf", sizeof(font_path));
|
||||
font_bold = gfx_display_font_file(font_path, widget_font_size, is_threaded);
|
||||
fill_pathname_join(font_file, ozone_path, "bold.ttf", sizeof(font_file));
|
||||
gfx_widgets_font_init(&gfx_widget_fonts.bold, is_threaded, font_file, BASE_FONT_SIZE);
|
||||
|
||||
/* Create msg_queue font */
|
||||
fill_pathname_join(font_file, ozone_path, "regular.ttf", sizeof(font_file));
|
||||
gfx_widgets_font_init(&gfx_widget_fonts.msg_queue, is_threaded, font_file, MSG_QUEUE_FONT_SIZE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Load fonts from user-supplied path */
|
||||
font_regular = gfx_display_font_file(font_path, widget_font_size, is_threaded);
|
||||
font_bold = gfx_display_font_file(font_path, widget_font_size, is_threaded);
|
||||
gfx_widgets_font_init(&gfx_widget_fonts.regular, is_threaded, font_path, BASE_FONT_SIZE);
|
||||
gfx_widgets_font_init(&gfx_widget_fonts.bold, is_threaded, font_path, BASE_FONT_SIZE);
|
||||
gfx_widgets_font_init(&gfx_widget_fonts.msg_queue, is_threaded, font_path, MSG_QUEUE_FONT_SIZE);
|
||||
}
|
||||
|
||||
/* > Get actual font size */
|
||||
font_height = font_driver_get_line_height(font_regular, 1.0f);
|
||||
if (font_height > 0)
|
||||
widget_font_size = (float)font_height;
|
||||
|
||||
/* Calculate dimensions */
|
||||
simple_widget_padding = widget_font_size * 2.0f/3.0f;
|
||||
simple_widget_height = widget_font_size + simple_widget_padding;
|
||||
glyph_width = font_driver_get_message_width(font_regular, "a", 1, 1);
|
||||
simple_widget_padding = gfx_widget_fonts.regular.line_height * 2.0f/3.0f;
|
||||
simple_widget_height = gfx_widget_fonts.regular.line_height + simple_widget_padding;
|
||||
|
||||
msg_queue_height = widget_font_size * 2.5f;
|
||||
msg_queue_height = gfx_widget_fonts.msg_queue.line_height * 2.5f * (BASE_FONT_SIZE / MSG_QUEUE_FONT_SIZE);
|
||||
|
||||
if (msg_queue_has_icons)
|
||||
{
|
||||
@@ -1938,9 +1966,7 @@ static void gfx_widgets_layout(
|
||||
msg_queue_icon_size_y = 0;
|
||||
}
|
||||
|
||||
msg_queue_text_scale_factor = 0.69f;
|
||||
msg_queue_spacing = msg_queue_height / 3;
|
||||
msg_queue_glyph_width = glyph_width * msg_queue_text_scale_factor;
|
||||
msg_queue_rect_start_x = msg_queue_spacing + msg_queue_icon_size_x;
|
||||
msg_queue_internal_icon_size = msg_queue_icon_size_y;
|
||||
msg_queue_internal_icon_offset = (msg_queue_icon_size_y - msg_queue_internal_icon_size)/2;
|
||||
@@ -1957,16 +1983,15 @@ static void gfx_widgets_layout(
|
||||
msg_queue_task_text_start_x = msg_queue_task_rect_start_x + msg_queue_height/2;
|
||||
|
||||
if (!gfx_widgets_icons_textures[MENU_WIDGETS_ICON_HOURGLASS])
|
||||
msg_queue_task_text_start_x -= msg_queue_glyph_width*2;
|
||||
msg_queue_task_text_start_x -= gfx_widget_fonts.msg_queue.glyph_width * 2.0f;
|
||||
|
||||
msg_queue_regular_text_start = msg_queue_rect_start_x + msg_queue_regular_padding_x;
|
||||
msg_queue_regular_text_base_y = widget_font_size * msg_queue_text_scale_factor + msg_queue_height/2;
|
||||
|
||||
msg_queue_task_hourglass_x = msg_queue_rect_start_x - msg_queue_icon_size_x;
|
||||
|
||||
generic_message_height = widget_font_size * 2;
|
||||
generic_message_height = gfx_widget_fonts.regular.line_height * 2.0f;
|
||||
|
||||
msg_queue_default_rect_width_menu_alive = msg_queue_glyph_width * 40;
|
||||
msg_queue_default_rect_width_menu_alive = gfx_widget_fonts.msg_queue.glyph_width * 40.0f;
|
||||
msg_queue_default_rect_width = last_video_width - msg_queue_regular_text_start - (2 * simple_widget_padding);
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
@@ -2065,6 +2090,15 @@ static void gfx_widgets_context_reset(bool is_threaded,
|
||||
video_driver_monitor_reset();
|
||||
}
|
||||
|
||||
static void INLINE gfx_widgets_font_free(gfx_widget_font_data_t *font_data)
|
||||
{
|
||||
if (font_data->font)
|
||||
gfx_display_font_free(font_data->font);
|
||||
|
||||
font_data->font = NULL;
|
||||
font_data->usage_count = 0;
|
||||
}
|
||||
|
||||
static void gfx_widgets_context_destroy(void)
|
||||
{
|
||||
size_t i;
|
||||
@@ -2092,13 +2126,9 @@ static void gfx_widgets_context_destroy(void)
|
||||
msg_queue_icon_rect = 0;
|
||||
|
||||
/* Fonts */
|
||||
if (font_regular)
|
||||
gfx_display_font_free(font_regular);
|
||||
if (font_bold)
|
||||
gfx_display_font_free(font_bold);
|
||||
|
||||
font_regular = NULL;
|
||||
font_bold = NULL;
|
||||
gfx_widgets_font_free(&gfx_widget_fonts.regular);
|
||||
gfx_widgets_font_free(&gfx_widget_fonts.bold);
|
||||
gfx_widgets_font_free(&gfx_widget_fonts.msg_queue);
|
||||
}
|
||||
|
||||
#ifdef HAVE_CHEEVOS
|
||||
@@ -2198,8 +2228,9 @@ static void gfx_widgets_free(void)
|
||||
#endif
|
||||
|
||||
/* Font */
|
||||
video_coord_array_free(&font_raster_regular.carr);
|
||||
video_coord_array_free(&font_raster_bold.carr);
|
||||
video_coord_array_free(&gfx_widget_fonts.regular.raster_block.carr);
|
||||
video_coord_array_free(&gfx_widget_fonts.bold.raster_block.carr);
|
||||
video_coord_array_free(&gfx_widget_fonts.msg_queue.raster_block.carr);
|
||||
|
||||
font_driver_bind_block(NULL, NULL);
|
||||
}
|
||||
@@ -2439,10 +2470,10 @@ static void gfx_widgets_achievement_unfold(void *userdata)
|
||||
static void gfx_widgets_start_achievement_notification(void)
|
||||
{
|
||||
gfx_animation_ctx_entry_t entry;
|
||||
cheevo_height = widget_font_size * 4;
|
||||
cheevo_height = gfx_widget_fonts.regular.line_height * 4;
|
||||
cheevo_width = MAX(
|
||||
font_driver_get_message_width(font_regular, msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED), 0, 1),
|
||||
font_driver_get_message_width(font_regular, cheevo_popup_queue[cheevo_popup_queue_read_index].title, 0, 1)
|
||||
font_driver_get_message_width(gfx_widget_fonts.regular.font, msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED), 0, 1),
|
||||
font_driver_get_message_width(gfx_widget_fonts.regular.font, cheevo_popup_queue[cheevo_popup_queue_read_index].title, 0, 1)
|
||||
);
|
||||
cheevo_width += simple_widget_padding * 2;
|
||||
cheevo_y = (float)(-(int)cheevo_height);
|
||||
|
||||
+30
-4
@@ -88,14 +88,27 @@ struct gfx_widget
|
||||
void (*frame)(void* data);
|
||||
};
|
||||
|
||||
/* This structure holds all objects + metadata
|
||||
* corresponding to a particular font */
|
||||
typedef struct
|
||||
{
|
||||
font_data_t *font;
|
||||
video_font_raster_block_t raster_block;
|
||||
unsigned glyph_width;
|
||||
float line_height;
|
||||
float line_ascender;
|
||||
float line_descender;
|
||||
float line_centre_offset;
|
||||
size_t usage_count;
|
||||
} gfx_widget_font_data_t;
|
||||
|
||||
gfx_animation_ctx_tag gfx_widgets_get_generic_tag(void);
|
||||
float* gfx_widgets_get_pure_white(void);
|
||||
unsigned gfx_widgets_get_padding(void);
|
||||
unsigned gfx_widgets_get_height(void);
|
||||
unsigned gfx_widgets_get_glyph_width(void);
|
||||
float gfx_widgets_get_font_size(void);
|
||||
font_data_t* gfx_widgets_get_font_regular(void);
|
||||
font_data_t* gfx_widgets_get_font_bold(void);
|
||||
gfx_widget_font_data_t* gfx_widgets_get_font_regular(void);
|
||||
gfx_widget_font_data_t* gfx_widgets_get_font_bold(void);
|
||||
gfx_widget_font_data_t* gfx_widgets_get_font_msg_queue(void);
|
||||
float* gfx_widgets_get_backdrop_orig(void);
|
||||
unsigned gfx_widgets_get_last_video_width(void);
|
||||
unsigned gfx_widgets_get_last_video_height(void);
|
||||
@@ -117,6 +130,19 @@ void gfx_widgets_draw_icon(
|
||||
float rotation, float scale_factor,
|
||||
float *color);
|
||||
|
||||
void gfx_widgets_draw_text(
|
||||
gfx_widget_font_data_t* font_data,
|
||||
const char *text,
|
||||
float x, float y,
|
||||
int width, int height,
|
||||
uint32_t color,
|
||||
enum text_alignment text_align,
|
||||
bool draw_outside);
|
||||
|
||||
void gfx_widgets_flush_text(
|
||||
unsigned video_width, unsigned video_height,
|
||||
gfx_widget_font_data_t* font_data);
|
||||
|
||||
typedef struct gfx_widget gfx_widget_t;
|
||||
|
||||
extern const gfx_widget_t gfx_widget_screenshot;
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include <retro_endianness.h>
|
||||
|
||||
#ifdef RARCH_INTERNAL
|
||||
#define softfilter_get_implementation twoxbr_get_implementation
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <retro_endianness.h>
|
||||
|
||||
#ifdef RARCH_INTERNAL
|
||||
#define softfilter_get_implementation epx_get_implementation
|
||||
#define softfilter_thread_data epx_softfilter_thread_data
|
||||
|
||||
@@ -643,6 +643,10 @@ bool video_shader_write_preset(const char *path,
|
||||
config_file_t *conf;
|
||||
bool ret;
|
||||
|
||||
/* Note: We always create a new/blank config
|
||||
* file here. Loading and updating an existing
|
||||
* file could leave us with unwanted/invalid
|
||||
* parameters. */
|
||||
if (!(conf = config_file_new_alloc()))
|
||||
return false;
|
||||
|
||||
|
||||
@@ -88,14 +88,14 @@ static void gfx_widget_generic_message_frame(void* data)
|
||||
|
||||
if (state->alpha > 0.0f)
|
||||
{
|
||||
video_frame_info_t* video_info = (video_frame_info_t*)data;
|
||||
void* userdata = video_info->userdata;
|
||||
unsigned video_width = video_info->width;
|
||||
unsigned video_height = video_info->height;
|
||||
video_frame_info_t* video_info = (video_frame_info_t*)data;
|
||||
void* userdata = video_info->userdata;
|
||||
unsigned video_width = video_info->width;
|
||||
unsigned video_height = video_info->height;
|
||||
unsigned height = gfx_widgets_get_generic_message_height();
|
||||
unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->alpha*255.0f));
|
||||
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
|
||||
unsigned height = gfx_widgets_get_generic_message_height();
|
||||
|
||||
unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->alpha*255.0f));
|
||||
gfx_display_set_alpha(gfx_widgets_get_backdrop_orig(), state->alpha);
|
||||
|
||||
gfx_display_draw_quad(userdata,
|
||||
@@ -105,12 +105,12 @@ static void gfx_widget_generic_message_frame(void* data)
|
||||
video_width, video_height,
|
||||
gfx_widgets_get_backdrop_orig());
|
||||
|
||||
gfx_display_draw_text(gfx_widgets_get_font_regular(), state->message,
|
||||
video_width/2,
|
||||
video_height - height/2 + gfx_widgets_get_font_size()/4,
|
||||
video_width, video_height,
|
||||
text_color, TEXT_ALIGN_CENTER,
|
||||
1, false, 0, false);
|
||||
gfx_widgets_draw_text(font_regular, state->message,
|
||||
video_width/2,
|
||||
video_height - height/2.0f + font_regular->line_centre_offset,
|
||||
video_width, video_height,
|
||||
text_color, TEXT_ALIGN_CENTER,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -64,8 +64,9 @@ static void gfx_widget_libretro_message_fadeout(void *userdata)
|
||||
void gfx_widget_set_libretro_message(const char *msg, unsigned duration)
|
||||
{
|
||||
gfx_widget_libretro_message_state_t* state = gfx_widget_libretro_message_get_state();
|
||||
gfx_animation_ctx_tag tag = (uintptr_t) &state->timer;
|
||||
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
gfx_timer_ctx_entry_t timer;
|
||||
gfx_animation_ctx_tag tag = (uintptr_t) &state->timer;
|
||||
|
||||
if (!gfx_widgets_active())
|
||||
return;
|
||||
@@ -85,7 +86,7 @@ void gfx_widget_set_libretro_message(const char *msg, unsigned duration)
|
||||
gfx_timer_start(&state->timer, &timer);
|
||||
|
||||
/* Compute text width */
|
||||
state->width = font_driver_get_message_width(gfx_widgets_get_font_regular(), msg, (unsigned)strlen(msg), 1) + gfx_widgets_get_padding() * 2;
|
||||
state->width = font_driver_get_message_width(font_regular->font, msg, (unsigned)strlen(msg), 1) + gfx_widgets_get_padding() * 2;
|
||||
}
|
||||
|
||||
static void gfx_widget_libretro_message_frame(void *data)
|
||||
@@ -94,15 +95,14 @@ static void gfx_widget_libretro_message_frame(void *data)
|
||||
|
||||
if (state->alpha > 0.0f)
|
||||
{
|
||||
video_frame_info_t* video_info = (video_frame_info_t*)data;
|
||||
void* userdata = video_info->userdata;
|
||||
unsigned video_width = video_info->width;
|
||||
unsigned video_height = video_info->height;
|
||||
|
||||
unsigned height = gfx_widgets_get_generic_message_height();
|
||||
|
||||
float* backdrop_orign = gfx_widgets_get_backdrop_orig();
|
||||
unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->alpha*255.0f));
|
||||
video_frame_info_t* video_info = (video_frame_info_t*)data;
|
||||
void* userdata = video_info->userdata;
|
||||
unsigned video_width = video_info->width;
|
||||
unsigned video_height = video_info->height;
|
||||
unsigned height = gfx_widgets_get_generic_message_height();
|
||||
float* backdrop_orign = gfx_widgets_get_backdrop_orig();
|
||||
unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(state->alpha*255.0f));
|
||||
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
|
||||
gfx_display_set_alpha(backdrop_orign, state->alpha);
|
||||
|
||||
@@ -113,12 +113,12 @@ static void gfx_widget_libretro_message_frame(void *data)
|
||||
video_width, video_height,
|
||||
backdrop_orign);
|
||||
|
||||
gfx_display_draw_text(gfx_widgets_get_font_regular(), state->message,
|
||||
gfx_widgets_get_padding(),
|
||||
video_height - height/2 + gfx_widgets_get_font_size()/4,
|
||||
video_width, video_height,
|
||||
text_color, TEXT_ALIGN_LEFT,
|
||||
1, false, 0, false);
|
||||
gfx_widgets_draw_text(font_regular, state->message,
|
||||
gfx_widgets_get_padding(),
|
||||
video_height - height/2 + font_regular->line_centre_offset,
|
||||
video_width, video_height,
|
||||
text_color, TEXT_ALIGN_LEFT,
|
||||
false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -150,19 +150,14 @@ static void gfx_widget_screenshot_free(void)
|
||||
|
||||
static void gfx_widget_screenshot_frame(void* data)
|
||||
{
|
||||
video_frame_info_t *video_info = (video_frame_info_t*)data;
|
||||
void *userdata = video_info->userdata;
|
||||
unsigned video_width = video_info->width;
|
||||
unsigned video_height = video_info->height;
|
||||
|
||||
unsigned padding = gfx_widgets_get_padding();
|
||||
float font_size = gfx_widgets_get_font_size();
|
||||
|
||||
font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
|
||||
float* pure_white = gfx_widgets_get_pure_white();
|
||||
|
||||
video_frame_info_t *video_info = (video_frame_info_t*)data;
|
||||
void *userdata = video_info->userdata;
|
||||
unsigned video_width = video_info->width;
|
||||
unsigned video_height = video_info->height;
|
||||
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
float* pure_white = gfx_widgets_get_pure_white();
|
||||
gfx_widget_screenshot_state_t* state = gfx_widget_screenshot_get_ptr();
|
||||
int padding = (state->height - (font_regular->line_height * 2.0f)) / 2.0f;
|
||||
|
||||
/* Screenshot */
|
||||
if (state->loaded)
|
||||
@@ -193,14 +188,14 @@ static void gfx_widget_screenshot_frame(void* data)
|
||||
0, 1, pure_white
|
||||
);
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
msg_hash_to_str(MSG_SCREENSHOT_SAVED),
|
||||
state->thumbnail_width + padding, font_size * 1.9f + state->y,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_FAINT,
|
||||
TEXT_ALIGN_LEFT,
|
||||
1, false, 0, true
|
||||
);
|
||||
gfx_widgets_draw_text(font_regular,
|
||||
msg_hash_to_str(MSG_SCREENSHOT_SAVED),
|
||||
state->thumbnail_width + padding,
|
||||
padding + font_regular->line_ascender + state->y,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_FAINT,
|
||||
TEXT_ALIGN_LEFT,
|
||||
true);
|
||||
|
||||
ticker.idx = gfx_animation_get_ticker_idx();
|
||||
ticker.len = state->shotname_length;
|
||||
@@ -210,14 +205,14 @@ static void gfx_widget_screenshot_frame(void* data)
|
||||
|
||||
gfx_animation_ticker(&ticker);
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
shotname,
|
||||
state->thumbnail_width + padding, font_size * 2.9f + state->y,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_INFO,
|
||||
TEXT_ALIGN_LEFT,
|
||||
1, false, 0, true
|
||||
);
|
||||
gfx_widgets_draw_text(font_regular,
|
||||
shotname,
|
||||
state->thumbnail_width + padding,
|
||||
state->height - padding - font_regular->line_descender + state->y,
|
||||
video_width, video_height,
|
||||
TEXT_COLOR_INFO,
|
||||
TEXT_ALIGN_LEFT,
|
||||
true);
|
||||
}
|
||||
|
||||
/* Flash effect */
|
||||
@@ -240,10 +235,8 @@ static void gfx_widget_screenshot_iterate(unsigned width, unsigned height, bool
|
||||
bool is_threaded)
|
||||
{
|
||||
gfx_widget_screenshot_state_t* state = gfx_widget_screenshot_get_ptr();
|
||||
|
||||
float font_size = gfx_widgets_get_font_size();
|
||||
unsigned padding = gfx_widgets_get_padding();
|
||||
unsigned glyph_width = gfx_widgets_get_glyph_width();
|
||||
unsigned padding = gfx_widgets_get_padding();
|
||||
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
|
||||
/* Load screenshot and start its animation */
|
||||
if (state->filename[0] != '\0')
|
||||
@@ -258,7 +251,7 @@ static void gfx_widget_screenshot_iterate(unsigned width, unsigned height, bool
|
||||
"", &state->texture, TEXTURE_FILTER_MIPMAP_LINEAR,
|
||||
&state->texture_width, &state->texture_height);
|
||||
|
||||
state->height = font_size * 4;
|
||||
state->height = font_regular->line_height * 4;
|
||||
state->width = width;
|
||||
|
||||
state->scale_factor = gfx_widgets_get_thumbnail_scale_factor(
|
||||
@@ -269,7 +262,7 @@ static void gfx_widget_screenshot_iterate(unsigned width, unsigned height, bool
|
||||
state->thumbnail_width = state->texture_width * state->scale_factor;
|
||||
state->thumbnail_height = state->texture_height * state->scale_factor;
|
||||
|
||||
state->shotname_length = (width - state->thumbnail_width - padding*2) / glyph_width;
|
||||
state->shotname_length = (width - state->thumbnail_width - padding*2) / font_regular->glyph_width;
|
||||
|
||||
state->y = 0.0f;
|
||||
|
||||
|
||||
@@ -102,13 +102,12 @@ static void gfx_widget_volume_frame(void* data)
|
||||
char msg[255];
|
||||
char percentage_msg[255];
|
||||
|
||||
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
|
||||
void *userdata = video_info->userdata;
|
||||
unsigned video_width = video_info->width;
|
||||
unsigned video_height = video_info->height;
|
||||
|
||||
font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
|
||||
float font_size = gfx_widgets_get_font_size();
|
||||
unsigned padding = gfx_widgets_get_padding();
|
||||
|
||||
float* backdrop_orig = gfx_widgets_get_backdrop_orig();
|
||||
@@ -120,15 +119,22 @@ static void gfx_widget_volume_frame(void* data)
|
||||
unsigned text_color_db = COLOR_TEXT_ALPHA(TEXT_COLOR_FAINT, (unsigned)(state->text_alpha*255.0f));
|
||||
|
||||
unsigned bar_x = icon_size;
|
||||
unsigned bar_height = font_size / 2;
|
||||
unsigned bar_height = font_regular->line_height / 2;
|
||||
unsigned bar_width = state->widget_width - bar_x - padding;
|
||||
unsigned bar_y = state->widget_height / 2 + bar_height/2;
|
||||
unsigned bar_y = state->widget_height / 2 + bar_height;
|
||||
|
||||
float *bar_background = NULL;
|
||||
float *bar_foreground = NULL;
|
||||
float bar_percentage = 0.0f;
|
||||
|
||||
unsigned volume_text_y = bar_y - (font_size / 3);
|
||||
/* Note: Volume + percentage text has no component
|
||||
* that extends below the baseline, so we shift
|
||||
* the text down by the font descender to achieve
|
||||
* better spacing */
|
||||
unsigned volume_text_y = (bar_y / 2.0f) + font_regular->line_centre_offset + font_regular->line_descender;
|
||||
|
||||
msg[0] = '\0';
|
||||
percentage_msg[0] = '\0';
|
||||
|
||||
if (state->mute)
|
||||
volume_icon = state->textures[ICON_MUTE];
|
||||
@@ -201,13 +207,12 @@ static void gfx_widget_volume_frame(void* data)
|
||||
if (!state->textures[ICON_MUTE])
|
||||
{
|
||||
const char *text = msg_hash_to_str(MSG_AUDIO_MUTED);
|
||||
gfx_display_draw_text(font_regular,
|
||||
text,
|
||||
state->widget_width/2, state->widget_height/2 + font_size / 3,
|
||||
video_width, video_height,
|
||||
text_color, TEXT_ALIGN_CENTER,
|
||||
1, false, 0, true
|
||||
);
|
||||
gfx_widgets_draw_text(font_regular,
|
||||
text,
|
||||
state->widget_width/2, state->widget_height/2.0f + font_regular->line_centre_offset,
|
||||
video_width, video_height,
|
||||
text_color, TEXT_ALIGN_CENTER,
|
||||
true);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -241,23 +246,21 @@ static void gfx_widget_volume_frame(void* data)
|
||||
snprintf(percentage_msg, sizeof(percentage_msg), "%d%%",
|
||||
(int)(state->percent * 100.0f));
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
msg,
|
||||
state->widget_width - padding, volume_text_y,
|
||||
video_width, video_height,
|
||||
text_color_db,
|
||||
TEXT_ALIGN_RIGHT,
|
||||
1, false, 0, false
|
||||
);
|
||||
gfx_widgets_draw_text(font_regular,
|
||||
msg,
|
||||
state->widget_width - padding, volume_text_y,
|
||||
video_width, video_height,
|
||||
text_color_db,
|
||||
TEXT_ALIGN_RIGHT,
|
||||
false);
|
||||
|
||||
gfx_display_draw_text(font_regular,
|
||||
gfx_widgets_draw_text(font_regular,
|
||||
percentage_msg,
|
||||
icon_size, volume_text_y,
|
||||
video_width, video_height,
|
||||
text_color,
|
||||
TEXT_ALIGN_LEFT,
|
||||
1, false, 0, false
|
||||
);
|
||||
false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -304,12 +307,11 @@ void gfx_widget_volume_update_and_show(float new_volume, bool mute)
|
||||
|
||||
static void gfx_widget_volume_layout(bool is_threaded, const char *dir_assets, char *font_path)
|
||||
{
|
||||
gfx_widget_volume_state_t* state = gfx_widget_volume_get_ptr();
|
||||
gfx_widget_volume_state_t* state = gfx_widget_volume_get_ptr();
|
||||
unsigned last_video_width = gfx_widgets_get_last_video_width();
|
||||
gfx_widget_font_data_t* font_regular = gfx_widgets_get_font_regular();
|
||||
|
||||
float font_size = gfx_widgets_get_font_size();
|
||||
unsigned last_video_width = gfx_widgets_get_last_video_width();
|
||||
|
||||
state->widget_height = font_size * 4;
|
||||
state->widget_height = font_regular->line_height * 4;
|
||||
state->widget_width = state->widget_height * 4;
|
||||
|
||||
/* Volume widget cannot exceed screen width
|
||||
|
||||
@@ -128,6 +128,7 @@ COMPRESSION
|
||||
|
||||
#ifdef HAVE_ZLIB
|
||||
#include "../libretro-common/streams/trans_stream_zlib.c"
|
||||
#include "../libretro-common/streams/rzip_stream.c"
|
||||
#endif
|
||||
|
||||
/*============================================================
|
||||
|
||||
@@ -18,6 +18,10 @@
|
||||
#define HAVE_COMPRESSION 1
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32) && !defined(_XBOX)
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#include <string.h>
|
||||
#include <compat/posix_string.h>
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <boolean.h>
|
||||
#include <retro_environment.h>
|
||||
#include <retro_miscellaneous.h>
|
||||
#include <retro_endianness.h>
|
||||
|
||||
#include "joypad_connection.h"
|
||||
#include "../input_defines.h"
|
||||
|
||||
@@ -1501,7 +1501,7 @@ static int16_t android_input_state(void *data,
|
||||
if (android_keyboard_port_input_pressed(binds[port], i))
|
||||
ret |= (1 << i);
|
||||
}
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -339,7 +339,7 @@ static int16_t cocoa_input_state(void *data,
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#endif
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
|
||||
@@ -51,7 +51,7 @@ static int16_t ctr_input_state(void *data,
|
||||
{
|
||||
ctr_input_t *ctr = (ctr_input_t*)data;
|
||||
|
||||
if (port > 0)
|
||||
if (port >= MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS)
|
||||
return 0;
|
||||
|
||||
switch (device)
|
||||
@@ -83,7 +83,7 @@ static int16_t ctr_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -607,7 +607,7 @@ static int16_t dinput_input_state(void *data,
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include "../input_driver.h"
|
||||
#include "../input_keymaps.h"
|
||||
#include "../drivers_keyboard/keyboard_event_dos.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
@@ -113,7 +112,7 @@ static int16_t dos_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include "../../config.def.h"
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
@@ -175,7 +174,7 @@ static int16_t gx_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
|
||||
#include "../input_keymaps.h"
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
@@ -152,7 +151,7 @@ static int16_t linuxraw_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
#include <retro_miscellaneous.h>
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
typedef struct ps2_input
|
||||
{
|
||||
@@ -79,7 +78,7 @@ static int16_t ps2_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
#include "../../defines/ps3_defines.h"
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
#ifdef HAVE_MOUSE
|
||||
#define MAX_MICE 7
|
||||
@@ -135,7 +134,7 @@ static int16_t ps3_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
#include <retro_miscellaneous.h>
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
@@ -82,7 +81,7 @@ static int16_t ps4_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -55,14 +55,85 @@ typedef struct ps3_input
|
||||
unsigned mice_connected;
|
||||
#endif
|
||||
const input_device_driver_t *joypad;
|
||||
KbInfo kbinfo;
|
||||
KbData kbdata[MAX_KB_PORT_NUM];
|
||||
int connected[MAX_KB_PORT_NUM];
|
||||
} ps3_input_t;
|
||||
|
||||
static void connect_keyboard(ps3_input_t *ps3, int port)
|
||||
{
|
||||
ioKbSetCodeType(port, KB_CODETYPE_RAW);
|
||||
ioKbSetReadMode(port, KB_RMODE_INPUTCHAR);
|
||||
ps3->connected[port] = 1;
|
||||
}
|
||||
|
||||
static void disconnect_keyboard(ps3_input_t *ps3, int port)
|
||||
{
|
||||
ps3->connected[port] = 0;
|
||||
}
|
||||
|
||||
static void ps3_input_poll(void *data)
|
||||
{
|
||||
ps3_input_t *ps3 = (ps3_input_t*)data;
|
||||
KbData last_kbdata[MAX_KB_PORT_NUM];
|
||||
|
||||
if (ps3 && ps3->joypad)
|
||||
ps3->joypad->poll();
|
||||
|
||||
ioKbGetInfo(&ps3->kbinfo);
|
||||
for (int i = 0; i < MAX_KB_PORT_NUM; i++) {
|
||||
if(ps3->kbinfo.status[i] && !ps3->connected[i])
|
||||
connect_keyboard(ps3, i);
|
||||
// if(!ps3->kbinfo.status[i] && ps3->connected[i])
|
||||
// disconnect_keyboard(ps3, i);
|
||||
}
|
||||
|
||||
memcpy(last_kbdata, ps3->kbdata, sizeof(last_kbdata));
|
||||
for (int i = 0; i < MAX_KB_PORT_NUM; i++) {
|
||||
if(ps3->kbinfo.status[i])
|
||||
ioKbRead(i, &ps3->kbdata[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAX_KB_PORT_NUM; i++) {
|
||||
/* Set keyboard modifier based on shift,ctrl and alt state */
|
||||
uint16_t mod = 0;
|
||||
|
||||
if (ps3->kbdata[i].mkey._KbMkeyU._KbMkeyS.l_alt || ps3->kbdata[i].mkey._KbMkeyU._KbMkeyS.r_alt)
|
||||
mod |= RETROKMOD_ALT;
|
||||
if (ps3->kbdata[i].mkey._KbMkeyU._KbMkeyS.l_ctrl || ps3->kbdata[i].mkey._KbMkeyU._KbMkeyS.r_ctrl)
|
||||
mod |= RETROKMOD_CTRL;
|
||||
if (ps3->kbdata[i].mkey._KbMkeyU._KbMkeyS.l_shift || ps3->kbdata[i].mkey._KbMkeyU._KbMkeyS.r_shift)
|
||||
mod |= RETROKMOD_SHIFT;
|
||||
/* TODO: windows keys. */
|
||||
|
||||
for (int j = 0; j < last_kbdata[i].nb_keycode; j++) {
|
||||
int code = last_kbdata[i].keycode[j];
|
||||
int newly_depressed = 1;
|
||||
for (int k = 0; k < MAX_KB_PORT_NUM; i++)
|
||||
if (ps3->kbdata[i].keycode[k] == code) {
|
||||
newly_depressed = 0;
|
||||
break;
|
||||
}
|
||||
if (newly_depressed) {
|
||||
unsigned keyboardcode = input_keymaps_translate_keysym_to_rk(code);
|
||||
input_keyboard_event(false, keyboardcode, keyboardcode, mod, RETRO_DEVICE_KEYBOARD);
|
||||
}
|
||||
}
|
||||
|
||||
for (int j = 0; j < ps3->kbdata[i].nb_keycode; j++) {
|
||||
int code = ps3->kbdata[i].keycode[j];
|
||||
int newly_pressed = 1;
|
||||
for (int k = 0; k < MAX_KB_PORT_NUM; i++)
|
||||
if (last_kbdata[i].keycode[k] == code) {
|
||||
newly_pressed = 0;
|
||||
break;
|
||||
}
|
||||
if (newly_pressed) {
|
||||
unsigned keyboardcode = input_keymaps_translate_keysym_to_rk(code);
|
||||
input_keyboard_event(true, keyboardcode, keyboardcode, mod, RETRO_DEVICE_KEYBOARD);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_MOUSE
|
||||
@@ -74,6 +145,46 @@ static int16_t ps3_mouse_device_state(ps3_input_t *ps3,
|
||||
|
||||
#endif
|
||||
|
||||
static int mod_table[] = {
|
||||
RETROK_RSUPER,
|
||||
RETROK_RALT,
|
||||
RETROK_RSHIFT,
|
||||
RETROK_RCTRL,
|
||||
RETROK_LSUPER,
|
||||
RETROK_LALT,
|
||||
RETROK_LSHIFT,
|
||||
RETROK_LCTRL
|
||||
};
|
||||
|
||||
static bool
|
||||
psl1ght_keyboard_port_input_pressed(ps3_input_t *ps3, unsigned id)
|
||||
{
|
||||
if (id >= RETROK_LAST || id == 0)
|
||||
return false;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if (id == mod_table[i]) {
|
||||
for (int j = 0; j < MAX_KB_PORT_NUM; j++) {
|
||||
if(ps3->kbinfo.status[j] && (ps3->kbdata[j].mkey._KbMkeyU.mkeys &
|
||||
(1 << i)))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int code = rarch_keysym_lut[id];
|
||||
if (code == 0)
|
||||
return false;
|
||||
for (int i = 0; i < MAX_KB_PORT_NUM; i++) {
|
||||
if(ps3->kbinfo.status[i])
|
||||
for (int j = 0; j < ps3->kbdata[i].nb_keycode; j++) {
|
||||
if (ps3->kbdata[i].keycode[j] == code)
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static int16_t ps3_input_state(void *data,
|
||||
rarch_joypad_info_t *joypad_info,
|
||||
const struct retro_keybind **binds,
|
||||
@@ -112,6 +223,9 @@ static int16_t ps3_input_state(void *data,
|
||||
ret |= (1 << i);
|
||||
continue;
|
||||
}
|
||||
else if (psl1ght_keyboard_port_input_pressed(ps3, binds[port][i].key))
|
||||
ret |= (1 << i);
|
||||
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -129,12 +243,16 @@ static int16_t ps3_input_state(void *data,
|
||||
return true;
|
||||
if (((float)abs(ps3->joypad->axis(joypad_info->joy_idx, joyaxis)) / 0x8000) > joypad_info->axis_threshold)
|
||||
return true;
|
||||
if (psl1ght_keyboard_port_input_pressed(ps3, binds[port][id].key))
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case RETRO_DEVICE_ANALOG:
|
||||
if (binds[port])
|
||||
return input_joypad_analog(ps3->joypad, joypad_info, port, idx, id, binds[port]);
|
||||
break;
|
||||
case RETRO_DEVICE_KEYBOARD:
|
||||
return (psl1ght_keyboard_port_input_pressed(ps3, id));
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -142,7 +260,8 @@ static int16_t ps3_input_state(void *data,
|
||||
|
||||
static void ps3_input_free_input(void *data)
|
||||
{
|
||||
RARCH_LOG("alive " __FILE__ ":%d\n", __LINE__);
|
||||
ioPadEnd();
|
||||
ioKbEnd();
|
||||
}
|
||||
|
||||
static void* ps3_input_init(const char *joypad_driver)
|
||||
@@ -156,6 +275,26 @@ static void* ps3_input_init(const char *joypad_driver)
|
||||
if (ps3->joypad)
|
||||
ps3->joypad->init(ps3);
|
||||
|
||||
/* Keyboard */
|
||||
|
||||
input_keymaps_init_keyboard_lut(rarch_key_map_psl1ght);
|
||||
|
||||
int status;
|
||||
|
||||
status = ioKbInit(MAX_KB_PORT_NUM);
|
||||
RARCH_LOG("Calling ioKbInit(%d) returned %d\r\n", MAX_KB_PORT_NUM, status);
|
||||
|
||||
status = ioKbGetInfo(&ps3->kbinfo);
|
||||
RARCH_LOG("Calling ioKbGetInfo() returned %d\r\n", status);
|
||||
|
||||
RARCH_LOG("KbInfo:\r\nMax Kbs: %u\r\nConnected Kbs: %u\r\nInfo Field: %08x\r\n", ps3->kbinfo.max, ps3->kbinfo.connected, ps3->kbinfo.info);
|
||||
|
||||
for (int i = 0; i < MAX_KB_PORT_NUM; i++) {
|
||||
if(ps3->kbinfo.status[i]) {
|
||||
connect_keyboard(ps3, i);
|
||||
}
|
||||
}
|
||||
|
||||
return ps3;
|
||||
}
|
||||
|
||||
@@ -166,6 +305,7 @@ static uint64_t ps3_input_get_capabilities(void *data)
|
||||
#ifdef HAVE_MOUSE
|
||||
(1 << RETRO_DEVICE_MOUSE) |
|
||||
#endif
|
||||
(1 << RETRO_DEVICE_KEYBOARD) |
|
||||
(1 << RETRO_DEVICE_JOYPAD) |
|
||||
(1 << RETRO_DEVICE_ANALOG);
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ static int16_t psp_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -829,7 +829,7 @@ static int16_t qnx_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
if (qnx_is_pressed(qnx, joypad_info, binds[port], port, id))
|
||||
|
||||
@@ -536,7 +536,7 @@ static int16_t rwebinput_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -244,7 +244,7 @@ static int16_t sdl_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -407,7 +407,7 @@ static int16_t switch_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1027,7 +1027,7 @@ static int16_t udev_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include <uwp/uwp_func.h>
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
// TODO: Add support for multiple mice and multiple touch
|
||||
|
||||
@@ -196,7 +195,7 @@ static int16_t uwp_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -322,7 +322,7 @@ static int16_t input_wl_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../input_keymaps.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
#include "wiiu_dbg.h"
|
||||
|
||||
@@ -162,7 +161,7 @@ static int16_t wiiu_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -721,7 +721,7 @@ static int16_t winraw_input_state(void *d,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -321,8 +321,8 @@ static int16_t x_input_state(void *data,
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "../../config.def.h"
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retroarch.h"
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
@@ -88,7 +87,7 @@ static int16_t xdk_input_state(void *data,
|
||||
}
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include "../../config.def.h"
|
||||
|
||||
#include "../input_driver.h"
|
||||
#include "../../retorarch.h"
|
||||
|
||||
/* TODO/FIXME -
|
||||
* fix game focus toggle */
|
||||
@@ -84,7 +83,7 @@ static int16_t xenon360_input_state(void *data,
|
||||
ret |= (1 << i);
|
||||
}
|
||||
|
||||
return ret|get_gamepad_input_override();
|
||||
return ret;
|
||||
}
|
||||
else
|
||||
if (state[port] & binds[port][id].joykey)
|
||||
|
||||
@@ -290,7 +290,7 @@ static void iohidmanager_hid_device_input_callback(void *data, IOReturn result,
|
||||
while (tmp && tmp->cookie != (IOHIDElementCookie)cookie)
|
||||
tmp = tmp->next;
|
||||
|
||||
if (tmp->cookie == (IOHIDElementCookie)cookie)
|
||||
if (tmp && tmp->cookie == (IOHIDElementCookie)cookie)
|
||||
{
|
||||
CFIndex min = IOHIDElementGetLogicalMin(element);
|
||||
CFIndex range = IOHIDElementGetLogicalMax(element) - min;
|
||||
|
||||
@@ -41,6 +41,10 @@
|
||||
#include <sys/keycodes.h>
|
||||
#endif
|
||||
|
||||
#ifdef __PSL1GHT__
|
||||
#include <io/kb.h>
|
||||
#endif
|
||||
|
||||
#if defined(HAVE_SDL) || defined(HAVE_SDL2)
|
||||
#include "SDL.h"
|
||||
#endif
|
||||
@@ -1649,6 +1653,134 @@ const struct rarch_key_map rarch_key_map_dos[] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef __PSL1GHT__
|
||||
const struct rarch_key_map rarch_key_map_psl1ght[] = {
|
||||
{ KB_RAWKEY_A, RETROK_a },
|
||||
{ KB_RAWKEY_B, RETROK_b },
|
||||
{ KB_RAWKEY_C, RETROK_c },
|
||||
{ KB_RAWKEY_D, RETROK_d },
|
||||
{ KB_RAWKEY_E, RETROK_e },
|
||||
{ KB_RAWKEY_F, RETROK_f },
|
||||
{ KB_RAWKEY_G, RETROK_g },
|
||||
{ KB_RAWKEY_H, RETROK_h },
|
||||
{ KB_RAWKEY_I, RETROK_i },
|
||||
{ KB_RAWKEY_J, RETROK_j },
|
||||
{ KB_RAWKEY_K, RETROK_k },
|
||||
{ KB_RAWKEY_L, RETROK_l },
|
||||
{ KB_RAWKEY_M, RETROK_m },
|
||||
{ KB_RAWKEY_N, RETROK_n },
|
||||
{ KB_RAWKEY_O, RETROK_o },
|
||||
{ KB_RAWKEY_P, RETROK_p },
|
||||
{ KB_RAWKEY_Q, RETROK_q },
|
||||
{ KB_RAWKEY_R, RETROK_r },
|
||||
{ KB_RAWKEY_S, RETROK_s },
|
||||
{ KB_RAWKEY_T, RETROK_t },
|
||||
{ KB_RAWKEY_U, RETROK_u },
|
||||
{ KB_RAWKEY_V, RETROK_v },
|
||||
{ KB_RAWKEY_W, RETROK_w },
|
||||
{ KB_RAWKEY_X, RETROK_x },
|
||||
{ KB_RAWKEY_Y, RETROK_y },
|
||||
{ KB_RAWKEY_Z, RETROK_z },
|
||||
{ KB_RAWKEY_BS, RETROK_BACKSPACE },
|
||||
{ KB_RAWKEY_TAB, RETROK_TAB },
|
||||
{ KB_RAWKEY_ENTER, RETROK_RETURN },
|
||||
{ KB_RAWKEY_PAUSE, RETROK_PAUSE },
|
||||
{ KB_RAWKEY_ESCAPE, RETROK_ESCAPE },
|
||||
{ KB_RAWKEY_SPACE, RETROK_SPACE },
|
||||
{ KB_RAWKEY_QUOTATION_101, RETROK_QUOTE },
|
||||
{ KB_RAWKEY_COMMA, RETROK_COMMA },
|
||||
{ KB_RAWKEY_MINUS, RETROK_MINUS },
|
||||
{ KB_RAWKEY_PERIOD, RETROK_PERIOD },
|
||||
{ KB_RAWKEY_SLASH, RETROK_SLASH },
|
||||
{ KB_RAWKEY_0, RETROK_0 },
|
||||
{ KB_RAWKEY_1, RETROK_1 },
|
||||
{ KB_RAWKEY_2, RETROK_2 },
|
||||
{ KB_RAWKEY_3, RETROK_3 },
|
||||
{ KB_RAWKEY_4, RETROK_4 },
|
||||
{ KB_RAWKEY_5, RETROK_5 },
|
||||
{ KB_RAWKEY_6, RETROK_6 },
|
||||
{ KB_RAWKEY_7, RETROK_7 },
|
||||
{ KB_RAWKEY_8, RETROK_8 },
|
||||
{ KB_RAWKEY_9, RETROK_9 },
|
||||
{ KB_RAWKEY_SEMICOLON, RETROK_SEMICOLON },
|
||||
{ KB_RAWKEY_EQUAL_101, RETROK_EQUALS },
|
||||
{ KB_RAWKEY_LEFT_BRACKET_101, RETROK_LEFTBRACKET },
|
||||
{ KB_RAWKEY_BACKSLASH_101, RETROK_BACKSLASH },
|
||||
{ KB_RAWKEY_RIGHT_BRACKET_101, RETROK_RIGHTBRACKET },
|
||||
{ KB_RAWKEY_DELETE, RETROK_DELETE },
|
||||
{ KB_RAWKEY_KPAD_0, RETROK_KP0 },
|
||||
{ KB_RAWKEY_KPAD_1, RETROK_KP1 },
|
||||
{ KB_RAWKEY_KPAD_2, RETROK_KP2 },
|
||||
{ KB_RAWKEY_KPAD_3, RETROK_KP3 },
|
||||
{ KB_RAWKEY_KPAD_4, RETROK_KP4 },
|
||||
{ KB_RAWKEY_KPAD_5, RETROK_KP5 },
|
||||
{ KB_RAWKEY_KPAD_6, RETROK_KP6 },
|
||||
{ KB_RAWKEY_KPAD_7, RETROK_KP7 },
|
||||
{ KB_RAWKEY_KPAD_8, RETROK_KP8 },
|
||||
{ KB_RAWKEY_KPAD_9, RETROK_KP9 },
|
||||
{ KB_RAWKEY_KPAD_PERIOD, RETROK_KP_PERIOD },
|
||||
{ KB_RAWKEY_KPAD_SLASH, RETROK_KP_DIVIDE },
|
||||
{ KB_RAWKEY_KPAD_ASTERISK, RETROK_KP_MULTIPLY },
|
||||
{ KB_RAWKEY_KPAD_MINUS, RETROK_KP_MINUS },
|
||||
{ KB_RAWKEY_KPAD_PLUS, RETROK_KP_PLUS },
|
||||
{ KB_RAWKEY_KPAD_ENTER, RETROK_KP_ENTER },
|
||||
{ KB_RAWKEY_UP_ARROW, RETROK_UP },
|
||||
{ KB_RAWKEY_DOWN_ARROW, RETROK_DOWN },
|
||||
{ KB_RAWKEY_RIGHT_ARROW, RETROK_RIGHT },
|
||||
{ KB_RAWKEY_LEFT_ARROW, RETROK_LEFT },
|
||||
{ KB_RAWKEY_INSERT, RETROK_INSERT },
|
||||
{ KB_RAWKEY_HOME, RETROK_HOME },
|
||||
{ KB_RAWKEY_END, RETROK_END },
|
||||
{ KB_RAWKEY_PAGE_UP, RETROK_PAGEUP },
|
||||
{ KB_RAWKEY_PAGE_DOWN, RETROK_PAGEDOWN },
|
||||
{ KB_RAWKEY_F1, RETROK_F1 },
|
||||
{ KB_RAWKEY_F2, RETROK_F2 },
|
||||
{ KB_RAWKEY_F3, RETROK_F3 },
|
||||
{ KB_RAWKEY_F4, RETROK_F4 },
|
||||
{ KB_RAWKEY_F5, RETROK_F5 },
|
||||
{ KB_RAWKEY_F6, RETROK_F6 },
|
||||
{ KB_RAWKEY_F7, RETROK_F7 },
|
||||
{ KB_RAWKEY_F8, RETROK_F8 },
|
||||
{ KB_RAWKEY_F9, RETROK_F9 },
|
||||
{ KB_RAWKEY_F10, RETROK_F10 },
|
||||
{ KB_RAWKEY_F11, RETROK_F11 },
|
||||
{ KB_RAWKEY_F12, RETROK_F12 },
|
||||
{ KB_RAWKEY_KPAD_NUMLOCK, RETROK_NUMLOCK },
|
||||
{ KB_RAWKEY_CAPS_LOCK, RETROK_CAPSLOCK },
|
||||
{ KB_RAWKEY_SCROLL_LOCK, RETROK_SCROLLOCK },
|
||||
{ KB_RAWKEY_PAUSE, RETROK_BREAK },
|
||||
|
||||
/*
|
||||
{ KB_RAWKEY_HASHTILDE, RETROK_HASH },
|
||||
{ KB_RAWKEY_KPLEFTPAREN, RETROK_LEFTPAREN },
|
||||
{ KB_RAWKEY_KPRIGHTPAREN, RETROK_RIGHTPAREN },
|
||||
{ KB_RAWKEY_LEFTMETA, RETROK_LMETA },
|
||||
{ KB_RAWKEY_RIGHTMETA, RETROK_RMETA },
|
||||
{ KB_RAWKEY_COMPOSE, RETROK_COMPOSE },
|
||||
{ KB_RAWKEY_HELP, RETROK_HELP },
|
||||
{ KB_RAWKEY_POWER, RETROK_POWER },
|
||||
{ KB_RAWKEY_UNDO, RETROK_UNDO },
|
||||
{ KB_RAWKEY_KPAD_EQUAL, RETROK_KP_EQUALS },
|
||||
|
||||
KB_RAWKEY_PRINTSCREEN
|
||||
KB_RAWKEY_APPLICATION
|
||||
|
||||
KB_RAWKEY_106_KANJI
|
||||
KB_RAWKEY_KANA
|
||||
KB_RAWKEY_HENKAN
|
||||
KB_RAWKEY_MUHENKAN
|
||||
KB_RAWKEY_ACCENT_CIRCONFLEX_106
|
||||
KB_RAWKEY_ATMARK_106
|
||||
KB_RAWKEY_LEFT_BRACKET_106
|
||||
KB_RAWKEY_RIGHT_BRACKET_106
|
||||
KB_RAWKEY_COLON_106
|
||||
KB_RAWKEY_BACKSLASH_106
|
||||
KB_RAWKEY_YEN_106 */
|
||||
|
||||
{ 0, RETROK_UNKNOWN }
|
||||
};
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32) && _WIN32_WINNT >= 0x0501 && !defined(__WINRT__)
|
||||
const struct rarch_key_map rarch_key_map_winraw[] = {
|
||||
{ VK_BACK, RETROK_BACKSPACE },
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#endif
|
||||
|
||||
#include "../configuration.h"
|
||||
#include "../retroarch.h"
|
||||
|
||||
void input_mapper_poll(input_mapper_t *handle,
|
||||
void *ol_pointer,
|
||||
@@ -124,6 +125,14 @@ void input_mapper_poll(input_mapper_t *handle,
|
||||
remap_valid = (current_button_value == 1) &&
|
||||
(j != remap_button) && (remap_button != RARCH_UNMAPPED);
|
||||
|
||||
#ifdef HAVE_ACCESSIBILITY
|
||||
/* gamepad override */
|
||||
if (i==0 && get_gamepad_input_override() & (1<<j))
|
||||
{
|
||||
BIT256_SET(handle->buttons[i], j);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (remap_valid)
|
||||
{
|
||||
if (remap_button < RARCH_FIRST_CUSTOM_BIND)
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
## Steps
|
||||
|
||||
- Developers update strings in `msg_hash_us.h`.
|
||||
- Developers (can set a cron job) run `./h2json.py msg_hash_us.h` to generate `msg_hash_us.json`. It is just a convenient format that is supported by Weblate/Crowdin/Transifex and doesn't need to be inversion control.
|
||||
- Developers (can set a cron job) run `./h2json.py msg_hash_us.h` to generate `msg_hash_us.json`. It is just a convenient format that is supported by Weblate/Crowdin/Transifex and doesn't need to be in version control.
|
||||
- Developers (can set a cron job) upload `msg_hash_us.json` to Weblate/Crowdin/Transifex.
|
||||
- Translators translate strings on Weblate/Crowdin/Transifex.
|
||||
- Developers (can set a cron job) download `msg_hash_xx.json` files.
|
||||
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2011-2017 - Daniel De Matteis
|
||||
* Copyright (C) 2016-2019 - Brad Parker
|
||||
*
|
||||
@@ -30,7 +30,7 @@
|
||||
/* https://support.microsoft.com/en-us/kb/980263 */
|
||||
#pragma execution_character_set("utf-8")
|
||||
#endif
|
||||
#pragma warning(disable: 4566)
|
||||
#pragma warning(disable:4566)
|
||||
#endif
|
||||
|
||||
int menu_hash_get_help_ar_enum(enum msg_hash_enums msg, char *s, size_t len)
|
||||
|
||||
+149
-87
@@ -7,96 +7,158 @@
|
||||
#endif
|
||||
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST,
|
||||
"ملفات التكوين"
|
||||
)
|
||||
MENU_ENUM_LABEL_VALUE_CONFIGURATIONS_LIST,
|
||||
"ملفات التكوين"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER,
|
||||
"نظام تشغيل الصوت"
|
||||
)
|
||||
MENU_ENUM_LABEL_VALUE_AUDIO_DRIVER,
|
||||
"نظام تشغيل الصوت"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS,
|
||||
"الصوت"
|
||||
)
|
||||
MENU_ENUM_LABEL_VALUE_AUDIO_SETTINGS,
|
||||
"الصوت"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER,
|
||||
"نظام تشغيل الكاميرا"
|
||||
)
|
||||
MENU_ENUM_LABEL_VALUE_CAMERA_DRIVER,
|
||||
"نظام تشغيل الكاميرا"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONFIGURATIONS,
|
||||
"تحميل ملف التكوين"
|
||||
)
|
||||
MENU_ENUM_LABEL_VALUE_CONFIGURATIONS,
|
||||
"تحميل ملف التكوين"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS,
|
||||
"ملفات التكوين"
|
||||
)
|
||||
MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS,
|
||||
"ملفات التكوين"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CONFIG_SAVE_ON_EXIT,
|
||||
"Save Configuration on Exit"
|
||||
)
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS,
|
||||
"القائمة السريعة")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_CORE_LIST,
|
||||
"تحميل الكور")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS,
|
||||
"الدلائل")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS,
|
||||
"أنظمة التشغيل")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP,
|
||||
"مساعدة")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_HELP_LIST,
|
||||
"مساعدة")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION,
|
||||
"معلومات")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INFORMATION_LIST,
|
||||
"معلومات")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_DRIVER,
|
||||
"نظام تشغيل أجهزة الادخال")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS,
|
||||
"أجهزة الادخال")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER,
|
||||
"نظام تشغيل الجوي باد")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LANG_ARABIC,
|
||||
"عربى")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST,
|
||||
"تحميل المحتوى")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MAIN_MENU,
|
||||
"القائمة الرئيسية")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER,
|
||||
"نظام تشغيل القائمة")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS,
|
||||
"الشبكة")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER,
|
||||
"التحديث عبر الانترنت")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS,
|
||||
"العرض على الشاشة")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB,
|
||||
"قوائم التشغيل")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY,
|
||||
"قائمة التشغيل")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS,
|
||||
"قوائم التشغيل")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS,
|
||||
"خصوصية")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH,
|
||||
"إنهاء البرنامج")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_RECORD_DRIVER,
|
||||
"نظام تشغيل التسجيل")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS,
|
||||
"الإنجازات")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS,
|
||||
"الحفظ")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS,
|
||||
"واجهة المستخدم")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_USER_SETTINGS,
|
||||
"المستخدم")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER,
|
||||
"نظام تشغيل الفيديو")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS,
|
||||
"الفيديو")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER,
|
||||
"نظام تشغيل الواي-فاي")
|
||||
MSG_HASH(MENU_ENUM_SUBLABEL_DRIVER_SETTINGS,
|
||||
"تغيير أنظمة التشغيل المستخدمة من قبل البرنامج.")
|
||||
MSG_HASH(MENU_ENUM_LABEL_VALUE_DELETE_PLAYLIST,
|
||||
"إحذف قائمة التشغيل")
|
||||
MENU_ENUM_LABEL_VALUE_CONTENT_SETTINGS,
|
||||
"القائمة السريعة"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CORE_LIST,
|
||||
"تحميل الكور"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_DIRECTORY_SETTINGS,
|
||||
"الدلائل"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS,
|
||||
"أنظمة التشغيل"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_HELP,
|
||||
"مساعدة"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_HELP_LIST,
|
||||
"مساعدة"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_INFORMATION,
|
||||
"معلومات"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_INFORMATION_LIST,
|
||||
"معلومات"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_INPUT_DRIVER,
|
||||
"نظام تشغيل أجهزة الادخال"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS,
|
||||
"أجهزة الادخال"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_JOYPAD_DRIVER,
|
||||
"نظام تشغيل الجوي باد"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_LANG_ARABIC,
|
||||
"عربى"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST,
|
||||
"تحميل المحتوى"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_MAIN_MENU,
|
||||
"القائمة الرئيسية"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_MENU_DRIVER,
|
||||
"نظام تشغيل القائمة"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_NETWORK_SETTINGS,
|
||||
"الشبكة"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_ONLINE_UPDATER,
|
||||
"التحديث عبر الانترنت"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_ONSCREEN_DISPLAY_SETTINGS,
|
||||
"العرض على الشاشة"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB,
|
||||
"قوائم التشغيل"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_PLAYLIST_DIRECTORY,
|
||||
"قائمة التشغيل"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_PLAYLIST_SETTINGS,
|
||||
"قوائم التشغيل"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_PRIVACY_SETTINGS,
|
||||
"خصوصية"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUIT_RETROARCH,
|
||||
"إنهاء البرنامج"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_RECORD_DRIVER,
|
||||
"نظام تشغيل التسجيل"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS,
|
||||
"الإنجازات"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS,
|
||||
"الحفظ"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_USER_INTERFACE_SETTINGS,
|
||||
"واجهة المستخدم"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_USER_SETTINGS,
|
||||
"المستخدم"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_DRIVER,
|
||||
"نظام تشغيل الفيديو"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_SETTINGS,
|
||||
"الفيديو"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_WIFI_DRIVER,
|
||||
"نظام تشغيل الواي-فاي"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_DRIVER_SETTINGS,
|
||||
"تغيير أنظمة التشغيل المستخدمة من قبل البرنامج."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_DELETE_PLAYLIST,
|
||||
"إحذف قائمة التشغيل"
|
||||
)
|
||||
+5954
-3615
File diff suppressed because it is too large.
Load diff
+4240
-2425
File diff suppressed because it is too large.
Load diff
+5551
-3339
File diff suppressed because it is too large.
Load diff
+3267
-3295
File diff suppressed because it is too large.
Load diff
+8049
-7969
File diff suppressed because it is too large.
Load diff
+10718
-10284
File diff suppressed because it is too large.
Load diff
+6016
-3610
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -25,7 +25,7 @@
|
||||
#include "../verbosity.h"
|
||||
|
||||
#if defined(_MSC_VER) && !defined(_XBOX)
|
||||
#if (_MSC_VER >= 1700 && _MSC_VER < 1910)
|
||||
#if (_MSC_VER >= 1700 && _MSC_VER < 1900)
|
||||
/* https://support.microsoft.com/en-us/kb/980263 */
|
||||
#pragma execution_character_set("utf-8")
|
||||
#endif
|
||||
|
||||
+2101
-2229
File diff suppressed because it is too large.
Load diff
+1
-1
@@ -28,7 +28,7 @@
|
||||
#include "../configuration.h"
|
||||
|
||||
#if defined(_MSC_VER) && !defined(_XBOX)
|
||||
#if (_MSC_VER >= 1700 && _MSC_VER < 1910)
|
||||
#if (_MSC_VER >= 1700 && _MSC_VER < 1900)
|
||||
/* https://support.microsoft.com/en-us/kb/980263 */
|
||||
#pragma execution_character_set("utf-8")
|
||||
#endif
|
||||
|
||||
+7599
-7598
File diff suppressed because it is too large.
Load diff
+4458
-2214
File diff suppressed because it is too large.
Load diff
+2686
-2502
File diff suppressed because it is too large.
Load diff
+7038
-4349
File diff suppressed because it is too large.
Load diff
@@ -1864,9 +1864,9 @@ int menu_hash_get_help_pt_br_enum(enum msg_hash_enums msg, char *s, size_t len)
|
||||
case MENU_ENUM_LABEL_VIDEO_CTX_SCALING:
|
||||
snprintf(s, len,
|
||||
#ifdef HAVE_ODROIDGO2
|
||||
"RGA scaling and bicubic filtering. May break widgets."
|
||||
"Escala RGA e filtragem bicúbica. Pode quebrar os widgets."
|
||||
#else
|
||||
"Hardware context scaling (if available)."
|
||||
"Escala de contexto de hardware (se disponível)."
|
||||
#endif
|
||||
);
|
||||
break;
|
||||
|
||||
+8045
-7982
File diff suppressed because it is too large.
Load diff
+5068
-3519
File diff suppressed because it is too large.
Load diff
+5550
-3149
File diff suppressed because it is too large.
Load diff
+7085
-7281
File diff suppressed because it is too large.
Load diff
+10732
-10358
File diff suppressed because it is too large.
Load diff
+911
-598
File diff suppressed because it is too large.
Load diff
@@ -43,7 +43,7 @@
|
||||
#include <lv2/systime.h>
|
||||
#endif
|
||||
|
||||
#if defined(__CELLOS_LV2__) || ( defined(__OpenBSD__) && defined(__powerpc__) )
|
||||
#if defined(__CELLOS_LV2__)
|
||||
#ifndef _PPU_INTRINSICS_H
|
||||
#include <ppu_intrinsics.h>
|
||||
#endif
|
||||
@@ -171,7 +171,7 @@ retro_perf_tick_t cpu_features_get_perf_counter(void)
|
||||
tv_sec = (long)((ularge.QuadPart - epoch) / 10000000L);
|
||||
tv_usec = (long)(system_time.wMilliseconds * 1000);
|
||||
time_ticks = (1000000 * tv_sec + tv_usec);
|
||||
#elif defined(_POSIX_MONOTONIC_CLOCK) || defined(__QNX__) || defined(ANDROID) || defined(__MACH__) || defined(__PSL1GHT__)
|
||||
#elif defined(_POSIX_MONOTONIC_CLOCK) || defined(__QNX__) || defined(ANDROID) || defined(__MACH__)
|
||||
struct timespec tv = {0};
|
||||
if (ra_clock_gettime(CLOCK_MONOTONIC, &tv) == 0)
|
||||
time_ticks = (retro_perf_tick_t)tv.tv_sec * 1000000000 +
|
||||
@@ -185,7 +185,7 @@ retro_perf_tick_t cpu_features_get_perf_counter(void)
|
||||
time_ticks = (retro_perf_tick_t)a | ((retro_perf_tick_t)d << 32);
|
||||
#elif defined(__ARM_ARCH_6__)
|
||||
__asm__ volatile( "mrc p15, 0, %0, c9, c13, 0" : "=r"(time_ticks) );
|
||||
#elif defined(__CELLOS_LV2__) || defined(_XBOX360) || defined(__powerpc__) || defined(__ppc__) || defined(__POWERPC__)
|
||||
#elif defined(__CELLOS_LV2__) || defined(_XBOX360) || defined(__powerpc__) || defined(__ppc__) || defined(__POWERPC__) || defined(__PSL1GHT__)
|
||||
time_ticks = __mftb();
|
||||
#elif defined(GEKKO)
|
||||
time_ticks = gettime();
|
||||
@@ -240,7 +240,7 @@ retro_time_t cpu_features_get_time_usec(void)
|
||||
return ticks_to_us(OSGetSystemTime());
|
||||
#elif defined(SWITCH) || defined(HAVE_LIBNX)
|
||||
return (svcGetSystemTick() * 10) / 192;
|
||||
#elif defined(_POSIX_MONOTONIC_CLOCK) || defined(__QNX__) || defined(ANDROID) || defined(__MACH__) || defined(__PSL1GHT__)
|
||||
#elif defined(_POSIX_MONOTONIC_CLOCK) || defined(__QNX__) || defined(ANDROID) || defined(__MACH__)
|
||||
struct timespec tv = {0};
|
||||
if (ra_clock_gettime(CLOCK_MONOTONIC, &tv) < 0)
|
||||
return 0;
|
||||
|
||||
Loaded 100 of 175 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user