mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-12 12:45:56 +00:00
Merge branch 'shadps4-emu:main' into shader_cache
This commit is contained in:
commit
408bd3585a
51 changed files with 923 additions and 1207 deletions
|
@ -7,8 +7,8 @@ path = [
|
|||
"CMakeSettings.json",
|
||||
".github/FUNDING.yml",
|
||||
".github/shadps4.png",
|
||||
".github/workflows/scripts/update_translation.sh",
|
||||
".github/workflows/update_translation.yml",
|
||||
".github/workflows/scripts/update_translation.sh",
|
||||
".github/workflows/update_translation.yml",
|
||||
".gitmodules",
|
||||
"dist/MacOSBundleInfo.plist.in",
|
||||
"dist/net.shadps4.shadPS4.desktop",
|
||||
|
@ -29,6 +29,7 @@ path = [
|
|||
"src/images/discord.png",
|
||||
"src/images/dump_icon.png",
|
||||
"src/images/exit_icon.png",
|
||||
"src/images/favorite_icon.png",
|
||||
"src/images/file_icon.png",
|
||||
"src/images/trophy_icon.png",
|
||||
"src/images/flag_china.png",
|
||||
|
@ -71,7 +72,7 @@ path = [
|
|||
"src/images/youtube.svg",
|
||||
"src/shadps4.qrc",
|
||||
"src/shadps4.rc",
|
||||
"src/qt_gui/translations/update_translation.sh",
|
||||
"src/qt_gui/translations/update_translation.sh",
|
||||
]
|
||||
precedence = "aggregate"
|
||||
SPDX-FileCopyrightText = "shadPS4 Emulator Project"
|
||||
|
|
|
@ -74,6 +74,7 @@ and install the dependencies on that container as cited above.
|
|||
This option is **highly recommended** for distributions with immutable/atomic filesystems (example: Fedora Kinoite, SteamOS).
|
||||
|
||||
### Cloning
|
||||
The project uses submodules to manage dependencies, and they need to be initialized before you can build the project. To achieve this, make sure you've cloned the repository with the --recursive flag
|
||||
|
||||
```bash
|
||||
git clone --recursive https://github.com/shadps4-emu/shadPS4.git
|
||||
|
|
|
@ -23,8 +23,8 @@ u64 PS4_SYSV_ABI sceKernelGetDirectMemorySize() {
|
|||
return memory->GetTotalDirectSize();
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len,
|
||||
u64 alignment, int memoryType, s64* physAddrOut) {
|
||||
s32 PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len,
|
||||
u64 alignment, s32 memoryType, s64* physAddrOut) {
|
||||
if (searchStart < 0 || searchEnd < 0) {
|
||||
LOG_ERROR(Kernel_Vmm, "Invalid parameters!");
|
||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||
|
@ -71,13 +71,13 @@ int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelAllocateMainDirectMemory(size_t len, size_t alignment, int memoryType,
|
||||
s32 PS4_SYSV_ABI sceKernelAllocateMainDirectMemory(u64 len, u64 alignment, s32 memoryType,
|
||||
s64* physAddrOut) {
|
||||
const auto searchEnd = static_cast<s64>(sceKernelGetDirectMemorySize());
|
||||
return sceKernelAllocateDirectMemory(0, searchEnd, len, alignment, memoryType, physAddrOut);
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelCheckedReleaseDirectMemory(u64 start, size_t len) {
|
||||
s32 PS4_SYSV_ABI sceKernelCheckedReleaseDirectMemory(u64 start, u64 len) {
|
||||
if (len == 0) {
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ s32 PS4_SYSV_ABI sceKernelCheckedReleaseDirectMemory(u64 start, size_t len) {
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelReleaseDirectMemory(u64 start, size_t len) {
|
||||
s32 PS4_SYSV_ABI sceKernelReleaseDirectMemory(u64 start, u64 len) {
|
||||
if (len == 0) {
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
@ -96,9 +96,8 @@ s32 PS4_SYSV_ABI sceKernelReleaseDirectMemory(u64 start, size_t len) {
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchEnd,
|
||||
size_t alignment, u64* physAddrOut,
|
||||
size_t* sizeOut) {
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchEnd, u64 alignment,
|
||||
u64* physAddrOut, u64* sizeOut) {
|
||||
LOG_INFO(Kernel_Vmm, "called searchStart = {:#x}, searchEnd = {:#x}, alignment = {:#x}",
|
||||
searchStart, searchEnd, alignment);
|
||||
|
||||
|
@ -109,7 +108,7 @@ s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchE
|
|||
auto* memory = Core::Memory::Instance();
|
||||
|
||||
PAddr physAddr{};
|
||||
size_t size{};
|
||||
u64 size{};
|
||||
s32 result = memory->DirectQueryAvailable(searchStart, searchEnd, alignment, &physAddr, &size);
|
||||
|
||||
if (size == 0) {
|
||||
|
@ -122,14 +121,14 @@ s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchE
|
|||
return result;
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelVirtualQuery(const void* addr, int flags, OrbisVirtualQueryInfo* info,
|
||||
size_t infoSize) {
|
||||
s32 PS4_SYSV_ABI sceKernelVirtualQuery(const void* addr, s32 flags, OrbisVirtualQueryInfo* info,
|
||||
u64 infoSize) {
|
||||
LOG_INFO(Kernel_Vmm, "called addr = {}, flags = {:#x}", fmt::ptr(addr), flags);
|
||||
auto* memory = Core::Memory::Instance();
|
||||
return memory->VirtualQuery(std::bit_cast<VAddr>(addr), flags, info);
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelReserveVirtualRange(void** addr, u64 len, int flags, u64 alignment) {
|
||||
s32 PS4_SYSV_ABI sceKernelReserveVirtualRange(void** addr, u64 len, s32 flags, u64 alignment) {
|
||||
LOG_INFO(Kernel_Vmm, "addr = {}, len = {:#x}, flags = {:#x}, alignment = {:#x}",
|
||||
fmt::ptr(*addr), len, flags, alignment);
|
||||
if (addr == nullptr) {
|
||||
|
@ -159,7 +158,7 @@ s32 PS4_SYSV_ABI sceKernelReserveVirtualRange(void** addr, u64 len, int flags, u
|
|||
return result;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelMapNamedDirectMemory(void** addr, u64 len, int prot, int flags,
|
||||
s32 PS4_SYSV_ABI sceKernelMapNamedDirectMemory(void** addr, u64 len, s32 prot, s32 flags,
|
||||
s64 directMemoryStart, u64 alignment,
|
||||
const char* name) {
|
||||
LOG_INFO(Kernel_Vmm,
|
||||
|
@ -202,7 +201,7 @@ int PS4_SYSV_ABI sceKernelMapNamedDirectMemory(void** addr, u64 len, int prot, i
|
|||
return ret;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, u64 len, int prot, int flags,
|
||||
s32 PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, u64 len, s32 prot, s32 flags,
|
||||
s64 directMemoryStart, u64 alignment) {
|
||||
LOG_INFO(Kernel_Vmm, "called, redirected to sceKernelMapNamedDirectMemory");
|
||||
return sceKernelMapNamedDirectMemory(addr, len, prot, flags, directMemoryStart, alignment,
|
||||
|
@ -255,7 +254,7 @@ s32 PS4_SYSV_ABI sceKernelMapFlexibleMemory(void** addr_in_out, u64 len, s32 pro
|
|||
return sceKernelMapNamedFlexibleMemory(addr_in_out, len, prot, flags, "anon");
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelQueryMemoryProtection(void* addr, void** start, void** end, u32* prot) {
|
||||
s32 PS4_SYSV_ABI sceKernelQueryMemoryProtection(void* addr, void** start, void** end, u32* prot) {
|
||||
auto* memory = Core::Memory::Instance();
|
||||
return memory->QueryProtection(std::bit_cast<VAddr>(addr), start, end, prot);
|
||||
}
|
||||
|
@ -285,14 +284,14 @@ s32 PS4_SYSV_ABI sceKernelMtypeprotect(const void* addr, u64 size, s32 mtype, s3
|
|||
return memory_manager->Protect(std::bit_cast<VAddr>(addr), size, protection_flags);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelDirectMemoryQuery(u64 offset, int flags, OrbisQueryInfo* query_info,
|
||||
size_t infoSize) {
|
||||
s32 PS4_SYSV_ABI sceKernelDirectMemoryQuery(u64 offset, s32 flags, OrbisQueryInfo* query_info,
|
||||
u64 infoSize) {
|
||||
LOG_INFO(Kernel_Vmm, "called offset = {:#x}, flags = {:#x}", offset, flags);
|
||||
auto* memory = Core::Memory::Instance();
|
||||
return memory->DirectMemoryQuery(offset, flags == 1, query_info);
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableFlexibleMemorySize(size_t* out_size) {
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableFlexibleMemorySize(u64* out_size) {
|
||||
auto* memory = Core::Memory::Instance();
|
||||
*out_size = memory->GetAvailableFlexibleSize();
|
||||
LOG_INFO(Kernel_Vmm, "called size = {:#x}", *out_size);
|
||||
|
@ -304,7 +303,7 @@ void PS4_SYSV_ABI _sceKernelRtldSetApplicationHeapAPI(void* func[]) {
|
|||
linker->SetHeapAPI(func);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelGetDirectMemoryType(u64 addr, int* directMemoryTypeOut,
|
||||
s32 PS4_SYSV_ABI sceKernelGetDirectMemoryType(u64 addr, s32* directMemoryTypeOut,
|
||||
void** directMemoryStartOut,
|
||||
void** directMemoryEndOut) {
|
||||
LOG_WARNING(Kernel_Vmm, "called, direct memory addr = {:#x}", addr);
|
||||
|
@ -313,23 +312,23 @@ int PS4_SYSV_ABI sceKernelGetDirectMemoryType(u64 addr, int* directMemoryTypeOut
|
|||
directMemoryEndOut);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelIsStack(void* addr, void** start, void** end) {
|
||||
s32 PS4_SYSV_ABI sceKernelIsStack(void* addr, void** start, void** end) {
|
||||
LOG_DEBUG(Kernel_Vmm, "called, addr = {}", fmt::ptr(addr));
|
||||
auto* memory = Core::Memory::Instance();
|
||||
return memory->IsStack(std::bit_cast<VAddr>(addr), start, end);
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||
int* numEntriesOut) {
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap(OrbisKernelBatchMapEntry* entries, s32 numEntries,
|
||||
s32* numEntriesOut) {
|
||||
return sceKernelBatchMap2(entries, numEntries, numEntriesOut,
|
||||
MemoryFlags::SCE_KERNEL_MAP_FIXED); // 0x10, 0x410?
|
||||
}
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||
int* numEntriesOut, int flags) {
|
||||
int result = ORBIS_OK;
|
||||
int processed = 0;
|
||||
for (int i = 0; i < numEntries; i++, processed++) {
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, s32 numEntries,
|
||||
s32* numEntriesOut, s32 flags) {
|
||||
s32 result = ORBIS_OK;
|
||||
s32 processed = 0;
|
||||
for (s32 i = 0; i < numEntries; i++, processed++) {
|
||||
if (entries == nullptr || entries[i].length == 0 || entries[i].operation > 4) {
|
||||
result = ORBIS_KERNEL_ERROR_EINVAL;
|
||||
break; // break and assign a value to numEntriesOut.
|
||||
|
@ -619,7 +618,7 @@ s32 PS4_SYSV_ABI sceKernelConfiguredFlexibleMemorySize(u64* sizeOut) {
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelMunmap(void* addr, size_t len) {
|
||||
s32 PS4_SYSV_ABI sceKernelMunmap(void* addr, u64 len) {
|
||||
LOG_INFO(Kernel_Vmm, "addr = {}, len = {:#x}", fmt::ptr(addr), len);
|
||||
if (len == 0) {
|
||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||
|
@ -628,8 +627,8 @@ int PS4_SYSV_ABI sceKernelMunmap(void* addr, size_t len) {
|
|||
return memory->UnmapMemory(std::bit_cast<VAddr>(addr), len);
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI posix_munmap(void* addr, size_t len) {
|
||||
int result = sceKernelMunmap(addr, len);
|
||||
s32 PS4_SYSV_ABI posix_munmap(void* addr, u64 len) {
|
||||
s32 result = sceKernelMunmap(addr, len);
|
||||
if (result < 0) {
|
||||
LOG_ERROR(Kernel_Pthread, "posix_munmap: error = {}", result);
|
||||
ErrSceToPosix(result);
|
||||
|
@ -638,12 +637,12 @@ int PS4_SYSV_ABI posix_munmap(void* addr, size_t len) {
|
|||
return result;
|
||||
}
|
||||
|
||||
static constexpr int MAX_PRT_APERTURES = 3;
|
||||
static constexpr s32 MAX_PRT_APERTURES = 3;
|
||||
static constexpr VAddr PRT_AREA_START_ADDR = 0x1000000000;
|
||||
static constexpr size_t PRT_AREA_SIZE = 0xec00000000;
|
||||
static std::array<std::pair<VAddr, size_t>, MAX_PRT_APERTURES> PrtApertures{};
|
||||
static constexpr u64 PRT_AREA_SIZE = 0xec00000000;
|
||||
static std::array<std::pair<VAddr, u64>, MAX_PRT_APERTURES> PrtApertures{};
|
||||
|
||||
int PS4_SYSV_ABI sceKernelSetPrtAperture(int id, VAddr address, size_t size) {
|
||||
s32 PS4_SYSV_ABI sceKernelSetPrtAperture(s32 id, VAddr address, u64 size) {
|
||||
if (id < 0 || id >= MAX_PRT_APERTURES) {
|
||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||
}
|
||||
|
@ -667,7 +666,7 @@ int PS4_SYSV_ABI sceKernelSetPrtAperture(int id, VAddr address, size_t size) {
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelGetPrtAperture(int id, VAddr* address, size_t* size) {
|
||||
s32 PS4_SYSV_ABI sceKernelGetPrtAperture(s32 id, VAddr* address, u64* size) {
|
||||
if (id < 0 || id >= MAX_PRT_APERTURES) {
|
||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||
}
|
||||
|
|
|
@ -52,13 +52,13 @@ constexpr u32 ORBIS_KERNEL_MAXIMUM_NAME_LENGTH = 32;
|
|||
struct OrbisQueryInfo {
|
||||
uintptr_t start;
|
||||
uintptr_t end;
|
||||
int memoryType;
|
||||
s32 memoryType;
|
||||
};
|
||||
|
||||
struct OrbisVirtualQueryInfo {
|
||||
uintptr_t start;
|
||||
uintptr_t end;
|
||||
size_t offset;
|
||||
u64 offset;
|
||||
s32 protection;
|
||||
s32 memory_type;
|
||||
u8 is_flexible : 1;
|
||||
|
@ -73,12 +73,12 @@ static_assert(sizeof(OrbisVirtualQueryInfo) == 72,
|
|||
|
||||
struct OrbisKernelBatchMapEntry {
|
||||
void* start;
|
||||
size_t offset;
|
||||
size_t length;
|
||||
u64 offset;
|
||||
u64 length;
|
||||
char protection;
|
||||
char type;
|
||||
short reserved;
|
||||
int operation;
|
||||
s16 reserved;
|
||||
s32 operation;
|
||||
};
|
||||
|
||||
enum class OrbisKernelMemoryPoolOpcode : u32 {
|
||||
|
@ -124,45 +124,44 @@ struct OrbisKernelMemoryPoolBatchEntry {
|
|||
};
|
||||
|
||||
u64 PS4_SYSV_ABI sceKernelGetDirectMemorySize();
|
||||
int PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len,
|
||||
u64 alignment, int memoryType, s64* physAddrOut);
|
||||
int PS4_SYSV_ABI sceKernelMapNamedDirectMemory(void** addr, u64 len, int prot, int flags,
|
||||
s32 PS4_SYSV_ABI sceKernelAllocateDirectMemory(s64 searchStart, s64 searchEnd, u64 len,
|
||||
u64 alignment, s32 memoryType, s64* physAddrOut);
|
||||
s32 PS4_SYSV_ABI sceKernelMapNamedDirectMemory(void** addr, u64 len, s32 prot, s32 flags,
|
||||
s64 directMemoryStart, u64 alignment,
|
||||
const char* name);
|
||||
int PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, u64 len, int prot, int flags,
|
||||
s32 PS4_SYSV_ABI sceKernelMapDirectMemory(void** addr, u64 len, s32 prot, s32 flags,
|
||||
s64 directMemoryStart, u64 alignment);
|
||||
s32 PS4_SYSV_ABI sceKernelAllocateMainDirectMemory(size_t len, size_t alignment, int memoryType,
|
||||
s32 PS4_SYSV_ABI sceKernelAllocateMainDirectMemory(u64 len, u64 alignment, s32 memoryType,
|
||||
s64* physAddrOut);
|
||||
s32 PS4_SYSV_ABI sceKernelReleaseDirectMemory(u64 start, size_t len);
|
||||
s32 PS4_SYSV_ABI sceKernelCheckedReleaseDirectMemory(u64 start, size_t len);
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchEnd,
|
||||
size_t alignment, u64* physAddrOut,
|
||||
size_t* sizeOut);
|
||||
s32 PS4_SYSV_ABI sceKernelVirtualQuery(const void* addr, int flags, OrbisVirtualQueryInfo* info,
|
||||
size_t infoSize);
|
||||
s32 PS4_SYSV_ABI sceKernelReserveVirtualRange(void** addr, u64 len, int flags, u64 alignment);
|
||||
s32 PS4_SYSV_ABI sceKernelReleaseDirectMemory(u64 start, u64 len);
|
||||
s32 PS4_SYSV_ABI sceKernelCheckedReleaseDirectMemory(u64 start, u64 len);
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableDirectMemorySize(u64 searchStart, u64 searchEnd, u64 alignment,
|
||||
u64* physAddrOut, u64* sizeOut);
|
||||
s32 PS4_SYSV_ABI sceKernelVirtualQuery(const void* addr, s32 flags, OrbisVirtualQueryInfo* info,
|
||||
u64 infoSize);
|
||||
s32 PS4_SYSV_ABI sceKernelReserveVirtualRange(void** addr, u64 len, s32 flags, u64 alignment);
|
||||
s32 PS4_SYSV_ABI sceKernelMapNamedFlexibleMemory(void** addr_in_out, u64 len, s32 prot, s32 flags,
|
||||
const char* name);
|
||||
s32 PS4_SYSV_ABI sceKernelMapFlexibleMemory(void** addr_in_out, u64 len, s32 prot, s32 flags);
|
||||
int PS4_SYSV_ABI sceKernelQueryMemoryProtection(void* addr, void** start, void** end, u32* prot);
|
||||
s32 PS4_SYSV_ABI sceKernelQueryMemoryProtection(void* addr, void** start, void** end, u32* prot);
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelMprotect(const void* addr, u64 size, s32 prot);
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelMtypeprotect(const void* addr, u64 size, s32 mtype, s32 prot);
|
||||
|
||||
int PS4_SYSV_ABI sceKernelDirectMemoryQuery(u64 offset, int flags, OrbisQueryInfo* query_info,
|
||||
size_t infoSize);
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableFlexibleMemorySize(size_t* sizeOut);
|
||||
s32 PS4_SYSV_ABI sceKernelDirectMemoryQuery(u64 offset, s32 flags, OrbisQueryInfo* query_info,
|
||||
u64 infoSize);
|
||||
s32 PS4_SYSV_ABI sceKernelAvailableFlexibleMemorySize(u64* sizeOut);
|
||||
void PS4_SYSV_ABI _sceKernelRtldSetApplicationHeapAPI(void* func[]);
|
||||
int PS4_SYSV_ABI sceKernelGetDirectMemoryType(u64 addr, int* directMemoryTypeOut,
|
||||
s32 PS4_SYSV_ABI sceKernelGetDirectMemoryType(u64 addr, s32* directMemoryTypeOut,
|
||||
void** directMemoryStartOut,
|
||||
void** directMemoryEndOut);
|
||||
int PS4_SYSV_ABI sceKernelIsStack(void* addr, void** start, void** end);
|
||||
s32 PS4_SYSV_ABI sceKernelIsStack(void* addr, void** start, void** end);
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||
int* numEntriesOut);
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, int numEntries,
|
||||
int* numEntriesOut, int flags);
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap(OrbisKernelBatchMapEntry* entries, s32 numEntries,
|
||||
s32* numEntriesOut);
|
||||
s32 PS4_SYSV_ABI sceKernelBatchMap2(OrbisKernelBatchMapEntry* entries, s32 numEntries,
|
||||
s32* numEntriesOut, s32 flags);
|
||||
|
||||
s32 PS4_SYSV_ABI sceKernelSetVirtualRangeName(const void* addr, u64 len, const char* name);
|
||||
|
||||
|
@ -175,7 +174,7 @@ s32 PS4_SYSV_ABI sceKernelMemoryPoolDecommit(void* addr, u64 len, s32 flags);
|
|||
s32 PS4_SYSV_ABI sceKernelMemoryPoolBatch(const OrbisKernelMemoryPoolBatchEntry* entries, s32 count,
|
||||
s32* num_processed, s32 flags);
|
||||
|
||||
int PS4_SYSV_ABI sceKernelMunmap(void* addr, size_t len);
|
||||
s32 PS4_SYSV_ABI sceKernelMunmap(void* addr, u64 len);
|
||||
|
||||
void RegisterMemory(Core::Loader::SymbolsResolver* sym);
|
||||
|
||||
|
|
|
@ -103,7 +103,7 @@ s32 PS4_SYSV_ABI sceKernelGetModuleInfoForUnwind(VAddr addr, s32 flags,
|
|||
auto* linker = Common::Singleton<Core::Linker>::Instance();
|
||||
auto* module = linker->FindByAddress(addr);
|
||||
if (!module) {
|
||||
return ORBIS_KERNEL_ERROR_EFAULT;
|
||||
return ORBIS_KERNEL_ERROR_ESRCH;
|
||||
}
|
||||
const auto mod_info = module->GetModuleInfoEx();
|
||||
|
||||
|
@ -118,11 +118,23 @@ s32 PS4_SYSV_ABI sceKernelGetModuleInfoForUnwind(VAddr addr, s32 flags,
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int PS4_SYSV_ABI sceKernelGetModuleInfoFromAddr(VAddr addr, int flags,
|
||||
s32 PS4_SYSV_ABI sceKernelGetModuleInfoFromAddr(VAddr addr, s32 flags,
|
||||
Core::OrbisKernelModuleInfoEx* info) {
|
||||
if (flags >= 3) {
|
||||
std::memset(info, 0, sizeof(Core::OrbisKernelModuleInfoEx));
|
||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||
}
|
||||
if (info == nullptr) {
|
||||
return ORBIS_KERNEL_ERROR_EFAULT;
|
||||
}
|
||||
|
||||
LOG_INFO(Lib_Kernel, "called addr = {:#x}, flags = {:#x}", addr, flags);
|
||||
auto* linker = Common::Singleton<Core::Linker>::Instance();
|
||||
auto* module = linker->FindByAddress(addr);
|
||||
if (!module) {
|
||||
return ORBIS_KERNEL_ERROR_ESRCH;
|
||||
}
|
||||
|
||||
*info = module->GetModuleInfoEx();
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
|
|
@ -100,6 +100,11 @@ s32 SystemSetupCore(StackBuffer* stackBuffer, const OrbisNgs2SystemOption* optio
|
|||
return ORBIS_NGS2_ERROR_INVALID_SAMPLE_RATE;
|
||||
}
|
||||
|
||||
if (outSystem) {
|
||||
// dummy handle
|
||||
outSystem->systemHandle = 1;
|
||||
}
|
||||
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -17,11 +17,11 @@ namespace Core {
|
|||
MemoryManager::MemoryManager() {
|
||||
// Insert a virtual memory area that covers the entire area we manage.
|
||||
const VAddr system_managed_base = impl.SystemManagedVirtualBase();
|
||||
const size_t system_managed_size = impl.SystemManagedVirtualSize();
|
||||
const u64 system_managed_size = impl.SystemManagedVirtualSize();
|
||||
const VAddr system_reserved_base = impl.SystemReservedVirtualBase();
|
||||
const size_t system_reserved_size = impl.SystemReservedVirtualSize();
|
||||
const u64 system_reserved_size = impl.SystemReservedVirtualSize();
|
||||
const VAddr user_base = impl.UserVirtualBase();
|
||||
const size_t user_size = impl.UserVirtualSize();
|
||||
const u64 user_size = impl.UserVirtualSize();
|
||||
vma_map.emplace(system_managed_base,
|
||||
VirtualMemoryArea{system_managed_base, system_managed_size});
|
||||
vma_map.emplace(system_reserved_base,
|
||||
|
@ -148,7 +148,7 @@ bool MemoryManager::TryWriteBacking(void* address, const void* data, u32 num_byt
|
|||
return true;
|
||||
}
|
||||
|
||||
PAddr MemoryManager::PoolExpand(PAddr search_start, PAddr search_end, size_t size, u64 alignment) {
|
||||
PAddr MemoryManager::PoolExpand(PAddr search_start, PAddr search_end, u64 size, u64 alignment) {
|
||||
std::scoped_lock lk{mutex};
|
||||
alignment = alignment > 0 ? alignment : 64_KB;
|
||||
|
||||
|
@ -188,8 +188,8 @@ PAddr MemoryManager::PoolExpand(PAddr search_start, PAddr search_end, size_t siz
|
|||
return mapping_start;
|
||||
}
|
||||
|
||||
PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size, u64 alignment,
|
||||
int memory_type) {
|
||||
PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, u64 size, u64 alignment,
|
||||
s32 memory_type) {
|
||||
std::scoped_lock lk{mutex};
|
||||
alignment = alignment > 0 ? alignment : 16_KB;
|
||||
|
||||
|
@ -226,7 +226,7 @@ PAddr MemoryManager::Allocate(PAddr search_start, PAddr search_end, size_t size,
|
|||
return mapping_start;
|
||||
}
|
||||
|
||||
void MemoryManager::Free(PAddr phys_addr, size_t size) {
|
||||
void MemoryManager::Free(PAddr phys_addr, u64 size) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
auto dmem_area = CarveDmemArea(phys_addr, size);
|
||||
|
@ -256,7 +256,7 @@ void MemoryManager::Free(PAddr phys_addr, size_t size) {
|
|||
MergeAdjacent(dmem_map, dmem_area);
|
||||
}
|
||||
|
||||
int MemoryManager::PoolCommit(VAddr virtual_addr, size_t size, MemoryProt prot) {
|
||||
s32 MemoryManager::PoolCommit(VAddr virtual_addr, u64 size, MemoryProt prot) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
const u64 alignment = 64_KB;
|
||||
|
@ -320,6 +320,28 @@ s32 MemoryManager::MapMemory(void** out_addr, VAddr virtual_addr, u64 size, Memo
|
|||
return ORBIS_KERNEL_ERROR_ENOMEM;
|
||||
}
|
||||
|
||||
// Validate the requested physical address range
|
||||
if (phys_addr != -1) {
|
||||
u64 validated_size = 0;
|
||||
do {
|
||||
auto dmem_area = FindDmemArea(phys_addr + validated_size)->second;
|
||||
// If any requested dmem area is not allocated, return an error.
|
||||
if (dmem_area.is_free) {
|
||||
LOG_ERROR(Kernel_Vmm, "Unable to map {:#x} bytes at physical address {:#x}", size,
|
||||
phys_addr);
|
||||
return ORBIS_KERNEL_ERROR_ENOMEM;
|
||||
}
|
||||
// Track how much we've validated.
|
||||
validated_size += dmem_area.size - (phys_addr + validated_size - dmem_area.base);
|
||||
} while (validated_size < size && phys_addr + validated_size < GetTotalDirectSize());
|
||||
// If the requested range goes outside the dmem map, return an error.
|
||||
if (validated_size < size) {
|
||||
LOG_ERROR(Kernel_Vmm, "Unable to map {:#x} bytes at physical address {:#x}", size,
|
||||
phys_addr);
|
||||
return ORBIS_KERNEL_ERROR_ENOMEM;
|
||||
}
|
||||
}
|
||||
|
||||
// Limit the minumum address to SystemManagedVirtualBase to prevent hardware-specific issues.
|
||||
VAddr mapped_addr = (virtual_addr == 0) ? impl.SystemManagedVirtualBase() : virtual_addr;
|
||||
|
||||
|
@ -403,7 +425,7 @@ s32 MemoryManager::MapFile(void** out_addr, VAddr virtual_addr, u64 size, Memory
|
|||
auto* h = Common::Singleton<Core::FileSys::HandleTable>::Instance();
|
||||
|
||||
VAddr mapped_addr = (virtual_addr == 0) ? impl.SystemManagedVirtualBase() : virtual_addr;
|
||||
const size_t size_aligned = Common::AlignUp(size, 16_KB);
|
||||
const u64 size_aligned = Common::AlignUp(size, 16_KB);
|
||||
|
||||
// Find first free area to map the file.
|
||||
if (False(flags & MemoryMapFlags::Fixed)) {
|
||||
|
@ -416,7 +438,7 @@ s32 MemoryManager::MapFile(void** out_addr, VAddr virtual_addr, u64 size, Memory
|
|||
|
||||
if (True(flags & MemoryMapFlags::Fixed)) {
|
||||
const auto& vma = FindVMA(virtual_addr)->second;
|
||||
const size_t remaining_size = vma.base + vma.size - virtual_addr;
|
||||
const u64 remaining_size = vma.base + vma.size - virtual_addr;
|
||||
ASSERT_MSG(!vma.IsMapped() && remaining_size >= size,
|
||||
"Memory region {:#x} to {:#x} isn't free enough to map region {:#x} to {:#x}",
|
||||
vma.base, vma.base + vma.size, virtual_addr, virtual_addr + size);
|
||||
|
@ -448,7 +470,7 @@ s32 MemoryManager::MapFile(void** out_addr, VAddr virtual_addr, u64 size, Memory
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 MemoryManager::PoolDecommit(VAddr virtual_addr, size_t size) {
|
||||
s32 MemoryManager::PoolDecommit(VAddr virtual_addr, u64 size) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
const auto it = FindVMA(virtual_addr);
|
||||
|
@ -498,7 +520,7 @@ s32 MemoryManager::PoolDecommit(VAddr virtual_addr, size_t size) {
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 MemoryManager::UnmapMemory(VAddr virtual_addr, size_t size) {
|
||||
s32 MemoryManager::UnmapMemory(VAddr virtual_addr, u64 size) {
|
||||
std::scoped_lock lk{mutex};
|
||||
return UnmapMemoryImpl(virtual_addr, size);
|
||||
}
|
||||
|
@ -564,7 +586,7 @@ s32 MemoryManager::UnmapMemoryImpl(VAddr virtual_addr, u64 size) {
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int MemoryManager::QueryProtection(VAddr addr, void** start, void** end, u32* prot) {
|
||||
s32 MemoryManager::QueryProtection(VAddr addr, void** start, void** end, u32* prot) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
const auto it = FindVMA(addr);
|
||||
|
@ -586,8 +608,7 @@ int MemoryManager::QueryProtection(VAddr addr, void** start, void** end, u32* pr
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s64 MemoryManager::ProtectBytes(VAddr addr, VirtualMemoryArea vma_base, size_t size,
|
||||
MemoryProt prot) {
|
||||
s64 MemoryManager::ProtectBytes(VAddr addr, VirtualMemoryArea vma_base, u64 size, MemoryProt prot) {
|
||||
const auto start_in_vma = addr - vma_base.base;
|
||||
const auto adjusted_size =
|
||||
vma_base.size - start_in_vma < size ? vma_base.size - start_in_vma : size;
|
||||
|
@ -624,7 +645,7 @@ s64 MemoryManager::ProtectBytes(VAddr addr, VirtualMemoryArea vma_base, size_t s
|
|||
return adjusted_size;
|
||||
}
|
||||
|
||||
s32 MemoryManager::Protect(VAddr addr, size_t size, MemoryProt prot) {
|
||||
s32 MemoryManager::Protect(VAddr addr, u64 size, MemoryProt prot) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
// Validate protection flags
|
||||
|
@ -649,9 +670,8 @@ s32 MemoryManager::Protect(VAddr addr, size_t size, MemoryProt prot) {
|
|||
auto& vma_base = it->second;
|
||||
ASSERT_MSG(vma_base.Contains(addr + protected_bytes, 0), "Address {:#x} is out of bounds",
|
||||
addr + protected_bytes);
|
||||
auto result = 0;
|
||||
result = ProtectBytes(aligned_addr + protected_bytes, vma_base,
|
||||
aligned_size - protected_bytes, prot);
|
||||
auto result = ProtectBytes(aligned_addr + protected_bytes, vma_base,
|
||||
aligned_size - protected_bytes, prot);
|
||||
if (result < 0) {
|
||||
// ProtectBytes returned an error, return it
|
||||
return result;
|
||||
|
@ -662,7 +682,7 @@ s32 MemoryManager::Protect(VAddr addr, size_t size, MemoryProt prot) {
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int MemoryManager::VirtualQuery(VAddr addr, int flags,
|
||||
s32 MemoryManager::VirtualQuery(VAddr addr, s32 flags,
|
||||
::Libraries::Kernel::OrbisVirtualQueryInfo* info) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
|
@ -707,7 +727,7 @@ int MemoryManager::VirtualQuery(VAddr addr, int flags,
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int MemoryManager::DirectMemoryQuery(PAddr addr, bool find_next,
|
||||
s32 MemoryManager::DirectMemoryQuery(PAddr addr, bool find_next,
|
||||
::Libraries::Kernel::OrbisQueryInfo* out_info) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
|
@ -728,13 +748,13 @@ int MemoryManager::DirectMemoryQuery(PAddr addr, bool find_next,
|
|||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int MemoryManager::DirectQueryAvailable(PAddr search_start, PAddr search_end, size_t alignment,
|
||||
PAddr* phys_addr_out, size_t* size_out) {
|
||||
s32 MemoryManager::DirectQueryAvailable(PAddr search_start, PAddr search_end, u64 alignment,
|
||||
PAddr* phys_addr_out, u64* size_out) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
auto dmem_area = FindDmemArea(search_start);
|
||||
PAddr paddr{};
|
||||
size_t max_size{};
|
||||
u64 max_size{};
|
||||
|
||||
while (dmem_area != dmem_map.end()) {
|
||||
if (!dmem_area->second.is_free) {
|
||||
|
@ -815,13 +835,60 @@ void MemoryManager::NameVirtualRange(VAddr virtual_addr, u64 size, std::string_v
|
|||
}
|
||||
}
|
||||
|
||||
s32 MemoryManager::GetDirectMemoryType(PAddr addr, s32* directMemoryTypeOut,
|
||||
void** directMemoryStartOut, void** directMemoryEndOut) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
auto dmem_area = FindDmemArea(addr);
|
||||
|
||||
if (addr > dmem_area->second.GetEnd() || dmem_area->second.is_free) {
|
||||
LOG_ERROR(Core, "Unable to find allocated direct memory region to check type!");
|
||||
return ORBIS_KERNEL_ERROR_ENOENT;
|
||||
}
|
||||
|
||||
const auto& area = dmem_area->second;
|
||||
*directMemoryStartOut = reinterpret_cast<void*>(area.base);
|
||||
*directMemoryEndOut = reinterpret_cast<void*>(area.GetEnd());
|
||||
*directMemoryTypeOut = area.memory_type;
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
s32 MemoryManager::IsStack(VAddr addr, void** start, void** end) {
|
||||
auto vma_handle = FindVMA(addr);
|
||||
if (vma_handle == vma_map.end()) {
|
||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||
}
|
||||
|
||||
const VirtualMemoryArea& vma = vma_handle->second;
|
||||
if (!vma.Contains(addr, 0) || vma.IsFree()) {
|
||||
return ORBIS_KERNEL_ERROR_EACCES;
|
||||
}
|
||||
|
||||
u64 stack_start = 0;
|
||||
u64 stack_end = 0;
|
||||
if (vma.type == VMAType::Stack) {
|
||||
stack_start = vma.base;
|
||||
stack_end = vma.base + vma.size;
|
||||
}
|
||||
|
||||
if (start != nullptr) {
|
||||
*start = reinterpret_cast<void*>(stack_start);
|
||||
}
|
||||
|
||||
if (end != nullptr) {
|
||||
*end = reinterpret_cast<void*>(stack_end);
|
||||
}
|
||||
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
void MemoryManager::InvalidateMemory(const VAddr addr, const u64 size) const {
|
||||
if (rasterizer) {
|
||||
rasterizer->InvalidateMemory(addr, size);
|
||||
}
|
||||
}
|
||||
|
||||
VAddr MemoryManager::SearchFree(VAddr virtual_addr, size_t size, u32 alignment) {
|
||||
VAddr MemoryManager::SearchFree(VAddr virtual_addr, u64 size, u32 alignment) {
|
||||
// If the requested address is below the mapped range, start search from the lowest address
|
||||
auto min_search_address = impl.SystemManagedVirtualBase();
|
||||
if (virtual_addr < min_search_address) {
|
||||
|
@ -864,7 +931,7 @@ VAddr MemoryManager::SearchFree(VAddr virtual_addr, size_t size, u32 alignment)
|
|||
}
|
||||
|
||||
// If there's enough space in the VMA, return the address.
|
||||
const size_t remaining_size = vma.base + vma.size - virtual_addr;
|
||||
const u64 remaining_size = vma.base + vma.size - virtual_addr;
|
||||
if (remaining_size >= size) {
|
||||
return virtual_addr;
|
||||
}
|
||||
|
@ -877,7 +944,7 @@ VAddr MemoryManager::SearchFree(VAddr virtual_addr, size_t size, u32 alignment)
|
|||
return -1;
|
||||
}
|
||||
|
||||
MemoryManager::VMAHandle MemoryManager::CarveVMA(VAddr virtual_addr, size_t size) {
|
||||
MemoryManager::VMAHandle MemoryManager::CarveVMA(VAddr virtual_addr, u64 size) {
|
||||
auto vma_handle = FindVMA(virtual_addr);
|
||||
ASSERT_MSG(vma_handle->second.Contains(virtual_addr, 0), "Virtual address not in vm_map");
|
||||
|
||||
|
@ -906,7 +973,7 @@ MemoryManager::VMAHandle MemoryManager::CarveVMA(VAddr virtual_addr, size_t size
|
|||
return vma_handle;
|
||||
}
|
||||
|
||||
MemoryManager::DMemHandle MemoryManager::CarveDmemArea(PAddr addr, size_t size) {
|
||||
MemoryManager::DMemHandle MemoryManager::CarveDmemArea(PAddr addr, u64 size) {
|
||||
auto dmem_handle = FindDmemArea(addr);
|
||||
ASSERT_MSG(addr <= dmem_handle->second.GetEnd(), "Physical address not in dmem_map");
|
||||
|
||||
|
@ -930,7 +997,7 @@ MemoryManager::DMemHandle MemoryManager::CarveDmemArea(PAddr addr, size_t size)
|
|||
return dmem_handle;
|
||||
}
|
||||
|
||||
MemoryManager::VMAHandle MemoryManager::Split(VMAHandle vma_handle, size_t offset_in_vma) {
|
||||
MemoryManager::VMAHandle MemoryManager::Split(VMAHandle vma_handle, u64 offset_in_vma) {
|
||||
auto& old_vma = vma_handle->second;
|
||||
ASSERT(offset_in_vma < old_vma.size && offset_in_vma > 0);
|
||||
|
||||
|
@ -945,7 +1012,7 @@ MemoryManager::VMAHandle MemoryManager::Split(VMAHandle vma_handle, size_t offse
|
|||
return vma_map.emplace_hint(std::next(vma_handle), new_vma.base, new_vma);
|
||||
}
|
||||
|
||||
MemoryManager::DMemHandle MemoryManager::Split(DMemHandle dmem_handle, size_t offset_in_area) {
|
||||
MemoryManager::DMemHandle MemoryManager::Split(DMemHandle dmem_handle, u64 offset_in_area) {
|
||||
auto& old_area = dmem_handle->second;
|
||||
ASSERT(offset_in_area < old_area.size && offset_in_area > 0);
|
||||
|
||||
|
@ -957,51 +1024,4 @@ MemoryManager::DMemHandle MemoryManager::Split(DMemHandle dmem_handle, size_t of
|
|||
return dmem_map.emplace_hint(std::next(dmem_handle), new_area.base, new_area);
|
||||
}
|
||||
|
||||
int MemoryManager::GetDirectMemoryType(PAddr addr, int* directMemoryTypeOut,
|
||||
void** directMemoryStartOut, void** directMemoryEndOut) {
|
||||
std::scoped_lock lk{mutex};
|
||||
|
||||
auto dmem_area = FindDmemArea(addr);
|
||||
|
||||
if (addr > dmem_area->second.GetEnd() || dmem_area->second.is_free) {
|
||||
LOG_ERROR(Core, "Unable to find allocated direct memory region to check type!");
|
||||
return ORBIS_KERNEL_ERROR_ENOENT;
|
||||
}
|
||||
|
||||
const auto& area = dmem_area->second;
|
||||
*directMemoryStartOut = reinterpret_cast<void*>(area.base);
|
||||
*directMemoryEndOut = reinterpret_cast<void*>(area.GetEnd());
|
||||
*directMemoryTypeOut = area.memory_type;
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
int MemoryManager::IsStack(VAddr addr, void** start, void** end) {
|
||||
auto vma_handle = FindVMA(addr);
|
||||
if (vma_handle == vma_map.end()) {
|
||||
return ORBIS_KERNEL_ERROR_EINVAL;
|
||||
}
|
||||
|
||||
const VirtualMemoryArea& vma = vma_handle->second;
|
||||
if (!vma.Contains(addr, 0) || vma.IsFree()) {
|
||||
return ORBIS_KERNEL_ERROR_EACCES;
|
||||
}
|
||||
|
||||
auto stack_start = 0ul;
|
||||
auto stack_end = 0ul;
|
||||
if (vma.type == VMAType::Stack) {
|
||||
stack_start = vma.base;
|
||||
stack_end = vma.base + vma.size;
|
||||
}
|
||||
|
||||
if (start != nullptr) {
|
||||
*start = reinterpret_cast<void*>(stack_start);
|
||||
}
|
||||
|
||||
if (end != nullptr) {
|
||||
*end = reinterpret_cast<void*>(stack_end);
|
||||
}
|
||||
|
||||
return ORBIS_OK;
|
||||
}
|
||||
|
||||
} // namespace Core
|
||||
|
|
|
@ -63,8 +63,8 @@ enum class VMAType : u32 {
|
|||
|
||||
struct DirectMemoryArea {
|
||||
PAddr base = 0;
|
||||
size_t size = 0;
|
||||
int memory_type = 0;
|
||||
u64 size = 0;
|
||||
s32 memory_type = 0;
|
||||
bool is_pooled = false;
|
||||
bool is_free = true;
|
||||
|
||||
|
@ -88,7 +88,7 @@ struct DirectMemoryArea {
|
|||
|
||||
struct VirtualMemoryArea {
|
||||
VAddr base = 0;
|
||||
size_t size = 0;
|
||||
u64 size = 0;
|
||||
PAddr phys_base = 0;
|
||||
VMAType type = VMAType::Free;
|
||||
MemoryProt prot = MemoryProt::NoAccess;
|
||||
|
@ -97,7 +97,7 @@ struct VirtualMemoryArea {
|
|||
uintptr_t fd = 0;
|
||||
bool is_exec = false;
|
||||
|
||||
bool Contains(VAddr addr, size_t size) const {
|
||||
bool Contains(VAddr addr, u64 size) const {
|
||||
return addr >= base && (addr + size) <= (base + this->size);
|
||||
}
|
||||
|
||||
|
@ -184,14 +184,13 @@ public:
|
|||
|
||||
void SetupMemoryRegions(u64 flexible_size, bool use_extended_mem1, bool use_extended_mem2);
|
||||
|
||||
PAddr PoolExpand(PAddr search_start, PAddr search_end, size_t size, u64 alignment);
|
||||
PAddr PoolExpand(PAddr search_start, PAddr search_end, u64 size, u64 alignment);
|
||||
|
||||
PAddr Allocate(PAddr search_start, PAddr search_end, size_t size, u64 alignment,
|
||||
int memory_type);
|
||||
PAddr Allocate(PAddr search_start, PAddr search_end, u64 size, u64 alignment, s32 memory_type);
|
||||
|
||||
void Free(PAddr phys_addr, size_t size);
|
||||
void Free(PAddr phys_addr, u64 size);
|
||||
|
||||
int PoolCommit(VAddr virtual_addr, size_t size, MemoryProt prot);
|
||||
s32 PoolCommit(VAddr virtual_addr, u64 size, MemoryProt prot);
|
||||
|
||||
s32 MapMemory(void** out_addr, VAddr virtual_addr, u64 size, MemoryProt prot,
|
||||
MemoryMapFlags flags, VMAType type, std::string_view name = "anon",
|
||||
|
@ -200,35 +199,35 @@ public:
|
|||
s32 MapFile(void** out_addr, VAddr virtual_addr, u64 size, MemoryProt prot,
|
||||
MemoryMapFlags flags, s32 fd, s64 phys_addr);
|
||||
|
||||
s32 PoolDecommit(VAddr virtual_addr, size_t size);
|
||||
s32 PoolDecommit(VAddr virtual_addr, u64 size);
|
||||
|
||||
s32 UnmapMemory(VAddr virtual_addr, size_t size);
|
||||
s32 UnmapMemory(VAddr virtual_addr, u64 size);
|
||||
|
||||
int QueryProtection(VAddr addr, void** start, void** end, u32* prot);
|
||||
s32 QueryProtection(VAddr addr, void** start, void** end, u32* prot);
|
||||
|
||||
s32 Protect(VAddr addr, size_t size, MemoryProt prot);
|
||||
s32 Protect(VAddr addr, u64 size, MemoryProt prot);
|
||||
|
||||
s64 ProtectBytes(VAddr addr, VirtualMemoryArea vma_base, size_t size, MemoryProt prot);
|
||||
s64 ProtectBytes(VAddr addr, VirtualMemoryArea vma_base, u64 size, MemoryProt prot);
|
||||
|
||||
int VirtualQuery(VAddr addr, int flags, ::Libraries::Kernel::OrbisVirtualQueryInfo* info);
|
||||
s32 VirtualQuery(VAddr addr, s32 flags, ::Libraries::Kernel::OrbisVirtualQueryInfo* info);
|
||||
|
||||
int DirectMemoryQuery(PAddr addr, bool find_next,
|
||||
s32 DirectMemoryQuery(PAddr addr, bool find_next,
|
||||
::Libraries::Kernel::OrbisQueryInfo* out_info);
|
||||
|
||||
int DirectQueryAvailable(PAddr search_start, PAddr search_end, size_t alignment,
|
||||
PAddr* phys_addr_out, size_t* size_out);
|
||||
s32 DirectQueryAvailable(PAddr search_start, PAddr search_end, u64 alignment,
|
||||
PAddr* phys_addr_out, u64* size_out);
|
||||
|
||||
int GetDirectMemoryType(PAddr addr, int* directMemoryTypeOut, void** directMemoryStartOut,
|
||||
s32 GetDirectMemoryType(PAddr addr, s32* directMemoryTypeOut, void** directMemoryStartOut,
|
||||
void** directMemoryEndOut);
|
||||
|
||||
s32 IsStack(VAddr addr, void** start, void** end);
|
||||
|
||||
s32 SetDirectMemoryType(s64 phys_addr, s32 memory_type);
|
||||
|
||||
void NameVirtualRange(VAddr virtual_addr, u64 size, std::string_view name);
|
||||
|
||||
void InvalidateMemory(VAddr addr, u64 size) const;
|
||||
|
||||
int IsStack(VAddr addr, void** start, void** end);
|
||||
|
||||
private:
|
||||
VMAHandle FindVMA(VAddr target) {
|
||||
return std::prev(vma_map.upper_bound(target));
|
||||
|
@ -258,15 +257,15 @@ private:
|
|||
return iter;
|
||||
}
|
||||
|
||||
VAddr SearchFree(VAddr virtual_addr, size_t size, u32 alignment = 0);
|
||||
VAddr SearchFree(VAddr virtual_addr, u64 size, u32 alignment = 0);
|
||||
|
||||
VMAHandle CarveVMA(VAddr virtual_addr, size_t size);
|
||||
VMAHandle CarveVMA(VAddr virtual_addr, u64 size);
|
||||
|
||||
DMemHandle CarveDmemArea(PAddr addr, size_t size);
|
||||
DMemHandle CarveDmemArea(PAddr addr, u64 size);
|
||||
|
||||
VMAHandle Split(VMAHandle vma_handle, size_t offset_in_vma);
|
||||
VMAHandle Split(VMAHandle vma_handle, u64 offset_in_vma);
|
||||
|
||||
DMemHandle Split(DMemHandle dmem_handle, size_t offset_in_area);
|
||||
DMemHandle Split(DMemHandle dmem_handle, u64 offset_in_area);
|
||||
|
||||
u64 UnmapBytesFromEntry(VAddr virtual_addr, VirtualMemoryArea vma_base, u64 size);
|
||||
|
||||
|
@ -277,10 +276,10 @@ private:
|
|||
DMemMap dmem_map;
|
||||
VMAMap vma_map;
|
||||
std::mutex mutex;
|
||||
size_t total_direct_size{};
|
||||
size_t total_flexible_size{};
|
||||
size_t flexible_usage{};
|
||||
size_t pool_budget{};
|
||||
u64 total_direct_size{};
|
||||
u64 total_flexible_size{};
|
||||
u64 flexible_usage{};
|
||||
u64 pool_budget{};
|
||||
Vulkan::Rasterizer* rasterizer{};
|
||||
|
||||
struct PrtArea {
|
||||
|
|
BIN
src/images/favorite_icon.png
Normal file
BIN
src/images/favorite_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
|
@ -36,6 +36,7 @@ GameGridFrame::GameGridFrame(std::shared_ptr<gui_settings> gui_settings,
|
|||
connect(this, &QTableWidget::customContextMenuRequested, this, [=, this](const QPoint& pos) {
|
||||
m_gui_context_menus.RequestGameMenu(pos, m_game_info->m_games, m_compat_info,
|
||||
m_gui_settings, this, false);
|
||||
PopulateGameGrid(m_game_info->m_games, false);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -89,10 +90,13 @@ void GameGridFrame::PopulateGameGrid(QVector<GameInfo> m_games_search, bool from
|
|||
this->crtColumn = -1;
|
||||
QVector<GameInfo> m_games_;
|
||||
this->clearContents();
|
||||
if (fromSearch)
|
||||
if (fromSearch) {
|
||||
SortByFavorite(&m_games_search);
|
||||
m_games_ = m_games_search;
|
||||
else
|
||||
} else {
|
||||
SortByFavorite(&(m_game_info->m_games));
|
||||
m_games_ = m_game_info->m_games;
|
||||
}
|
||||
m_games_shared = std::make_shared<QVector<GameInfo>>(m_games_);
|
||||
icon_size =
|
||||
m_gui_settings->GetValue(gui::gg_icon_size).toInt(); // update icon size for resize event.
|
||||
|
@ -111,14 +115,21 @@ void GameGridFrame::PopulateGameGrid(QVector<GameInfo> m_games_search, bool from
|
|||
for (int i = 0; i < m_games_.size(); i++) {
|
||||
QWidget* widget = new QWidget();
|
||||
QVBoxLayout* layout = new QVBoxLayout();
|
||||
QLabel* image_label = new QLabel();
|
||||
|
||||
QWidget* image_container = new QWidget();
|
||||
image_container->setFixedSize(icon_size, icon_size);
|
||||
|
||||
QLabel* image_label = new QLabel(image_container);
|
||||
QImage icon = m_games_[gameCounter].icon.scaled(
|
||||
QSize(icon_size, icon_size), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||
image_label->setFixedSize(icon.width(), icon.height());
|
||||
image_label->setPixmap(QPixmap::fromImage(icon));
|
||||
image_label->move(0, 0);
|
||||
SetFavoriteIcon(image_container, m_games_, gameCounter);
|
||||
|
||||
QLabel* name_label = new QLabel(QString::fromStdString(m_games_[gameCounter].serial));
|
||||
name_label->setAlignment(Qt::AlignHCenter);
|
||||
layout->addWidget(image_label);
|
||||
layout->addWidget(image_container);
|
||||
layout->addWidget(name_label);
|
||||
|
||||
// Resizing of font-size.
|
||||
|
@ -226,3 +237,43 @@ void GameGridFrame::resizeEvent(QResizeEvent* event) {
|
|||
bool GameGridFrame::IsValidCellSelected() {
|
||||
return validCellSelected;
|
||||
}
|
||||
|
||||
void GameGridFrame::SetFavoriteIcon(QWidget* parentWidget, QVector<GameInfo> m_games_,
|
||||
int gameCounter) {
|
||||
QString serialStr = QString::fromStdString(m_games_[gameCounter].serial);
|
||||
QList<QString> list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list));
|
||||
bool isFavorite = list.contains(serialStr);
|
||||
|
||||
QLabel* label = new QLabel(parentWidget);
|
||||
label->setPixmap(QPixmap(":images/favorite_icon.png")
|
||||
.scaled(icon_size / 3.8, icon_size / 3.8, Qt::KeepAspectRatio,
|
||||
Qt::SmoothTransformation));
|
||||
label->move(icon_size - icon_size / 4, 2);
|
||||
label->raise();
|
||||
label->setVisible(isFavorite);
|
||||
label->setObjectName("favoriteIcon");
|
||||
}
|
||||
|
||||
void GameGridFrame::SortByFavorite(QVector<GameInfo>* game_list) {
|
||||
std::sort(game_list->begin(), game_list->end(), [this](const GameInfo& a, const GameInfo& b) {
|
||||
return this->CompareWithFavorite(a, b);
|
||||
});
|
||||
}
|
||||
|
||||
bool GameGridFrame::CompareWithFavorite(GameInfo a, GameInfo b) {
|
||||
std::string serial_a = a.serial;
|
||||
std::string serial_b = b.serial;
|
||||
QString serialStr_a = QString::fromStdString(a.serial);
|
||||
QString serialStr_b = QString::fromStdString(b.serial);
|
||||
QList<QString> list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list));
|
||||
bool isFavorite_a = list.contains(serialStr_a);
|
||||
bool isFavorite_b = list.contains(serialStr_b);
|
||||
if (isFavorite_a != isFavorite_b) {
|
||||
return isFavorite_a;
|
||||
} else {
|
||||
std::string name_a = a.name, name_b = b.name;
|
||||
std::transform(name_a.begin(), name_a.end(), name_a.begin(), ::tolower);
|
||||
std::transform(name_b.begin(), name_b.end(), name_b.begin(), ::tolower);
|
||||
return name_a < name_b;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,8 @@ private:
|
|||
int m_last_opacity = -1; // Track last opacity to avoid unnecessary recomputation
|
||||
std::filesystem::path m_current_game_path; // Track current game path to detect changes
|
||||
std::shared_ptr<gui_settings> m_gui_settings;
|
||||
void SetFavoriteIcon(QWidget* parentWidget, QVector<GameInfo> m_games_, int gameCounter);
|
||||
bool CompareWithFavorite(GameInfo a, GameInfo b);
|
||||
|
||||
public:
|
||||
explicit GameGridFrame(std::shared_ptr<gui_settings> gui_settings,
|
||||
|
@ -47,6 +49,7 @@ public:
|
|||
QWidget* parent = nullptr);
|
||||
void PopulateGameGrid(QVector<GameInfo> m_games, bool fromSearch);
|
||||
bool IsValidCellSelected();
|
||||
void SortByFavorite(QVector<GameInfo>* game_list);
|
||||
|
||||
bool cellClicked = false;
|
||||
int icon_size;
|
||||
|
|
|
@ -16,6 +16,7 @@ GameListFrame::GameListFrame(std::shared_ptr<gui_settings> gui_settings,
|
|||
: QTableWidget(parent), m_gui_settings(std::move(gui_settings)), m_game_info(game_info_get),
|
||||
m_compat_info(compat_info_get) {
|
||||
icon_size = m_gui_settings->GetValue(gui::gl_icon_size).toInt();
|
||||
last_favorite = "";
|
||||
this->setShowGrid(false);
|
||||
this->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||
this->setSelectionBehavior(QAbstractItemView::SelectRows);
|
||||
|
@ -30,9 +31,8 @@ GameListFrame::GameListFrame(std::shared_ptr<gui_settings> gui_settings,
|
|||
this->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
this->horizontalHeader()->setHighlightSections(false);
|
||||
this->horizontalHeader()->setSortIndicatorShown(true);
|
||||
this->horizontalHeader()->setStretchLastSection(true);
|
||||
this->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||
this->setColumnCount(10);
|
||||
this->setColumnCount(11);
|
||||
this->setColumnWidth(1, 300); // Name
|
||||
this->setColumnWidth(2, 140); // Compatibility
|
||||
this->setColumnWidth(3, 120); // Serial
|
||||
|
@ -41,14 +41,18 @@ GameListFrame::GameListFrame(std::shared_ptr<gui_settings> gui_settings,
|
|||
this->setColumnWidth(6, 90); // Size
|
||||
this->setColumnWidth(7, 90); // Version
|
||||
this->setColumnWidth(8, 120); // Play Time
|
||||
this->setColumnWidth(10, 90); // Favorite
|
||||
QStringList headers;
|
||||
headers << tr("Icon") << tr("Name") << tr("Compatibility") << tr("Serial") << tr("Region")
|
||||
<< tr("Firmware") << tr("Size") << tr("Version") << tr("Play Time") << tr("Path");
|
||||
<< tr("Firmware") << tr("Size") << tr("Version") << tr("Play Time") << tr("Path")
|
||||
<< tr("Favorite");
|
||||
this->setHorizontalHeaderLabels(headers);
|
||||
this->horizontalHeader()->setSortIndicatorShown(true);
|
||||
this->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
|
||||
this->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
|
||||
this->horizontalHeader()->setSectionResizeMode(4, QHeaderView::Fixed);
|
||||
this->horizontalHeader()->setSectionResizeMode(9, QHeaderView::Stretch);
|
||||
this->horizontalHeader()->setSectionResizeMode(10, QHeaderView::Fixed);
|
||||
PopulateGameList();
|
||||
|
||||
connect(this, &QTableWidget::currentCellChanged, this, &GameListFrame::onCurrentCellChanged);
|
||||
|
@ -65,18 +69,24 @@ GameListFrame::GameListFrame(std::shared_ptr<gui_settings> gui_settings,
|
|||
SortNameDescending(columnIndex);
|
||||
this->horizontalHeader()->setSortIndicator(columnIndex, Qt::DescendingOrder);
|
||||
ListSortedAsc = false;
|
||||
sortColumn = columnIndex;
|
||||
} else {
|
||||
SortNameAscending(columnIndex);
|
||||
this->horizontalHeader()->setSortIndicator(columnIndex, Qt::AscendingOrder);
|
||||
ListSortedAsc = true;
|
||||
sortColumn = columnIndex;
|
||||
}
|
||||
this->clearContents();
|
||||
PopulateGameList(false);
|
||||
});
|
||||
|
||||
connect(this, &QTableWidget::customContextMenuRequested, this, [=, this](const QPoint& pos) {
|
||||
m_gui_context_menus.RequestGameMenu(pos, m_game_info->m_games, m_compat_info,
|
||||
m_gui_settings, this, true);
|
||||
int changedFavorite = m_gui_context_menus.RequestGameMenu(
|
||||
pos, m_game_info->m_games, m_compat_info, m_gui_settings, this, true);
|
||||
if (changedFavorite) {
|
||||
last_favorite = m_game_info->m_games[this->currentRow()].serial;
|
||||
PopulateGameList(false);
|
||||
}
|
||||
});
|
||||
|
||||
connect(this, &QTableWidget::cellClicked, this, [=, this](int row, int column) {
|
||||
|
@ -84,6 +94,19 @@ GameListFrame::GameListFrame(std::shared_ptr<gui_settings> gui_settings,
|
|||
auto url_issues = "https://github.com/shadps4-emu/shadps4-game-compatibility/issues/";
|
||||
QDesktopServices::openUrl(
|
||||
QUrl(url_issues + m_game_info->m_games[row].compatibility.issue_number));
|
||||
} else if (column == 10) {
|
||||
last_favorite = m_game_info->m_games[row].serial;
|
||||
QString serialStr = QString::fromStdString(last_favorite);
|
||||
QList<QString> list =
|
||||
gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list));
|
||||
bool isFavorite = list.contains(serialStr);
|
||||
if (isFavorite) {
|
||||
list.removeOne(serialStr);
|
||||
} else {
|
||||
list.append(serialStr);
|
||||
}
|
||||
m_gui_settings->SetValue(gui::favorites_list, gui_settings::List2Var(list));
|
||||
PopulateGameList(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -118,10 +141,7 @@ void GameListFrame::PopulateGameList(bool isInitialPopulation) {
|
|||
this->setRowCount(m_game_info->m_games.size());
|
||||
ResizeIcons(icon_size);
|
||||
|
||||
if (isInitialPopulation) {
|
||||
SortNameAscending(1); // Column 1 = Name
|
||||
ResizeIcons(icon_size);
|
||||
}
|
||||
ApplyLastSorting(isInitialPopulation);
|
||||
|
||||
for (int i = 0; i < m_game_info->m_games.size(); i++) {
|
||||
SetTableItem(i, 1, QString::fromStdString(m_game_info->m_games[i].name));
|
||||
|
@ -130,6 +150,11 @@ void GameListFrame::PopulateGameList(bool isInitialPopulation) {
|
|||
SetTableItem(i, 5, QString::fromStdString(m_game_info->m_games[i].fw));
|
||||
SetTableItem(i, 6, QString::fromStdString(m_game_info->m_games[i].size));
|
||||
SetTableItem(i, 7, QString::fromStdString(m_game_info->m_games[i].version));
|
||||
SetFavoriteIcon(i, 10);
|
||||
|
||||
if (m_game_info->m_games[i].serial == last_favorite && !isInitialPopulation) {
|
||||
this->setCurrentCell(i, 10);
|
||||
}
|
||||
|
||||
m_game_info->m_games[i].compatibility =
|
||||
m_compat_info->GetCompatibilityInfo(m_game_info->m_games[i].serial);
|
||||
|
@ -227,20 +252,50 @@ void GameListFrame::resizeEvent(QResizeEvent* event) {
|
|||
RefreshListBackgroundImage();
|
||||
}
|
||||
|
||||
bool GameListFrame::CompareWithFavorite(GameInfo a, GameInfo b, int columnIndex, bool ascending) {
|
||||
std::string serial_a = a.serial;
|
||||
std::string serial_b = b.serial;
|
||||
QString serialStr_a = QString::fromStdString(a.serial);
|
||||
QString serialStr_b = QString::fromStdString(b.serial);
|
||||
QList<QString> list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list));
|
||||
bool isFavorite_a = list.contains(serialStr_a);
|
||||
bool isFavorite_b = list.contains(serialStr_b);
|
||||
if (isFavorite_a != isFavorite_b) {
|
||||
return isFavorite_a;
|
||||
} else if (ascending) {
|
||||
return CompareStringsAscending(a, b, columnIndex);
|
||||
} else {
|
||||
return CompareStringsDescending(a, b, columnIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void GameListFrame::SortNameAscending(int columnIndex) {
|
||||
std::sort(m_game_info->m_games.begin(), m_game_info->m_games.end(),
|
||||
[columnIndex](const GameInfo& a, const GameInfo& b) {
|
||||
return CompareStringsAscending(a, b, columnIndex);
|
||||
[this, columnIndex](const GameInfo& a, const GameInfo& b) {
|
||||
return this->CompareWithFavorite(a, b, columnIndex, true);
|
||||
});
|
||||
}
|
||||
|
||||
void GameListFrame::SortNameDescending(int columnIndex) {
|
||||
std::sort(m_game_info->m_games.begin(), m_game_info->m_games.end(),
|
||||
[columnIndex](const GameInfo& a, const GameInfo& b) {
|
||||
return CompareStringsDescending(a, b, columnIndex);
|
||||
[this, columnIndex](const GameInfo& a, const GameInfo& b) {
|
||||
return this->CompareWithFavorite(a, b, columnIndex, false);
|
||||
});
|
||||
}
|
||||
|
||||
void GameListFrame::ApplyLastSorting(bool isInitialPopulation) {
|
||||
if (isInitialPopulation) {
|
||||
SortNameAscending(1); // Column 1 = Name
|
||||
ResizeIcons(icon_size);
|
||||
} else if (ListSortedAsc) {
|
||||
SortNameAscending(sortColumn);
|
||||
ResizeIcons(icon_size);
|
||||
} else {
|
||||
SortNameDescending(sortColumn);
|
||||
ResizeIcons(icon_size);
|
||||
}
|
||||
}
|
||||
|
||||
void GameListFrame::ResizeIcons(int iconSize) {
|
||||
for (int index = 0; auto& game : m_game_info->m_games) {
|
||||
QImage scaledPixmap = game.icon.scaled(QSize(iconSize, iconSize), Qt::KeepAspectRatio,
|
||||
|
@ -391,6 +446,35 @@ void GameListFrame::SetRegionFlag(int row, int column, QString itemStr) {
|
|||
this->setCellWidget(row, column, widget);
|
||||
}
|
||||
|
||||
void GameListFrame::SetFavoriteIcon(int row, int column) {
|
||||
|
||||
QString serialStr = QString::fromStdString(m_game_info->m_games[row].serial);
|
||||
QList<QString> list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list));
|
||||
bool isFavorite = list.contains(serialStr);
|
||||
|
||||
QTableWidgetItem* item = new QTableWidgetItem();
|
||||
QImage scaledPixmap = QImage(":images/favorite_icon.png");
|
||||
|
||||
scaledPixmap = scaledPixmap.scaledToHeight(this->columnWidth(column) / 2.5);
|
||||
scaledPixmap = scaledPixmap.scaledToWidth(this->columnWidth(column) / 2.5);
|
||||
QWidget* widget = new QWidget(this);
|
||||
QVBoxLayout* layout = new QVBoxLayout(widget);
|
||||
QLabel* label = new QLabel(widget);
|
||||
label->setPixmap(QPixmap::fromImage(scaledPixmap));
|
||||
label->setObjectName("favoriteIcon");
|
||||
label->setVisible(isFavorite);
|
||||
|
||||
layout->setAlignment(Qt::AlignCenter);
|
||||
layout->addWidget(label);
|
||||
widget->setLayout(layout);
|
||||
this->setItem(row, column, item);
|
||||
this->setCellWidget(row, column, widget);
|
||||
|
||||
if (column > 0) {
|
||||
this->horizontalHeader()->setSectionResizeMode(column - 1, QHeaderView::Stretch);
|
||||
}
|
||||
}
|
||||
|
||||
QString GameListFrame::GetPlayTime(const std::string& serial) {
|
||||
QString playTime;
|
||||
const auto user_dir = Common::FS::GetUserPath(Common::FS::PathType::UserDir);
|
||||
|
@ -423,4 +507,4 @@ QString GameListFrame::GetPlayTime(const std::string& serial) {
|
|||
|
||||
QTableWidgetItem* GameListFrame::GetCurrentItem() {
|
||||
return m_current_item;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,11 +42,13 @@ public Q_SLOTS:
|
|||
private:
|
||||
void SetTableItem(int row, int column, QString itemStr);
|
||||
void SetRegionFlag(int row, int column, QString itemStr);
|
||||
void SetFavoriteIcon(int row, int column);
|
||||
void SetCompatibilityItem(int row, int column, CompatibilityEntry entry);
|
||||
QString GetPlayTime(const std::string& serial);
|
||||
QList<QAction*> m_columnActs;
|
||||
GameInfoClass* game_inf_get = nullptr;
|
||||
bool ListSortedAsc = true;
|
||||
int sortColumn = 1;
|
||||
QTableWidgetItem* m_current_item = nullptr;
|
||||
int m_last_opacity = -1; // Track last opacity to avoid unnecessary recomputation
|
||||
std::filesystem::path m_current_game_path; // Track current game path to detect changes
|
||||
|
@ -55,6 +57,7 @@ private:
|
|||
public:
|
||||
void PopulateGameList(bool isInitialPopulation = true);
|
||||
void ResizeIcons(int iconSize);
|
||||
void ApplyLastSorting(bool isInitialPopulation);
|
||||
QTableWidgetItem* GetCurrentItem();
|
||||
QImage backgroundImage;
|
||||
GameListUtils m_game_list_utils;
|
||||
|
@ -63,6 +66,7 @@ public:
|
|||
std::shared_ptr<CompatibilityInfoClass> m_compat_info;
|
||||
|
||||
int icon_size;
|
||||
std::string last_favorite;
|
||||
|
||||
static float parseAsFloat(const std::string& str, const int& offset) {
|
||||
return std::stof(str.substr(0, str.size() - offset));
|
||||
|
@ -130,4 +134,6 @@ public:
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool CompareWithFavorite(GameInfo a, GameInfo b, int columnIndex, bool ascending);
|
||||
};
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "common/scm_rev.h"
|
||||
#include "compatibility_info.h"
|
||||
#include "game_info.h"
|
||||
#include "gui_settings.h"
|
||||
#include "trophy_viewer.h"
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
|
@ -30,13 +31,13 @@
|
|||
class GuiContextMenus : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
void RequestGameMenu(const QPoint& pos, QVector<GameInfo>& m_games,
|
||||
std::shared_ptr<CompatibilityInfoClass> m_compat_info,
|
||||
std::shared_ptr<gui_settings> settings, QTableWidget* widget,
|
||||
bool isList) {
|
||||
int RequestGameMenu(const QPoint& pos, QVector<GameInfo>& m_games,
|
||||
std::shared_ptr<CompatibilityInfoClass> m_compat_info,
|
||||
std::shared_ptr<gui_settings> settings, QTableWidget* widget, bool isList) {
|
||||
QPoint global_pos = widget->viewport()->mapToGlobal(pos);
|
||||
std::shared_ptr<gui_settings> m_gui_settings = std::move(settings);
|
||||
int itemID = 0;
|
||||
int changedFavorite = 0;
|
||||
if (isList) {
|
||||
itemID = widget->currentRow();
|
||||
} else {
|
||||
|
@ -45,7 +46,7 @@ public:
|
|||
|
||||
// Do not show the menu if no item is selected
|
||||
if (itemID < 0 || itemID >= m_games.size()) {
|
||||
return;
|
||||
return changedFavorite;
|
||||
}
|
||||
|
||||
// Setup menu.
|
||||
|
@ -65,11 +66,22 @@ public:
|
|||
|
||||
menu.addMenu(openFolderMenu);
|
||||
|
||||
QString serialStr = QString::fromStdString(m_games[itemID].serial);
|
||||
QList<QString> list = gui_settings::Var2List(m_gui_settings->GetValue(gui::favorites_list));
|
||||
bool isFavorite = list.contains(serialStr);
|
||||
QAction* toggleFavorite;
|
||||
|
||||
if (isFavorite) {
|
||||
toggleFavorite = new QAction(tr("Remove from Favorites"), widget);
|
||||
} else {
|
||||
toggleFavorite = new QAction(tr("Add to Favorites"), widget);
|
||||
}
|
||||
QAction createShortcut(tr("Create Shortcut"), widget);
|
||||
QAction openCheats(tr("Cheats / Patches"), widget);
|
||||
QAction openSfoViewer(tr("SFO Viewer"), widget);
|
||||
QAction openTrophyViewer(tr("Trophy Viewer"), widget);
|
||||
|
||||
menu.addAction(toggleFavorite);
|
||||
menu.addAction(&createShortcut);
|
||||
menu.addAction(&openCheats);
|
||||
menu.addAction(&openSfoViewer);
|
||||
|
@ -130,7 +142,7 @@ public:
|
|||
// Show menu.
|
||||
auto selected = menu.exec(global_pos);
|
||||
if (!selected) {
|
||||
return;
|
||||
return changedFavorite;
|
||||
}
|
||||
|
||||
if (selected == openGameFolder) {
|
||||
|
@ -303,6 +315,16 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
if (selected == toggleFavorite) {
|
||||
if (isFavorite) {
|
||||
list.removeOne(serialStr);
|
||||
} else {
|
||||
list.append(serialStr);
|
||||
}
|
||||
m_gui_settings->SetValue(gui::favorites_list, gui_settings::List2Var(list));
|
||||
changedFavorite = 1;
|
||||
}
|
||||
|
||||
if (selected == &openCheats) {
|
||||
QString gameName = QString::fromStdString(m_games[itemID].name);
|
||||
QString gameSerial = QString::fromStdString(m_games[itemID].serial);
|
||||
|
@ -588,6 +610,7 @@ public:
|
|||
QUrl(url_issues + m_games[itemID].compatibility.issue_number));
|
||||
}
|
||||
}
|
||||
return changedFavorite;
|
||||
}
|
||||
|
||||
int GetRowIndex(QTreeWidget* treeWidget, QTreeWidgetItem* item) {
|
||||
|
|
|
@ -12,6 +12,7 @@ const QString general_settings = "general_settings";
|
|||
const QString main_window = "main_window";
|
||||
const QString game_list = "game_list";
|
||||
const QString game_grid = "game_grid";
|
||||
const QString favorites = "favorites";
|
||||
|
||||
// general
|
||||
const gui_value gen_checkForUpdates = gui_value(general_settings, "checkForUpdates", false);
|
||||
|
@ -41,6 +42,10 @@ const gui_value gl_backgroundMusicVolume = gui_value(game_list, "backgroundMusic
|
|||
const gui_value gg_icon_size = gui_value(game_grid, "icon_size", 69);
|
||||
const gui_value gg_slider_pos = gui_value(game_grid, "slider_pos", 0);
|
||||
|
||||
// favorites list
|
||||
const gui_value favorites_list =
|
||||
gui_value(favorites, "favoritesList", QVariant::fromValue(QList<QString>()));
|
||||
|
||||
} // namespace gui
|
||||
|
||||
class gui_settings : public settings {
|
||||
|
|
|
@ -561,10 +561,8 @@ void MainWindow::CreateConnects() {
|
|||
m_game_grid_frame->hide();
|
||||
m_elf_viewer->hide();
|
||||
m_game_list_frame->show();
|
||||
if (m_game_list_frame->item(0, 0) == nullptr) {
|
||||
m_game_list_frame->clearContents();
|
||||
m_game_list_frame->PopulateGameList();
|
||||
}
|
||||
m_game_list_frame->clearContents();
|
||||
m_game_list_frame->PopulateGameList();
|
||||
isTableList = true;
|
||||
m_gui_settings->SetValue(gui::gl_mode, 0);
|
||||
int slider_pos = m_gui_settings->GetValue(gui::gl_slider_pos).toInt();
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>زر لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>تحويل الماوس إلى عصا التحكم</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>التحكم</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>سلوك زر العودة</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>الرسوميات</translation>
|
||||
|
@ -1787,10 +1791,6 @@ Nightly: نُسخ تحتوي على أحدث الميزات، لكنها أقل
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>مدة إخفاء المؤشر عند الخمول:\nالوقت (بالثواني) الذي ينتظره المؤشر قبل أن يختفي تلقائيًا عند عدم استخدامه.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>سلوك زر الرجوع:\nيحدد وظيفة زر' الرجوع في وحدة التحكم لمحاكاة اللمس في موقع معيّن على لوحة اللمس الخاصة بـ PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>عرض بيانات التوافق:\nيعرض معلومات توافق الألعاب في عرض جدولي. فعّل ""تحديث التوافق عند بدء التشغيل"" للحصول على أحدث المعلومات.</translation>
|
||||
|
@ -1815,22 +1815,6 @@ Nightly: نُسخ تحتوي على أحدث الميزات، لكنها أقل
|
|||
<source>Always</source>
|
||||
<translation>دائماً</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>الجانب الأيسر من لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>الجانب الأيمن من لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>مركز لوحة اللمس</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>لا شيء</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>جهاز الرسوميات:\nفي الأنظمة التي تحتوي على أكثر من معالج رسومي، اختر وحدة المعالجة الرسومية GPU التي سيستخدمها المحاكي من القائمة المنسدلة،\nأو اختر ""تحديد تلقائي"" ليتم اختيارها تلقائيًا.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Click al touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Ratolí a palanca</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad esquerra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Touchpad centre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad dreta</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Controlador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Comportament del botó de retrocés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Gràfics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Temps d'espera per ocultar el ratolí:\nLa duració (en segons) després de la qual el ratolí s'amaga si es troba inactiu.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Comportament del botó posterior:\nEstableix el botó posterior del controlador per simular el toc en una posició especificada del touchpad de PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Mostra les dades de compatibilitat:\nMostra informació sobre la compatibilitat a la vista de graella. Pots activar l'actualització de compatibilitat a l'inici per obtenir més informació actualitzada.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Sempre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad esquerra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad dret</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centre del Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Cap</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Dispositiu de gràfics:\nEn sistemes amb múltiples targetes gràfiques, selecciona la targeta gràfica que farà servir l'emulador de la llista,\n o clica a "Selecció automàtica" per determinar-la automàticament.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation type="unfinished">Controller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Tilbageknap adfærd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Indstil en tid for, at musen skal forsvinde efter at være inaktiv.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Tilbageknap Adfærd:\nIndstiller controllerens tilbageknap til at efterligne tryk på den angivne position på PS4 berøringsflade.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Altid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Berøringsplade Venstre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Berøringsplade Højre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Berøringsplade Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Ingen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafikadapter:\nPå systemer med flere GPU'er skal du vælge den GPU, emulatoren vil bruge fra en rullemenu,\neller vælge "Auto Select" for at vælge den automatisk.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Touchpad-Klick</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Maus zu Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Kontroller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Verhalten der Zurück-Taste</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafik</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Stellen Sie eine Zeit ein, nach der die Maus nach Inaktivität verschwinden soll.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Zurück-Button Verhalten:\nStellt die Zurück-Taste des Controllers so ein, dass sie das Antippen der angegebenen Position auf dem PS4-Touchpad emuliert.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Kompatibilitätsdaten anzeigen:\nZeigt Spielkompatibilitätsinformationen in Tabellenansicht an. Aktivieren Sie „Aktualisiere Kompatibilitätsdatenbank beim Start“, um aktuelle Informationen zu erhalten.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Immer</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Links</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Rechts</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Touchpad Mitte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Keine</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafikkarte:\nAuf Systemen mit mehreren GPUs wählen Sie aus einem Dropdown-Menü die GPU aus, die der Emulator verwenden wird,\noder wählen Sie "Auto Select", um sie automatisch auszuwählen.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation type="unfinished">Controller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Συμπεριφορά κουμπιού επιστροφής</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Ορίστε έναν χρόνο για να εξαφανιστεί το ποντίκι μετά από αδράνεια.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Συμπεριφορά Κουμπιού Επιστροφής:\nΟρίζει το κουμπί επιστροφής του ελεγκτή να προσομοιώνει το πάτημα της καθορισμένης θέσης στην οθόνη αφής PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Πάντα</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Αριστερά</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Δεξιά</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Κέντρο Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Κανένα</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Προσαρμογέας Γραφικών:\nΣε συστήματα με πολλές GPU, επιλέξτε από το μενού την GPU που θα χρησιμοποιήσει ο εξομοιωτής,\nή επιλέξτε "Auto Select" για αυτόματη επιλογή.</translation>
|
||||
|
|
|
@ -748,6 +748,10 @@
|
|||
<source>Last updated</source>
|
||||
<translation>Last updated</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Favorite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GameListUtils</name>
|
||||
|
@ -950,6 +954,14 @@
|
|||
<source>SFO Viewer for </source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Remove from Favorites</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Add to Favorites</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HelpDialog</name>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Clic de pantalla táctil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Ratón a Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Controlador</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Comportamiento del Botón de Retroceso</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Gráficos</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Establezca un tiempo para que el ratón desaparezca después de estar inactivo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Comportamiento del Botón Atrás:\nEstablece el botón atrás del controlador para emular el toque en la posición especificada en el touchpad del PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Mostrar Datos de Compatibilidad:\nMuestra información de compatibilidad de juegos en vista de tabla. Habilite "Actualizar Compatibilidad al Iniciar" para obtener información actualizada.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Siempre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Izquierda</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Derecha</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centro del Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Ninguno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Dispositivo Gráfico:\nEn sistemas con múltiples GPU, selecciona la GPU que el emulador utilizará de la lista desplegable,\o selecciona "Auto Select" para determinarla automáticamente.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>کلیک روی تاچپد</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>دسته بازی</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>رفتار دکمه بازگشت</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>گرافیک</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>زمانی را برای ناپدید شدن ماوس بعد از غیرفعالی تعیین کنید.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>رفتار دکمه برگشت:\nدکمه برگشت کنترلر را طوری تنظیم می کند که ضربه زدن روی موقعیت مشخص شده روی صفحه لمسی PS4 را شبیه سازی کند.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>نمایش دادههای سازگاری:\nاطلاعات سازگاری بازی را به صورت جدول نمایش میدهد. برای دریافت اطلاعات بهروز، گزینه "بهروزرسانی سازگاری هنگام راهاندازی" را فعال کنید.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>همیشه</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>صفحه لمسی سمت چپ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>صفحه لمسی سمت راست</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>مرکز صفحه لمسی</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>هیچ کدام</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>دستگاه گرافیکی:\nدر سیستمهای با چندین پردازنده گرافیکی، از فهرست کشویی، پردازنده گرافیکی که شبیهساز از آن استفاده میکند را انتخاب کنید، یا گزینه "انتخاب خودکار" را انتخاب کنید تا به طور خودکار تعیین شود.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Kosketuslevyn Klikkaus</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Hiiri Joystickinä</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Ohjain</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Takaisin-painikkeen Käyttäytyminen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafiikka</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Aseta aika, milloin hiiri häviää oltuaan aktiivinen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Takaisin-napin käyttäytyminen:\nAsettaa ohjaimen takaisin-napin jäljittelemään kosketusta PS4:n kosketuslevyn määritettyyn kohtaan.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Näytä Yhteensopivuustiedot:\nNäyttää pelien yhteensopivuustiedot listanäkymässä. Ota käyttöön "Päivitä Yhteensopivuustietokanta Käynnistäessä" saadaksesi ajantasaista tietoa.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Aina</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Kosketuslevyn Vasen Puoli</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Kosketuslevyn Oikea Puoli</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Kosketuslevyn Keskikohta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Ei mitään</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Näytönohjain:\nUseamman näytönohjaimen järjestelmissä, valitse pudotusvalikosta, mitä näytönohjainta emulaattori käyttää,\n tai valitse "Auto Select" automaattiseen määritykseen.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Clic tactile</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Souris vers Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Manette</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Comportement du bouton retour</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Graphismes</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Définissez un temps pour que la souris disparaisse après être inactif.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Comportement du bouton retour:\nDéfinit le bouton de retour de la manette pour imiter le toucher de la position spécifiée sur le pavé tactile PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Afficher les données de compatibilité:\nAffiche les informations de compatibilité des jeux dans une colonne dédiée. Activez "Mettre à jour la compatibilité au démarrage" pour avoir des informations à jour.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Toujours</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Pavé Tactile Gauche</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Pavé Tactile Droit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centre du Pavé Tactile</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Aucun</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Adaptateur graphique:\nSélectionnez le GPU que l'émulateur utilisera dans les systèmes multi-GPU à partir de la liste déroulante,\nou choisissez "Auto Select" pour le déterminer automatiquement.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Kontroller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Vissza gomb Viselkedése</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafika</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Állítson be egy időt, ami után egér inaktív állapotban eltűnik.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Vissza gomb viselkedés:\nBeállítja a vezérlő vissza gombját, hogy utánozza a PS4 érintőpadján megadott pozíció megérintését.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Mindig</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Érintőpad Bal</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Érintőpad Jobb</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Érintőpad Közép</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Semmi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafikus eszköz:\nTöbb GPU-s rendszereken válassza ki, melyik GPU-t használja az emulátor a legördülő listából,\nvagy válassza az "Auto Select" lehetőséget, hogy automatikusan kiválassza azt.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Pengontrol</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Perilaku tombol kembali</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Tetapkan waktu untuk mouse menghilang setelah tidak aktif.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Perilaku Tombol Kembali:\nMengatur tombol kembali pada pengontrol untuk meniru ketukan di posisi yang ditentukan di touchpad PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Selalu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Kiri</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Kanan</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Pusat Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Tidak Ada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Perangkat Grafis:\nPada sistem GPU ganda, pilih GPU yang akan digunakan emulator dari daftar dropdown,\natau pilih "Auto Select" untuk menentukan secara otomatis.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Click Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Mouse a Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Controller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Comportamento del pulsante Indietro</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafica</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Imposta un tempo affinché il mouse scompaia dopo essere stato inattivo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Comportamento del pulsante Indietro:\nImposta il pulsante Indietro del controller per emulare il tocco sulla posizione specificata sul touchpad PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Mostra Dati Compatibilità:\nMostra informazioni sulla compatibilità del gioco nella visualizzazione lista. Abilita "Aggiorna Compatiblità all'Avvio" per ottenere informazioni aggiornate.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Sempre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Sinistra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Destra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centro del Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Nessuno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Dispositivo Grafico:\nIn sistemi con più GPU, seleziona la GPU che l'emulatore utilizzerà dall'elenco a discesa,\no seleziona "Selezione Automatica" per determinarlo automaticamente.</translation>
|
||||
|
|
|
@ -463,7 +463,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Back</source>
|
||||
<translation type="unfinished">Back</translation>
|
||||
<translation>戻る</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>R1 / RB</source>
|
||||
|
@ -523,15 +523,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>R:</source>
|
||||
<translation type="unfinished">R:</translation>
|
||||
<translation>R:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>G:</source>
|
||||
<translation type="unfinished">G:</translation>
|
||||
<translation>G:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>B:</source>
|
||||
<translation type="unfinished">B:</translation>
|
||||
<translation>B:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Override Lightbar Color</source>
|
||||
|
@ -551,19 +551,19 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
<translation type="unfinished">Save</translation>
|
||||
<translation>保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Apply</source>
|
||||
<translation type="unfinished">Apply</translation>
|
||||
<translation>適用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restore Defaults</source>
|
||||
<translation type="unfinished">Restore Defaults</translation>
|
||||
<translation>デフォルトに戻す</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Cancel</translation>
|
||||
<translation>キャンセル</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -574,11 +574,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Use Per-Game configs</source>
|
||||
<translation type="unfinished">Use Per-Game configs</translation>
|
||||
<translation>ゲームごとの設定を使用する</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished">Error</translation>
|
||||
<translation>エラー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Could not open the file for reading</source>
|
||||
|
@ -590,11 +590,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Save Changes</source>
|
||||
<translation type="unfinished">Save Changes</translation>
|
||||
<translation>変更を保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Do you want to save changes?</source>
|
||||
<translation type="unfinished">Do you want to save changes?</translation>
|
||||
<translation>変更を保存しますか?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Help</source>
|
||||
|
@ -610,7 +610,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Reset to Default</source>
|
||||
<translation type="unfinished">Reset to Default</translation>
|
||||
<translation>デフォルトに戻す</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -848,7 +848,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Delete Trophy</source>
|
||||
<translation type="unfinished">Delete Trophy</translation>
|
||||
<translation>トロフィーを削除</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Compatibility...</source>
|
||||
|
@ -944,7 +944,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Trophy</source>
|
||||
<translation type="unfinished">Trophy</translation>
|
||||
<translation>トロフィー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SFO Viewer for </source>
|
||||
|
@ -959,7 +959,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>FAQ</source>
|
||||
<translation type="unfinished">FAQ</translation>
|
||||
<translation>FAQ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Syntax</source>
|
||||
|
@ -982,11 +982,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>D-Pad</source>
|
||||
<translation type="unfinished">D-Pad</translation>
|
||||
<translation>十字キー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Up</source>
|
||||
<translation type="unfinished">Up</translation>
|
||||
<translation>上</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>unmapped</source>
|
||||
|
@ -994,15 +994,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Left</source>
|
||||
<translation type="unfinished">Left</translation>
|
||||
<translation>左</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Right</source>
|
||||
<translation type="unfinished">Right</translation>
|
||||
<translation>右</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Down</source>
|
||||
<translation type="unfinished">Down</translation>
|
||||
<translation>下</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Left Analog Halfmode</source>
|
||||
|
@ -1014,7 +1014,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Left Stick</source>
|
||||
<translation type="unfinished">Left Stick</translation>
|
||||
<translation>左スティック</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Config Selection</source>
|
||||
|
@ -1030,11 +1030,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>L1</source>
|
||||
<translation type="unfinished">L1</translation>
|
||||
<translation>L1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>L2</source>
|
||||
<translation type="unfinished">L2</translation>
|
||||
<translation>L2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Text Editor</source>
|
||||
|
@ -1046,19 +1046,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>R1</source>
|
||||
<translation type="unfinished">R1</translation>
|
||||
<translation>R1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>R2</source>
|
||||
<translation type="unfinished">R2</translation>
|
||||
<translation>R2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
|
@ -1070,7 +1066,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>R3</source>
|
||||
<translation type="unfinished">R3</translation>
|
||||
<translation>R3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Options</source>
|
||||
|
@ -1166,19 +1162,19 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Save</source>
|
||||
<translation type="unfinished">Save</translation>
|
||||
<translation>保存</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Apply</source>
|
||||
<translation type="unfinished">Apply</translation>
|
||||
<translation>適用</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restore Defaults</source>
|
||||
<translation type="unfinished">Restore Defaults</translation>
|
||||
<translation>デフォルトに戻す</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished">Cancel</translation>
|
||||
<translation>キャンセル</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cannot bind any unique input more than once. Duplicate inputs mapped to the following buttons:
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1409,43 +1417,43 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Play</source>
|
||||
<translation type="unfinished">Play</translation>
|
||||
<translation>プレイ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Pause</source>
|
||||
<translation type="unfinished">Pause</translation>
|
||||
<translation>一時停止</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Stop</source>
|
||||
<translation type="unfinished">Stop</translation>
|
||||
<translation>停止</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Restart</source>
|
||||
<translation type="unfinished">Restart</translation>
|
||||
<translation>再起動</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Full Screen</source>
|
||||
<translation type="unfinished">Full Screen</translation>
|
||||
<translation>全画面表示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Controllers</source>
|
||||
<translation type="unfinished">Controllers</translation>
|
||||
<translation>コントローラー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Keyboard</source>
|
||||
<translation type="unfinished">Keyboard</translation>
|
||||
<translation>キーボード</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Refresh List</source>
|
||||
<translation type="unfinished">Refresh List</translation>
|
||||
<translation>リストの更新</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Resume</source>
|
||||
<translation type="unfinished">Resume</translation>
|
||||
<translation>再開</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Labels Under Icons</source>
|
||||
<translation type="unfinished">Show Labels Under Icons</translation>
|
||||
<translation>アイコンの下にラベルを表示</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>コントローラー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>戻るボタンの動作</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>グラフィックス</translation>
|
||||
|
@ -1632,7 +1636,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Copy GPU Buffers</source>
|
||||
<translation type="unfinished">Copy GPU Buffers</translation>
|
||||
<translation>GPU バッファーをコピー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Host Debug Markers</source>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>カーソルが非アクティブになってから隠すまでの時間を設定します。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>戻るボタンの動作:\nコントローラーの戻るボタンを、PS4のタッチパッドの指定された位置をタッチするように設定します。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>互換性に関するデータを表示:\nゲームの互換性に関する情報を表として表示します。常に最新情報を取得したい場合、"起動時に互換性データベースを更新する" を有効化してください。</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>常に</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>左タッチパッド</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>右タッチパッド</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>タッチパッド中央</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>なし</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>グラフィックデバイス:\nシステムに複数のGPUが搭載されている場合、ドロップダウンリストからエミュレーターで使用するGPUを選択するか、\n「自動選択」を選択して自動的に決定します。</translation>
|
||||
|
@ -1960,31 +1944,31 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Display Mode</source>
|
||||
<translation type="unfinished">Display Mode</translation>
|
||||
<translation>表示モード</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Windowed</source>
|
||||
<translation type="unfinished">Windowed</translation>
|
||||
<translation>ウィンドウ表示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Fullscreen</source>
|
||||
<translation type="unfinished">Fullscreen</translation>
|
||||
<translation>全画面表示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Fullscreen (Borderless)</source>
|
||||
<translation type="unfinished">Fullscreen (Borderless)</translation>
|
||||
<translation>全画面表示(ボーダレス)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Window Size</source>
|
||||
<translation type="unfinished">Window Size</translation>
|
||||
<translation>ウィンドウサイズ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>W:</source>
|
||||
<translation type="unfinished">W:</translation>
|
||||
<translation>W:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>H:</source>
|
||||
<translation type="unfinished">H:</translation>
|
||||
<translation>H:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Separate Log Files</source>
|
||||
|
@ -2000,11 +1984,11 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Left</source>
|
||||
<translation type="unfinished">Left</translation>
|
||||
<translation>左</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Right</source>
|
||||
<translation type="unfinished">Right</translation>
|
||||
<translation>右</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Top</source>
|
||||
|
@ -2016,7 +2000,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Notification Duration</source>
|
||||
<translation type="unfinished">Notification Duration</translation>
|
||||
<translation>通知表示時間</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Portable User Folder</source>
|
||||
|
@ -2036,7 +2020,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>%1 already exists</source>
|
||||
<translation type="unfinished">%1 already exists</translation>
|
||||
<translation>%1 は既に存在します</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Portable user folder created</source>
|
||||
|
@ -2052,7 +2036,7 @@
|
|||
</message>
|
||||
<message>
|
||||
<source> * Unsupported Vulkan Version</source>
|
||||
<translation type="unfinished"> * Unsupported Vulkan Version</translation>
|
||||
<translation> * サポートされていないVulkanバージョン</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
@ -2071,15 +2055,15 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Show Earned Trophies</source>
|
||||
<translation type="unfinished">Show Earned Trophies</translation>
|
||||
<translation>獲得したトロフィーを表示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Not Earned Trophies</source>
|
||||
<translation type="unfinished">Show Not Earned Trophies</translation>
|
||||
<translation>未獲得のトロフィーを表示</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Show Hidden Trophies</source>
|
||||
<translation type="unfinished">Show Hidden Trophies</translation>
|
||||
<translation>隠しトロフィーを表示</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation type="unfinished">Controller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation type="unfinished">Back Button Behavior</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation type="unfinished">Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation type="unfinished">Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation type="unfinished">Always</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation type="unfinished">None</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation type="unfinished">Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Valdiklis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Atgal mygtuko elgsena</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Slėpti tuščiosios eigos žymeklio skirtąjį laiką:\nTrukmė (sekundėmis), po kurios neaktyvus žymeklis pasislepia.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Atgal mygtuko elgesys:\nNustato valdiklio atgal mygtuką imituoti paspaudimą nurodytoje vietoje PS4 jutiklinėje plokštėje.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Visada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Jutiklinis Paviršius Kairėje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Jutiklinis Paviršius Dešinėje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Jutiklinis Paviršius Centre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Nieko</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafikos įrenginys:\nDaugiagrafikėse sistemose pasirinkite GPU, kurį emuliatorius naudos iš išskleidžiamojo sąrašo,\n arba pasirinkite "Auto Select", kad jis būtų nustatytas automatiškai.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Berøringsplateknapp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Mus til styrespak</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Berøringsplate venstre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Berøringsplate midten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Berøringsplate høyre</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Kontroller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Tilbakeknapp atferd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafikk</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Sett en tid for når musepekeren forsvinner etter å ha vært inaktiv.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Atferd for tilbaketasten:\nSetter tilbaketasten på kontrolleren til å imitere et trykk på den angitte posisjonen på PS4s berøringsplate.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Vis kompatibilitets-data:\nViser informasjon om spillkompatibilitet i tabellvisning. Bruk «Oppdater database ved oppstart» for oppdatert informasjon.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Alltid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Berøringsplate venstre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Berøringsplate høyre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Berøringsplate midten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Ingen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafikkenhet:\nSystemer med flere GPU-er, kan emulatoren velge hvilken enhet som skal brukes fra rullegardinlista,\neller bruk «Velg automatisk».</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation type="unfinished">Controller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Achterknop gedrag</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Stel een tijd in voor wanneer de muis verdwijnt na inactiviteit.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Gedrag van de terugknop:\nStelt de terugknop van de controller in om een aanraking op de opgegeven positie op de PS4-touchpad na te bootsen.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Altijd</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Links</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Rechts</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Touchpad Midden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Geen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafische adapter:\nIn systemen met meerdere GPU's, kies de GPU die de emulator uit de vervolgkeuzelijst moet gebruiken,\nof kies "Auto Select" om dit automatisch in te stellen.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Kliknięcie Touchpada</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Mysz na Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Kontroler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Zachowanie przycisku wstecz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafika</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Ustaw czas, po którym mysz zniknie po bezczynności.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Zachowanie przycisku Wstecz:\nUstawia przycisk Wstecz kontrolera tak, aby emulował dotknięcie określonego miejsca na panelu dotykowym PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Wyświetl dane zgodności:\nWyświetla informacje o kompatybilności gry w widoku tabeli. Włącz opcję „Aktualizuj zgodność przy uruchomieniu”, aby uzyskać aktualne informacje.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Zawsze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Lewy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Prawy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Touchpad Środkowy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Brak</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Urządzenie graficzne:\nW systemach z wieloma GPU, wybierz GPU, który emulator ma używać z rozwijanego menu,\n lub wybierz "Auto Select", aby ustawić go automatycznie.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Clique do Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Mouse para Analógico</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Esquerdo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centro do Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Direito</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Controle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Comportamento do Botão Voltar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Gráficos</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Tempo de Inatividade para Ocultar Cursor:\nDefina um tempo em segundos para o mouse desaparecer após ficar inativo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Comportamento do Botão Voltar:\nDefine o botão voltar do controle para emular o toque na posição especificada no touchpad do PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Exibir Dados de Compatibilidade:\nExibe informações de compatibilidade dos jogos na visualização de tabela.\nAtive "Atualizar Compatibilidade ao Inicializar" para obter informações atualizadas.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Sempre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Esquerdo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Direito</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centro do Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Nenhum</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Placa de Vídeo:\nEm sistemas com múltiplas GPUs, escolha qual GPU o emulador utilizará da lista suspensa,\nou escolha "Seleção Automática" para escolher automaticamente o mesmo.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Clique do Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Rato para Manípulo</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Comando</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Comportamento do Botão Voltar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Gráficos</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Tempo de Espera para Ocultar o Cursor:\nDefine o tempo em segundos para o rato desaparecer após ficar inativo.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Comportamento do Botão Voltar:\nConfigura o botão Voltar do comando para emular um toque na posição especificada no touchpad do PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Exibir Dados de Compatibilidade:\nExibe informações de compatibilidade dos jogos em visualização de tabela.\nAtivar "Atualizar Base de Dados de Compatibilidade no Arranque" para obter informações atualizadas.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Sempre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Esquerda do Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Direita do Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centro do Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Nenhum</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Placa Gráfica:\nEm sistemas com múltiplas GPUs, escolha qual GPU da lista o emulador utilizará,\nou escolha "Seleção Automática" para escolher automaticamente a mesma.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Controler</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Comportament buton înapoi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Setați un timp pentru ca mouse-ul să dispară după ce a fost inactiv.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Comportamentul butonului înapoi:\nSetează butonul înapoi al controlerului să imite atingerea poziției specificate pe touchpad-ul PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Întotdeauna</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Stânga</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Dreapta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Centru Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Niciunul</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Dispozitiv grafic:\nPe sistemele cu mai multe GPU-uri, alege GPU-ul pe care emulatorul îl va folosi din lista derulantă,\nsau selectează "Auto Select" pentru a-l determina automat.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Нажатие на тачпад</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Мышь в джойстик</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Тачпад слева</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Тачпад центр</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Тачпад справа</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Контроллер</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Поведение кнопки назад</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Графика</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Время скрытия курсора при бездействии:\nВремя (в секундах), через которое курсор исчезнет при бездействии.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Поведение кнопки «Назад»:\nНастраивает кнопку «Назад» контроллера на эмуляцию нажатия на указанную область на сенсорной панели контроллера PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Показывать данные совместимости:\nПоказывает информацию о совместимости игр в таблице. Включите «Обновлять базу совместимости при запуске» для получения актуальной информации.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Всегда</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Тачпад слева</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Тачпад справа</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Центр тачпада</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Нет</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Графическое устройство:\nВ системах с несколькими GPU выберите тот, который будет использовать эмулятор.\nВыберите "Автовыбор", чтобы определить GPU автоматически.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation type="unfinished">Controller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation type="unfinished">Back Button Behavior</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation type="unfinished">Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation type="unfinished">Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation type="unfinished">Always</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation type="unfinished">None</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation type="unfinished">Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Klikim i Panelit me Prekje</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Miu në Levë</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Dorezë</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Sjellja e butonit mbrapa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafika</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Koha për fshehjen e kursorit joaktiv:\nKohëzgjatja (në sekonda) pas së cilës kursori që nuk ka qënë në veprim fshihet.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Sjellja e butonit mbrapa:\nLejon të përcaktohet se në cilën pjesë të panelit me prekje të dorezës do të imitojë një prekje butoni mbrapa.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Shfaq të dhënat e përputhshmërisë:\nShfaq informacionin e përputhshmërisë së lojës në formë tabele. Aktivizo "Përditëso përputhshmërinë gjatë nisjes" për të marrë informacion të përditësuar.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Gjithmonë</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Paneli me Prekje Majtas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Paneli me Prekje Djathtas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Paneli me Prekje në Qendër</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Asnjë</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Pajisja grafike:\nNë sistemet me GPU të shumëfishta, zgjidh GPU-në që do të përdorë emulatori nga lista rënëse,\nose zgjidh "Auto Select" për ta përcaktuar automatikisht.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation type="unfinished">Controller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation type="unfinished">Back Button Behavior</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation type="unfinished">Graphics</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation type="unfinished">Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation type="unfinished">Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation type="unfinished">Always</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation type="unfinished">None</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation type="unfinished">Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Klick på styrplatta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Mus till styrspak</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Pekplatta vänster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Pekplatta mitten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Pekplatta höger</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Handkontroller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Beteende för bakåtknapp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafik</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Dölj pekare vid overksam:\nLängden (sekunder) efter vilken som muspekaren som har varit overksam döljer sig själv.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Beteende för bakåtknapp:\nStäller in handkontrollerns bakåtknapp för att emulera ett tryck på angivna positionen på PS4ns touchpad.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Visa kompatibilitetsdata:\nVisar information om spelkompatibilitet i tabellvyn. Aktivera "Uppdatera kompatibilitet vid uppstart" för att få uppdaterad information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Alltid</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad vänster</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad höger</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Touchpad mitten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Ingen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafikenhet:\nFör system med flera GPUer kan du välja den GPU som emulatorn ska använda från rullgardinsmenyn,\neller välja "Auto Select" för att automatiskt bestämma det.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Dokunmatik Yüzey Tıklaması</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Mouse'dan Kontrolcü</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Kontrolcü</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Geri Dönme Butonu Davranışı</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Grafikler</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>İmleç İçin Hareketsizlik Zaman Aşımı:\nBoşta kalan imlecin kendini kaç saniye sonra gizleyeceğidir.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Geri düğmesi davranışı:\nKontrol cihazındaki geri düğmesini, PS4'ün dokunmatik panelindeki belirlenen noktaya dokunmak için ayarlar.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Uyumluluk Verilerini Göster:\nOyun uyumluluk bilgilerini tablo görünümünde görüntüler. Güncel bilgileri almak için "Başlangıçta Uyumluluk Veritabanını Güncelle"yi etkinleştirin.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Her zaman</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Dokunmatik Yüzey Sol</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Dokunmatik Yüzey Sağ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Dokunmatik Yüzey Orta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Yok</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Grafik Aygıtı:\nBirden fazla GPU'ya sahip sistemlerde, emülatörün kullanacağı GPU'yu açılır listeden seçin,\nor "Auto Select" seçeneğini seçerek otomatik olarak belirlenmesini sağlayın.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>Кнопка лівого стику</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>Натискання на сенсорну панель</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>Миша в джойстик</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Контролер</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Перепризначення кнопки назад</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Графіка</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Встановіть час, через який курсор зникне в разі бездіяльності.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Перепризначення кнопки «Назад»:\nНалаштовує кнопку «Назад» контролера на емуляцію натискання на зазначену область на сенсорній панелі контролера PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>Відображати данні ігрової сумістністі:\nВідображає інформацію про сумісність ігор у вигляді таблиці. Увімкніть "Оновлення даних ігрової сумісності під час запуску" для отримання актуальної інформації.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Завжди</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Ліва сторона тачпаду</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Права сторона тачпаду</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Середина тачпаду</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Без змін</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Графічний пристрій:\nУ системах із кількома GPU виберіть з випадаючого списку GPU, який буде використовувати емулятор,\nабо виберіть "Автовибір", щоб визначити його автоматично.</translation>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<name>CheatsPatches</name>
|
||||
<message>
|
||||
<source>Cheats / Patches for </source>
|
||||
<translation type="unfinished">Cheats / Patches for </translation>
|
||||
<translation>Cheats / Patches cho </translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cheats/Patches are experimental.\nUse with caution.\n\nDownload cheats individually by selecting the repository and clicking the download button.\nIn the Patches tab, you can download all patches at once, choose which ones you want to use, and save your selection.\n\nSince we do not develop the Cheats/Patches,\nplease report issues to the cheat author.\n\nCreated a new cheat? Visit:\n</source>
|
||||
|
@ -415,35 +415,35 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Up</source>
|
||||
<translation type="unfinished">Up</translation>
|
||||
<translation>Lên</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Left</source>
|
||||
<translation type="unfinished">Left</translation>
|
||||
<translation>Trái</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Right</source>
|
||||
<translation type="unfinished">Right</translation>
|
||||
<translation>Phải</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Down</source>
|
||||
<translation type="unfinished">Down</translation>
|
||||
<translation>Xuống</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Left Stick Deadzone (def:2 max:127)</source>
|
||||
<translation type="unfinished">Left Stick Deadzone (def:2 max:127)</translation>
|
||||
<translation>Deadzone cần bên trái (def:2 max:127)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Left Deadzone</source>
|
||||
<translation type="unfinished">Left Deadzone</translation>
|
||||
<translation>Deadzone bên trái</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Left Stick</source>
|
||||
<translation type="unfinished">Left Stick</translation>
|
||||
<translation>Cần bên trái</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Config Selection</source>
|
||||
<translation type="unfinished">Config Selection</translation>
|
||||
<translation>Chọn cấu hình</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Common Config</source>
|
||||
|
@ -451,59 +451,59 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Use per-game configs</source>
|
||||
<translation type="unfinished">Use per-game configs</translation>
|
||||
<translation>Cấu hình riêng cho từng game</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>L1 / LB</source>
|
||||
<translation type="unfinished">L1 / LB</translation>
|
||||
<translation>L1 / LB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>L2 / LT</source>
|
||||
<translation type="unfinished">L2 / LT</translation>
|
||||
<translation>L2 / LT</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back</source>
|
||||
<translation type="unfinished">Back</translation>
|
||||
<translation>Quay Lại</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>R1 / RB</source>
|
||||
<translation type="unfinished">R1 / RB</translation>
|
||||
<translation>R1 / RB</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>R2 / RT</source>
|
||||
<translation type="unfinished">R2 / RT</translation>
|
||||
<translation>R2 / RT</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Options / Start</source>
|
||||
<translation type="unfinished">Options / Start</translation>
|
||||
<translation>Tuỳ chọn / Bắt đầu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>R3</source>
|
||||
<translation type="unfinished">R3</translation>
|
||||
<translation>R3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Face Buttons</source>
|
||||
<translation type="unfinished">Face Buttons</translation>
|
||||
<translation>Nút bấm mặt trước</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Triangle / Y</source>
|
||||
<translation type="unfinished">Triangle / Y</translation>
|
||||
<translation>Tam giác / Y</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Square / X</source>
|
||||
<translation type="unfinished">Square / X</translation>
|
||||
<translation>Vuông / X</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Circle / B</source>
|
||||
<translation type="unfinished">Circle / B</translation>
|
||||
<translation>Tròn / B</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Cross / A</source>
|
||||
<translation type="unfinished">Cross / A</translation>
|
||||
<translation>Chéo / A</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Right Stick Deadzone (def:2, max:127)</source>
|
||||
|
@ -824,107 +824,107 @@
|
|||
</message>
|
||||
<message>
|
||||
<source>Copy Size</source>
|
||||
<translation type="unfinished">Copy Size</translation>
|
||||
<translation>Kích thước bản sao</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Copy All</source>
|
||||
<translation type="unfinished">Copy All</translation>
|
||||
<translation>Sao chép tất cả</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete...</source>
|
||||
<translation type="unfinished">Delete...</translation>
|
||||
<translation>Xoá...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete Game</source>
|
||||
<translation type="unfinished">Delete Game</translation>
|
||||
<translation>Xóa trò chơi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete Update</source>
|
||||
<translation type="unfinished">Delete Update</translation>
|
||||
<translation>Xóa bản cập nhật</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete DLC</source>
|
||||
<translation type="unfinished">Delete DLC</translation>
|
||||
<translation>Xoá DLC</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete Trophy</source>
|
||||
<translation type="unfinished">Delete Trophy</translation>
|
||||
<translation>Xóa cúp</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Compatibility...</source>
|
||||
<translation type="unfinished">Compatibility...</translation>
|
||||
<translation>Khả năng tương thích...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update database</source>
|
||||
<translation type="unfinished">Update database</translation>
|
||||
<translation>Cập nhật Cơ sở dữ liệu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>View report</source>
|
||||
<translation type="unfinished">View report</translation>
|
||||
<translation>Xem báo cáo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Submit a report</source>
|
||||
<translation type="unfinished">Submit a report</translation>
|
||||
<translation>Gửi một báo cáo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shortcut creation</source>
|
||||
<translation type="unfinished">Shortcut creation</translation>
|
||||
<translation>Tạo phím tắt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Shortcut created successfully!</source>
|
||||
<translation type="unfinished">Shortcut created successfully!</translation>
|
||||
<translation>Phím tắt đã được tạo thành công!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error</source>
|
||||
<translation type="unfinished">Error</translation>
|
||||
<translation>Lỗi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Error creating shortcut!</source>
|
||||
<translation type="unfinished">Error creating shortcut!</translation>
|
||||
<translation>Lỗi khi tạo phím tắt!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Game</source>
|
||||
<translation type="unfinished">Game</translation>
|
||||
<translation>Trò chơi</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This game has no update to delete!</source>
|
||||
<translation type="unfinished">This game has no update to delete!</translation>
|
||||
<translation>Trò chơi này không có bản cập nhật nào để xóa!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Update</source>
|
||||
<translation type="unfinished">Update</translation>
|
||||
<translation>Cập nhật</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This game has no DLC to delete!</source>
|
||||
<translation type="unfinished">This game has no DLC to delete!</translation>
|
||||
<translation>Trò chơi này không có DLC nào để xóa!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>DLC</source>
|
||||
<translation type="unfinished">DLC</translation>
|
||||
<translation>DLC</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete %1</source>
|
||||
<translation type="unfinished">Delete %1</translation>
|
||||
<translation>Xóa %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Are you sure you want to delete %1's %2 directory?</source>
|
||||
<translation type="unfinished">Are you sure you want to delete %1's %2 directory?</translation>
|
||||
<translation>Bạn có muốn xoá thư mục %1's %2 không?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Open Update Folder</source>
|
||||
<translation type="unfinished">Open Update Folder</translation>
|
||||
<translation>Mở thư mục Cập nhật</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delete Save Data</source>
|
||||
<translation type="unfinished">Delete Save Data</translation>
|
||||
<translation>Xóa Lưu Dữ Liệu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>This game has no update folder to open!</source>
|
||||
<translation type="unfinished">This game has no update folder to open!</translation>
|
||||
<translation>Trò chơi này không có thư mục Cập nhật nào để mở!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>No log file found for this game!</source>
|
||||
<translation type="unfinished">No log file found for this game!</translation>
|
||||
<translation>!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Failed to convert icon.</source>
|
||||
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation type="unfinished">L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation type="unfinished">Touchpad Click</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation type="unfinished">Mouse to Joystick</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>Điều khiển</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>Hành vi nút quay lại</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>Đồ họa</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>Đặt thời gian để chuột biến mất sau khi không hoạt động.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>Hành vi nút quay lại:\nĐặt nút quay lại của tay cầm để mô phỏng việc chạm vào vị trí đã chỉ định trên touchpad của PS4.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation type="unfinished">Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>Luôn luôn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>Touchpad Trái</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>Touchpad Phải</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>Giữa Touchpad</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>Không có</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>Thiết bị đồ họa:\nTrên các hệ thống có GPU đa năng, hãy chọn GPU mà trình giả lập sẽ sử dụng từ danh sách thả xuống,\hoặc chọn "Auto Select" để tự động xác định.</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>触摸板点击</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>鼠标控制摇杆</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>触摸板左侧</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>触摸板中心</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>触摸板右侧</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>手柄</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>返回按钮行为</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>图像</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>光标隐藏闲置时长:\n光标自动隐藏之前的闲置时长。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>返回按钮行为:\n设置手柄的返回按钮模拟在 PS4 触控板上指定位置的点击。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>显示兼容性数据:\n在列表视图中显示游戏兼容性信息。启用“启动时更新兼容性数据库”以获取最新信息。</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>始终</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>触控板左侧</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>触控板右侧</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>触控板中间</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>无</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>图形设备:\n在具有多个 GPU 的系统中,从下拉列表中选择要使用的 GPU,\n或者选择“自动选择”由模拟器决定。</translation>
|
||||
|
|
|
@ -1056,10 +1056,6 @@
|
|||
<source>L3</source>
|
||||
<translation>L3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Click</source>
|
||||
<translation>觸控板點擊</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Mouse to Joystick</source>
|
||||
<translation>滑鼠操控操縱桿</translation>
|
||||
|
@ -1188,6 +1184,18 @@
|
|||
|
||||
%1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation type="unfinished">Touchpad Left</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation type="unfinished">Touchpad Center</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation type="unfinished">Touchpad Right</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>MainWindow</name>
|
||||
|
@ -1546,10 +1554,6 @@
|
|||
<source>Controller</source>
|
||||
<translation>控制器</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior</source>
|
||||
<translation>返回按鈕行為</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics</source>
|
||||
<translation>圖形</translation>
|
||||
|
@ -1786,10 +1790,6 @@
|
|||
<source>Hide Idle Cursor Timeout:\nThe duration (seconds) after which the cursor that has been idle hides itself.</source>
|
||||
<translation>空閒滑鼠指標隱藏逾時:\n閒置滑鼠指標隱藏自身之前的持續顯示時間(秒)。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Back Button Behavior:\nSets the controller's back button to emulate tapping the specified position on the PS4 touchpad.</source>
|
||||
<translation>返回按鈕行為:\n設定控制器'的返回按鈕以模擬點擊 PS4 控制器觸控板上的指定位置。</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Display Compatibility Data:\nDisplays game compatibility information in table view. Enable "Update Compatibility On Startup" to get up-to-date information.</source>
|
||||
<translation>顯示相容性資料:\n在表格顯視模式中顯示遊戲相容性資訊。啟用「啟動"時更新相容性」以取得"最新資訊。</translation>
|
||||
|
@ -1814,22 +1814,6 @@
|
|||
<source>Always</source>
|
||||
<translation>始終</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Left</source>
|
||||
<translation>觸控板左側</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Right</source>
|
||||
<translation>觸控板右側</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Touchpad Center</source>
|
||||
<translation>觸控板中間</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>None</source>
|
||||
<translation>無</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Graphics Device:\nOn multiple GPU systems, select the GPU the emulator will use from the drop down list,\nor select "Auto Select" to automatically determine it.</source>
|
||||
<translation>圖形裝置:\n在多GPU系統中,從下拉列表中選取模擬器將使用的GPU,\n或選取「自動選取」以自動選用適合的GPU。</translation>
|
||||
|
|
|
@ -308,17 +308,19 @@ constexpr AmdGpu::Image ImageResource::GetSharp(const Info& info) const noexcept
|
|||
if (!is_r128) {
|
||||
image = info.ReadUdSharp<AmdGpu::Image>(sharp_idx);
|
||||
} else {
|
||||
AmdGpu::Buffer buf = info.ReadUdSharp<AmdGpu::Buffer>(sharp_idx);
|
||||
const auto buf = info.ReadUdSharp<AmdGpu::Buffer>(sharp_idx);
|
||||
memcpy(&image, &buf, sizeof(buf));
|
||||
}
|
||||
if (!image.Valid()) {
|
||||
// Fall back to null image if unbound.
|
||||
return AmdGpu::Image::Null();
|
||||
}
|
||||
const auto data_fmt = image.GetDataFmt();
|
||||
if (is_depth && data_fmt != AmdGpu::DataFormat::Format16 &&
|
||||
data_fmt != AmdGpu::DataFormat::Format32) {
|
||||
return AmdGpu::Image::NullDepth();
|
||||
LOG_DEBUG(Render_Vulkan, "Encountered unbound image!");
|
||||
image = is_depth ? AmdGpu::Image::NullDepth() : AmdGpu::Image::Null();
|
||||
} else if (is_depth) {
|
||||
const auto data_fmt = image.GetDataFmt();
|
||||
if (data_fmt != AmdGpu::DataFormat::Format16 && data_fmt != AmdGpu::DataFormat::Format32) {
|
||||
LOG_DEBUG(Render_Vulkan, "Encountered non-depth image used with depth instruction!");
|
||||
image = AmdGpu::Image::NullDepth();
|
||||
}
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
|
|
@ -366,19 +366,17 @@ void PatchImageSharp(IR::Block& block, IR::Inst& inst, Info& info, Descriptors&
|
|||
// Read image sharp.
|
||||
const auto tsharp = TrackSharp(tsharp_handle, info);
|
||||
const auto inst_info = inst.Flags<IR::TextureInstInfo>();
|
||||
auto image = info.ReadUdSharp<AmdGpu::Image>(tsharp);
|
||||
if (!image.Valid()) {
|
||||
LOG_ERROR(Render_Vulkan, "Shader compiled with unbound image!");
|
||||
image = AmdGpu::Image::Null();
|
||||
}
|
||||
const auto data_fmt = image.GetDataFmt();
|
||||
if (inst_info.is_depth && data_fmt != AmdGpu::DataFormat::Format16 &&
|
||||
data_fmt != AmdGpu::DataFormat::Format32) {
|
||||
LOG_ERROR(Render_Vulkan, "Shader compiled using non-depth image with depth instruction!");
|
||||
image = AmdGpu::Image::NullDepth();
|
||||
}
|
||||
ASSERT(image.GetType() != AmdGpu::ImageType::Invalid);
|
||||
const bool is_written = inst.GetOpcode() == IR::Opcode::ImageWrite;
|
||||
const ImageResource image_res = {
|
||||
.sharp_idx = tsharp,
|
||||
.is_depth = bool(inst_info.is_depth),
|
||||
.is_atomic = IsImageAtomicInstruction(inst),
|
||||
.is_array = bool(inst_info.is_array),
|
||||
.is_written = is_written,
|
||||
.is_r128 = bool(inst_info.is_r128),
|
||||
};
|
||||
auto image = image_res.GetSharp(info);
|
||||
ASSERT(image.GetType() != AmdGpu::ImageType::Invalid);
|
||||
|
||||
// Patch image instruction if image is FMask.
|
||||
if (image.IsFmask()) {
|
||||
|
@ -413,14 +411,7 @@ void PatchImageSharp(IR::Block& block, IR::Inst& inst, Info& info, Descriptors&
|
|||
}
|
||||
}
|
||||
|
||||
u32 image_binding = descriptors.Add(ImageResource{
|
||||
.sharp_idx = tsharp,
|
||||
.is_depth = bool(inst_info.is_depth),
|
||||
.is_atomic = IsImageAtomicInstruction(inst),
|
||||
.is_array = bool(inst_info.is_array),
|
||||
.is_written = is_written,
|
||||
.is_r128 = bool(inst_info.is_r128),
|
||||
});
|
||||
u32 image_binding = descriptors.Add(image_res);
|
||||
|
||||
IR::IREmitter ir{block, IR::Block::InstructionList::s_iterator_to(inst)};
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
<file>images/KBM.png</file>
|
||||
<file>images/fullscreen_icon.png</file>
|
||||
<file>images/refreshlist_icon.png</file>
|
||||
<file>images/favorite_icon.png</file>
|
||||
<file>images/trophy_icon.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue