You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
duckstation/src/core/host.h

100 lines
3.9 KiB
C

// SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com>
// SPDX-License-Identifier: CC-BY-NC-ND-4.0
#pragma once
#include "common/heap_array.h"
#include "common/types.h"
#include <ctime>
#include <functional>
#include <span>
#include <string_view>
class Error;
namespace Threading {
class ThreadHandle;
}
enum class WindowInfoType : u8;
namespace Host {
/// Returns true if the specified resource file exists.
bool ResourceFileExists(std::string_view filename, bool allow_override);
/// Reads a file from the resources directory of the application.
/// This may be outside of the "normal" filesystem on platforms such as Mac.
std::optional<DynamicHeapArray<u8>> ReadResourceFile(std::string_view filename, bool allow_override,
Error* error = nullptr);
/// Reads a resource file file from the resources directory as a string.
std::optional<std::string> ReadResourceFileToString(std::string_view filename, bool allow_override,
Error* error = nullptr);
/// Returns the modified time of a resource.
std::optional<std::time_t> GetResourceFileTimestamp(std::string_view filename, bool allow_override);
/// Reports a fatal error on the main thread. This does not assume that the main window exists,
/// unlike ReportErrorAsync(), and will exit the application after the popup is closed.
[[noreturn]] void ReportFatalError(std::string_view title, std::string_view message);
/// Displays an asynchronous error on the UI thread, i.e. doesn't block the caller.
void ReportErrorAsync(std::string_view title, std::string_view message);
/// Displays a message in either the on-screen display or status bar, depending on host capabilities.
void ReportStatusMessage(std::string_view message);
/// Displays an asynchronous confirmation on the UI thread, but does not block the caller.
/// The callback may be executed on a different thread. Use RunOnCoreThread() in the callback to ensure safety.
using ConfirmMessageAsyncCallback = std::function<void(bool)>;
void ConfirmMessageAsync(std::string_view icon, std::string_view title, std::string_view message,
ConfirmMessageAsyncCallback callback, std::string_view yes_text = std::string_view(),
std::string_view no_text = std::string_view());
/// Opens a URL, using the default application.
void OpenURL(std::string_view url);
/// Returns the current contents of the clipboard as UTF-8 text, if any.
std::string GetClipboardText();
/// Copies the provided UTF-8 text to the host's clipboard, if present.
bool CopyTextToClipboard(std::string_view text);
/// Returns a list of supported languages and codes (suffixes for translation files).
std::span<const std::pair<const char*, const char*>> GetAvailableLanguageList();
/// Returns the localized language name for the specified language code.
const char* GetLanguageName(std::string_view language_code);
/// Refreshes the UI when the language is changed.
bool ChangeLanguage(const char* new_language);
/// Gets a handle to the core thread.
const Threading::ThreadHandle& GetCoreThreadHandle();
/// Returns true if the currently executing thread is the core thread.
bool IsOnCoreThread();
/// Safely executes a function on the VM thread.
void RunOnCoreThread(std::function<void()> function, bool block = false);
/// Safely executes a function on the main/UI thread.
void RunOnUIThread(std::function<void()> function, bool block = false);
/// Asynchronous work tasks, complete on worker thread.
void QueueAsyncTask(std::function<void()> function);
void WaitForAllAsyncTasks();
/// Commits any changes made to the base settings layer to the host.
void CommitBaseSettingChanges();
/// Returns the window type for the host.
WindowInfoType GetRenderWindowInfoType();
/// Changes the screensaver inhibit state.
bool SetScreensaverInhibit(bool inhibit, Error* error);
} // namespace Host