mirror of
https://github.com/Nexoniarz/Fry3DX.git
synced 2026-11-03 04:24:26 +00:00
Fry3DX 0.5: builds for Windows, Linux and Android, a phone layout, Apache 2.0
- Apache License 2.0 - Windows: cross-built with clang-cl (cmake --preset windows), a window program with its icon; Linux: a portable preset (SDL and the C++ library inside); Android: android/build_apk.py makes the APK - tools/package.py packs the downloads; a GitHub workflow builds all three and makes a release for a v* tag - A phone layout (fry_touch, on by default on Android): the UI drawn bigger, panels when asked for, a bar of big buttons, one finger to turn the view, two to move and pinch, a long press for a right-click; files through the phone's file picker - Settings and autosaves now in a Nexoniarz folder (copied over once) - README rewritten, the website shows the downloads and the phone Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NMSrd5oe1GpUD7E6d825KP
This commit is contained in:
parent
f3e8eca87b
commit
f6f5e5f288
40 changed files with 1180 additions and 158 deletions
|
|
@ -3,6 +3,7 @@
|
|||
#include "fs/vfs.h"
|
||||
|
||||
#include <imgui.h>
|
||||
#include <imgui_internal.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstring>
|
||||
|
|
@ -95,6 +96,29 @@ ImFont* font(Font f) {
|
|||
|
||||
float scale() { return g_scale; }
|
||||
|
||||
namespace {
|
||||
float g_pixelScale = 1.0f;
|
||||
ImU32 g_lastScaledEvent = 0;
|
||||
}
|
||||
void setPixelScale(float k) { g_pixelScale = std::clamp(k, 0.5f, 6.0f); }
|
||||
float pixelScale() { return g_pixelScale; }
|
||||
void applyPixelScale() {
|
||||
const float k = g_pixelScale;
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
io.DisplaySize.x /= k, io.DisplaySize.y /= k; // (set again each frame by the platform)
|
||||
io.DisplayFramebufferScale.x *= k, io.DisplayFramebufferScale.y *= k;
|
||||
// The mouse's positions queued since last frame, in the screen's pixels: into the UI's.
|
||||
// (Events left over for the next frame were done already: by their number.)
|
||||
ImU32 last = g_lastScaledEvent;
|
||||
for (ImGuiInputEvent& e : GImGui->InputEventsQueue) {
|
||||
if (e.EventId <= g_lastScaledEvent) continue;
|
||||
last = std::max(last, e.EventId);
|
||||
if (e.Type == ImGuiInputEventType_MousePos && e.MousePos.PosX > -FLT_MAX)
|
||||
e.MousePos.PosX /= k, e.MousePos.PosY /= k;
|
||||
}
|
||||
g_lastScaledEvent = last;
|
||||
}
|
||||
|
||||
void beginFrame(float windowHeight) {
|
||||
g_scale = std::clamp(windowHeight / 1080.0f, 0.75f, 2.5f);
|
||||
ImGui::GetStyle().FontScaleMain = g_scale;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,12 @@ ImFont* font(Font f);
|
|||
// Sizes in pixels; scaled with the window height so 1080p looks like Source at 1080p.
|
||||
float scale();
|
||||
void beginFrame(float windowHeight);
|
||||
// The UI laid out `k` times smaller than the screen's pixels and drawn scaled up, everything
|
||||
// alike (a phone: its pixels are tiny). 1: as it is.
|
||||
void setPixelScale(float k);
|
||||
float pixelScale();
|
||||
// The backends call this between the platform's NewFrame and ImGui::NewFrame.
|
||||
void applyPixelScale();
|
||||
|
||||
// The highlight colour: highlights, the logo.
|
||||
inline constexpr uint8_t kAccent[3] = {227, 34, 45};
|
||||
|
|
|
|||
Loading…
Reference in a new issue