From 4a834c9189235dfcaab9e560f9e573a1c4977c71 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 22 Oct 2026 16:09:14 +1100 Subject: [PATCH 1/3] Take the native runtime from PlatformHeads The window, GLFW's input, the frame skipping, the renderer, the fonts and the label helpers of deview.cpp move to PlatformHeads' native runtime, which BuildMonitor takes too, and deview.cpp calls them as ph::. A placement handed over now also places a window started hidden. The AppKit head takes PlatformHeadsMac the same way: HeadWindow, EventPump, TerminateGuard, NapGuard, KnobScroller (which was PaneScroller), ScrollerTravel, WheelNotches, ToolTipRegions, StringBlob, Capture, Clipboard and WindowPlacement. A placement is now measured from the top left of the primary screen, as every other head measures it, so a window left by an older viewer opens once where its old bottom-left numbers say. CMake and SwiftPM point at the PlatformHeads branch until it is tagged 0.4.0. --- claude.md | 17 +- native/CMakeLists.txt | 2 +- native/src/deview.cpp | 2104 ++---------------- native/swift/Package.swift | 10 +- native/swift/Sources/Deview/Exports.swift | 62 +- native/swift/Sources/Deview/Frame.swift | 15 +- native/swift/Sources/Deview/Runtime.swift | 261 +-- native/swift/Sources/Deview/ViewerView.swift | 163 +- 8 files changed, 302 insertions(+), 2332 deletions(-) diff --git a/claude.md b/claude.md index b57d0bb31..9ac174059 100644 --- a/claude.md +++ b/claude.md @@ -265,8 +265,8 @@ the comment there about not caching "nothing staged" asks for. grid. The cost is that none of them exists in `deview_capture`, which makes no window — hence `PixelTests.ContextMenu` being skipped there, and the scroller taking its strip out of the renderer only when a window exists. AppKit's own loops run inside the pump, so the managed loop - waits them out. The scroller is a `PaneScroller`, which follows a drag of its knob as ordinary - events for that reason, where AppKit's tracking loop left the panes still until the knob was let + waits them out. The scroller is PlatformHeadsMac's `KnobScroller`, which follows a drag of its + knob as ordinary events for that reason, where AppKit's tracking loop left the panes still until the knob was let go. A live resize is the same kind of loop and still draws the rows sliced for the old size: doing better takes a frame callback the C ABI does not have. Keys and clicks are queued in `Runtime` and handed over one a poll, as the WinForms head does and for its reason. The footer @@ -615,10 +615,17 @@ the comment there about not caching "nothing staged" asks for. **Native shim (`native/`), used by the Mac and Linux heads only:** - The build and packaging of the heads is PlatformHeads' (`D:\Code\PlatformHeads`, github.com/SimonCropp/PlatformHeads), which BuildMonitor shares: it was worked out here and - copied there, and fixes made here did not reach the copy. Five pins name one tag of it and move + copied there, and fixes made here did not reach the copy. Six pins name one tag of it and move together: the `uses:` of `.github/workflows/build-native.yml`, the `GIT_TAG` in - `native/CMakeLists.txt`, and `PlatformHeads`, `PlatformHeads.Core` and - `PlatformHeads.WindowsForms` in `Directory.Packages.props`. The workflow is its + `native/CMakeLists.txt`, `PlatformHeads`, `PlatformHeads.Core` and + `PlatformHeads.WindowsForms` in `Directory.Packages.props`, and the `PlatformHeads` package + in `native/swift/Package.swift`. So is the native runtime under both heads' drawing: the C++ + one `deview.cpp` calls as `ph::` (the window, GLFW's input as it happened, which frames are + built and drawn, the renderer, the fonts and fontconfig, and the label helpers) and the Swift + `PlatformHeadsMac` the AppKit head imports (`HeadWindow`, `EventPump`, `TerminateGuard`, + `NapGuard`, `KnobScroller`, `ScrollerTravel`, `WheelNotches`, `ToolTipRegions`, `StringBlob`, + `Capture`, `Clipboard` and `WindowPlacement`). Each was worked out here and copied to + BuildMonitor; a fix to any of them goes there now. The workflow is its reusable `build-native`. Its CMake module pins raylib and Dear ImGui, carries the raylib 6.0 option workarounds and links the library, and `native/CMakeLists.txt` names only the picture formats, the source file and the two libraries the viewer links beyond raylib. Its package's diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index ea972f137..11adb3b43 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -15,7 +15,7 @@ include(FetchContent) FetchContent_Declare( platformheads GIT_REPOSITORY https://github.com/SimonCropp/PlatformHeads.git - GIT_TAG 0.3.0 + GIT_TAG native-runtime GIT_SHALLOW ON) FetchContent_MakeAvailable(platformheads) include(${platformheads_SOURCE_DIR}/cmake/PlatformHeads.cmake) diff --git a/native/src/deview.cpp b/native/src/deview.cpp index f43a70d6d..354d501dc 100644 --- a/native/src/deview.cpp +++ b/native/src/deview.cpp @@ -7,6 +7,7 @@ * honour texture requests, feed mouse input, and turn ImDrawData into rlgl calls. */ #include "deview.h" +#include "platformheads/runtime.h" #include "imgui.h" /* For ScrollbarEx and ImRect. Internal, but it is the only way to put ImGui's own scrollbar @@ -43,58 +44,6 @@ #include #endif -/* - * raylib latches GLFW's close flag and exposes no way to clear it, but the window has to survive a - * close when a tray is running, otherwise every later frame would report closing again. raylib - * statically links GLFW into this library so the symbols resolve, and glfwGetCurrentContext - * returns raylib's own window without needing the GLFW headers. - */ -extern "C" void* glfwGetCurrentContext(void); -extern "C" void glfwSetWindowShouldClose(void* window, int value); - -/* - * And GLFW's callback for the window system wanting a window's content drawn again, because part - * of it has been uncovered or it has been put back on the screen. raylib asks to be told when a - * window is resized, moved, minimised or focused and not this, since it draws every frame whatever - * happens. A window that has stopped drawing frames nobody needs has to hear it: see State::stale. - * Setting it here takes nothing from raylib, which sets none. - */ -extern "C" -{ -typedef void (*DeviewRefresh)(void* window); -DeviewRefresh glfwSetWindowRefreshCallback(void* window, DeviewRefresh callback); -} - -/* - * And its callbacks for a mouse button, the wheel, a key and a character. raylib sets all four, and - * keeps from them what was so when it last read the window system's events: whether a button is - * down, the last wheel message, which keys are down. That is a state, read once a frame, and a - * press and a release that arrive between two reads leave it as it was. So these are set over - * raylib's, which are kept and still called, and what they are told is kept as what happened: see - * State::presses. - * - * And the one for the pointer crossing the window's edge, which raylib also keeps and nothing - * else here could be told by: where the pointer is stays where it last was in the window, for as - * long as it is anywhere else. See State::pointerInside. - */ -extern "C" -{ -typedef void (*DeviewButtonEvent)(void* window, int button, int action, int mods); -typedef void (*DeviewScrollEvent)(void* window, double across, double down); -typedef void (*DeviewKeyEvent)(void* window, int key, int scancode, int action, int mods); -typedef void (*DeviewCharacterEvent)(void* window, unsigned int codepoint); -typedef void (*DeviewCrossingEvent)(void* window, int entered); -DeviewCrossingEvent glfwSetCursorEnterCallback(void* window, DeviewCrossingEvent callback); -DeviewButtonEvent glfwSetMouseButtonCallback(void* window, DeviewButtonEvent callback); -DeviewScrollEvent glfwSetScrollCallback(void* window, DeviewScrollEvent callback); -DeviewKeyEvent glfwSetKeyCallback(void* window, DeviewKeyEvent callback); -DeviewCharacterEvent glfwSetCharCallback(void* window, DeviewCharacterEvent callback); - -/* What a key types on the layout in use, unshifted, or null for a key that types nothing. The - * key is one of GLFW's numbers, or -1 for the key with that scancode. */ -const char* glfwGetKeyName(int key, int scancode); -} - /* * And GLFW's way to an entry point of the GL the window was made with, for the one thing asked of * GL that rlgl has no call for: how large a texture it will take. See TextureLimit. @@ -105,30 +54,8 @@ typedef void (*DeviewGlEntry)(void); DeviewGlEntry glfwGetProcAddress(const char* name); } -/* - * And how much larger than a pixel the desktop wants everything drawn, which under X11 is the - * Xft.dpi resource over 96. raylib asks GLFW this only for a window it was told to scale itself, - * which this one is not: see State::scale. - */ -extern "C" void glfwGetWindowContentScale(void* window, float* across, float* down); - -/* GLFW's own numbers, which its headers would have named. */ -constexpr int glfwRelease = 0; -constexpr int glfwShift = 0x0001; -constexpr int glfwControl = 0x0002; -constexpr int glfwSuper = 0x0008; - namespace { -void ClearCloseFlag() -{ - void* handle = glfwGetCurrentContext(); - if (handle != nullptr) - { - glfwSetWindowShouldClose(handle, 0); - } -} - /* * Queue column widths, counted in character cells rather than pixels so a scaled display gets a * column that holds the same number of characters rather than a narrower one. @@ -175,25 +102,6 @@ constexpr float emScale = 1.32f; */ constexpr float checkerSize = 8.0f; -/* - * How long a frame lasts, which is what holds the managed loop to sixty turns a second: it calls - * deview_present as fast as that returns. raylib used to do the waiting, inside EndDrawing. It is - * done here now, because a frame that is not drawn has to be waited out as well: see Rest. - */ -constexpr double frameSeconds = 1.0 / 60.0; - -/* - * How many frames in a row have to be built with nothing arriving, and come out as the frame on - * the screen, before frames stop being built: a second of them, since each is waited out. - * - * ImGui does things over several frames and counts some of them in the time it is told has passed. - * A layout can take a second frame to settle, input given in one frame may be acted on over the - * next few, and for a quarter of a second after the pointer leaves a row with a tooltip the next - * row's comes up without its delay. A second is longer than any of them, and costs little: these - * are frames that are built and compared, not drawn. - */ -constexpr int settledFrames = 60; - /* * One decoded picture, kept because BuildFrame runs sixty times a second and decoding an image per * frame is what turns a window that is merely showing something into one that is busy. @@ -275,35 +183,6 @@ struct Decoder int textureLimit = 0; }; -/* - * One of the machine's fonts, read whole, for the characters the embedded one does not have: - * its bytes, which of the faces in them, and the scale that makes deview_init's size an em for - * that face, as emScale does for the embedded font. - */ -struct FoundFont -{ - std::vector data; - int face = 0; - float scale = 1.0f; -}; - -/* - * Those fonts are looked for and read on a thread of their own, for the reason pictures are - * decoded on one: fontconfig reading its caches and a CJK collection coming off the disk are tens - * of milliseconds each, and the first is seconds on a machine whose caches are stale. Shared and - * detached as the decoder is, and for its reason. - */ -struct FontFinder -{ - std::mutex mutex; - std::condition_variable wake; - - /* Characters the window's font cannot draw, each asked about once. */ - std::vector wanted; - std::vector found; - bool stopping = false; -}; - struct State { bool initialised = false; @@ -311,51 +190,6 @@ struct State ImGuiContext* context = nullptr; DeviewInput input{}; - /* - * The font the window draws with: the embedded font, and merged into it whichever of the - * machine's fonts a character on screen has needed. - * - * Not the font a capture draws with. That is the embedded font alone, which the atlas holds - * a second time and ahead of this one, so that a capture is the same picture on a machine - * with every font installed and on one with none: a character the embedded font lacks is the - * replacement glyph there, as it was everywhere before this. What the two draw from the - * embedded font is the same glyphs, so the captures still describe the window. - */ - ImFont* font = nullptr; - - /* Started with the first character the font cannot draw, so a window that never shows one - * never has it, nor fontconfig. */ - std::shared_ptr finder; - - /* One bit a code point, set once it has been looked at, so it is asked about once and a - * frame of text already seen costs a pass over its bytes. Empty until something past ASCII - * turns up. */ - std::vector asked; - - /* The bytes of each font merged in. ImGui rasterises a glyph out of them when a character is - * first drawn, so they are kept for as long as the atlas is. */ - std::deque> fontData; - - /* - * How much larger than a pixel the desktop wants things drawn: 1 on an ordinary display, 2 on - * one whose desktop is set to twice the size, and anything between. - * - * Nothing here asked. Under X11 a pixel is a pixel whatever the display, so the window was - * 1100 by 700 of them and its text 15 to the em on a display with twice as many to the inch, - * where everything else on the desktop is twice that: the viewer at half size. - * - * The window is drawn larger rather than handed to raylib to scale, which it would do by - * drawing the same frame through a transform: the text here is rasterised at the size it is - * shown, and everything stays in the pixels the pointer is reported in, so nothing that is - * hit tested has two sets of coordinates to keep apart. What is scaled is the font, ImGui's - * paddings and spacings, the few lengths this file gives in pixels, and the size a window - * opens at when there is none remembered. A remembered one is in pixels already. - * - * Read once, as the window is made: GLFW works it out as it starts and keeps it. Never applied - * to a capture, which draws at the size it is told at a scale of 1, on any display. - */ - float scale = 1.0f; - /* A character cell's width and a row's height in the last frame built for the window, which * is what the grid reported to the managed side is counted in: see MeasureGrid. */ float cellWidth = 0.0f; @@ -369,92 +203,6 @@ struct State * outside it a dismissal rather than what they would otherwise mean. */ bool menuOpen = false; - /* What a wheel message left over. A notch is 1.0, and a touchpad sends fractions of one: - * truncating each frame's value on its own threw all of them away, so a touchpad scrolled - * nothing at all. */ - float scrollRemainder = 0.0f; - - /* - * What the pointer's buttons, the wheel and the keys have done since each was last taken, as - * GLFW reported it: every press and release in the order they came, every wheel message added - * up, every key pressed with the character it typed. - * - * Read as a state once a frame, which is how raylib offers them, a press and a release that - * arrived together had never happened, and of several wheel messages only the last had. A tap - * on a touchpad is such a press, and so is every click xdotool sends: under Xvfb none of ten - * clicks was seen, and three of ten presses of Page Down. - * - * The presses are ImGui's, handed over at the top of the next frame built. It takes a press and - * a release handed over together a frame apart, so what is drawn is clicked as it would be by a - * button that was held. Nothing else here asks raylib about a button, so there is no second - * account of one to disagree with ImGui's. - */ - struct Press - { - int button; - bool down; - }; - - std::vector presses; - bool held[3] = {}; - - /* The wheel twice over, because it is taken twice: by ImGui with the presses, and by - * deview_poll_input for the managed side, which is not at the same moment. */ - float wheelAcross = 0.0f; - float wheelDown = 0.0f; - float wheelNotches = 0.0f; - - /* - * A key pressed, or repeating while it is held, with the character it typed if it typed one. - * Handed to the managed side one a poll, as the other two heads hand theirs, so two keys - * between two polls are both acted on and in their order. - */ - struct KeyPress - { - /* GLFW's number for the key, which is where it is on a US keyboard, or -1 for a key it - * has no number for, and the window system's own number for it. */ - int key; - int scancode; - int mods; - bool repeated; - unsigned int character; - }; - - std::deque keys; - - /* Whether the next character GLFW reports was typed by the key press at the back of the queue, - * which is so only straight after that press: GLFW reports the two together. */ - bool characterFollows = false; - - /* A key has been pressed since Arrived last asked. */ - bool keyed = false; - - /* - * Whether the pointer is over the window, by the last crossing GLFW reported, and whether the - * last frame was built with it gone. - * - * ImGui was told where the pointer is on every frame, and raylib goes on answering with the - * last place it was in the window. So a pointer that left over a queue row was still on that - * row: it stayed lit, and its tooltip came up with the pointer on another window. A pointer - * that has left is now reported to ImGui as nowhere, which is what it has for that. - * - * Not while a button is held. The window system goes on reporting a pointer that was pressed - * in the window wherever it is taken, and a selection dragged past the window's edge has to - * go on being one. - * - * Taken to be inside until a crossing says otherwise, so a window that opens under the pointer - * and is told of no crossing is no worse off than it was. - */ - bool pointerInside = true; - bool pointerGone = false; - - /* raylib's callbacks, which go on being called. */ - DeviewCrossingEvent raylibCrossing = nullptr; - DeviewButtonEvent raylibButton = nullptr; - DeviewScrollEvent raylibScroll = nullptr; - DeviewKeyEvent raylibKey = nullptr; - DeviewCharacterEvent raylibCharacter = nullptr; - /* * The queue column, owned here rather than by the table. * @@ -468,9 +216,6 @@ struct State */ float queueWidth = 0.0f; - /* What was last handed to raylib, so an idle frame is not a window system call. */ - int cursor = MOUSE_CURSOR_DEFAULT; - /* Keyed by the path the screen model handed over. std::map rather than unordered, because the * entries are handed out as pointers and this one does not move them. */ std::map pictures; @@ -566,14 +311,6 @@ struct State bool placed = false; DeviewPlacement placement{}; - /* - * The window's bounds as they were when it was last neither maximised nor minimised, and - * whether it is maximised now. GLFW says where a maximised window is and nothing about where - * it will go back to, so that has to have been noted while it was still there. - */ - bool tracked = false; - DeviewPlacement normal{}; - /* * What decides whether a frame is put on the screen, and whether one is built at all: see * deview_present. First the screen as it was last handed over, every byte of it, and the one @@ -582,36 +319,10 @@ struct State std::vector presented; std::vector arriving; - /* What was drawn to make the frame on the screen, reduced to a number: see Fingerprint. */ - uint64_t shown = 0; - - /* - * The window cannot be taken to be showing the frame last drawn into it: nothing has been - * drawn yet, the window system has asked for its content again, it has changed size or come - * back from being hidden, or a texture has been put behind a name that frame may have used. - * The next frame is drawn, whatever it comes out as. - */ - bool stale = true; - - /* Frames in a row that had nothing arrive and came out as the one on the screen. */ - int settled = 0; - /* A queue row's tooltip is waiting out its delay, which ImGui counts in the frames it is * given: see BuildFrame. */ bool tooltipDue = false; - /* When the last present began, and when the last frame's wait ended, by GetTime. */ - double began = 0.0; - double ended = 0.0; - - /* The pointer and the window as the last present found them. */ - Vector2 pointer{}; - int width = 0; - int height = 0; - bool hidden = false; - bool minimised = false; - bool focused = false; - /* * The file behind each picture the last frame built for the window asked for, as that frame * found it: there or not, and if there, written when and how long. See PicturesRewritten. @@ -630,164 +341,21 @@ struct State State state; /* The scale the frame being built is drawn at: the display's for the window's, and 1 for a - * capture's. See State::scale. */ + * capture's. See ph::WindowScale. */ float Scale() { - return state.capturing ? 1.0f : state.scale; -} - -/* GLFW's refresh callback, called from inside PollInputEvents: the window system has uncovered - * some of the window, or shown it, and what was there is gone. */ -extern "C" void WindowRefreshed(void* window) -{ - state.stale = true; -} - -/* The five below are called from inside PollInputEvents too, each after raylib's own. */ -extern "C" void PointerCrossed(void* window, int entered) -{ - if (state.raylibCrossing != nullptr) - { - state.raylibCrossing(window, entered); - } - - state.pointerInside = entered != 0; -} - -extern "C" void ButtonChanged(void* window, int button, int action, int mods) -{ - if (state.raylibButton != nullptr) - { - state.raylibButton(window, button, action, mods); - } - - /* Left, right and middle, which GLFW and ImGui number alike. */ - if (button >= 0 && - button < 3) - { - state.presses.push_back({button, action != glfwRelease}); - state.held[button] = action != glfwRelease; - } -} - -extern "C" void WheelTurned(void* window, double across, double down) -{ - if (state.raylibScroll != nullptr) - { - state.raylibScroll(window, across, down); - } - - state.wheelAcross += static_cast(across); - state.wheelDown += static_cast(down); - state.wheelNotches += static_cast(down); -} - -extern "C" void KeyChanged(void* window, int key, int scancode, int action, int mods) -{ - if (state.raylibKey != nullptr) - { - state.raylibKey(window, key, scancode, action, mods); - } - - state.characterFollows = false; - if (action == glfwRelease) - { - return; - } - - state.keyed = true; - - /* One repeat of a key waiting at a time. A loop that was held up for seconds is handed every - * repeat the window system kept for it at once, and would go on scrolling for as long again - * after the key was let go. */ - const bool repeated = action != 1; - if (repeated) - { - for (const State::KeyPress& waiting : state.keys) - { - if (waiting.repeated && - waiting.key == key && - waiting.scancode == scancode) - { - return; - } - } - } - - state.keys.push_back({key, scancode, mods, repeated, 0}); - state.characterFollows = true; -} - -extern "C" void CharacterTyped(void* window, unsigned int codepoint) -{ - if (state.raylibCharacter != nullptr) - { - state.raylibCharacter(window, codepoint); - } - - /* Typed by the press just queued: GLFW reports a key and then its character. One that follows - * a repeat that was not queued goes with it, and one that comes by itself is what an input - * method composed, which is none of the keys read here. */ - if (state.characterFollows && - !state.keys.empty()) - { - state.keys.back().character = codepoint; - } - - state.characterFollows = false; -} - -/* - * Whether a remembered window would open somewhere it can be reached: its top edge on a monitor, - * with enough of its width there to take hold of. Monitors come and go between runs, and a window - * opened where one used to be is a viewer that looks as if it did not start. - */ -bool OnAMonitor(const DeviewPlacement& placement) -{ - constexpr int reach = 100; - const int count = GetMonitorCount(); - for (int index = 0; index < count; index++) - { - const Vector2 origin = GetMonitorPosition(index); - const int left = static_cast(origin.x); - const int top = static_cast(origin.y); - const int right = left + GetMonitorWidth(index); - const int bottom = top + GetMonitorHeight(index); - const int overlap = std::min(placement.x + placement.width, right) - std::max(placement.x, left); - if (overlap >= reach && - placement.y >= top && - placement.y < bottom - reach) - { - return true; - } - } - - return false; + return state.capturing ? 1.0f : ph::WindowScale(); } -/* Noted every frame the window is neither maximised, minimised nor hidden. See State::normal. */ -void TrackPlacement() -{ - if (IsWindowState(FLAG_WINDOW_HIDDEN) || - IsWindowMinimized()) - { - return; - } - - state.normal.maximized = IsWindowMaximized() ? 1 : 0; - if (state.normal.maximized != 0 && - state.tracked) - { - return; - } - - const Vector2 position = GetWindowPosition(); - state.normal.x = static_cast(position.x); - state.normal.y = static_cast(position.y); - state.normal.width = GetScreenWidth(); - state.normal.height = GetScreenHeight(); - state.tracked = true; -} +/* What the runtime does for every head, under the names this file has always called them by. */ +using ph::ButtonLabel; +using ph::HeadersRow; +using ph::LabelWidth; +using ph::LetterOf; +using ph::Marked; +using ph::RenderDrawData; +using ph::SelectableLabel; +using ph::TextWithin; float ClampQueueWidth(float value, float available, float cell) { @@ -825,22 +393,10 @@ void ResetInput() state.input.rightClickedPane = -1; } -/* Every string is an offset into one UTF-8 blob. Bad offsets are a crash, not a glitch, so the - * whole boundary is bounds checked rather than trusted. */ +/* Every string is an offset into one UTF-8 blob, read by the runtime: see ph::Slice. */ bool Slice(const DeviewScreen* screen, int offset, int length, const char** begin, const char** end) { - if (screen->strings == nullptr || - offset < 0 || - length < 0 || - offset > screen->stringsLength || - offset + length > screen->stringsLength) - { - return false; - } - - *begin = reinterpret_cast(screen->strings) + offset; - *end = *begin + length; - return true; + return ph::Slice(screen->strings, screen->stringsLength, offset, length, begin, end); } void Text(const DeviewScreen* screen, int offset, int length) @@ -859,14 +415,19 @@ void Text(const DeviewScreen* screen, int offset, int length) std::string Copy(const DeviewScreen* screen, int offset, int length) { - const char* begin; - const char* end; - if (!Slice(screen, offset, length, &begin, &end)) + return ph::Copy(screen->strings, screen->stringsLength, offset, length); +} + +/* Asks for a font for every character of a screen the window's font cannot draw. Every string + * of the frame is in the one blob, so one pass over it covers the title, the queue and the + * tooltips with the rows. */ +void FindFontsFor(const DeviewScreen* screen) +{ + if (screen->strings != nullptr && + screen->stringsLength > 0) { - return {}; + ph::FindFontsFor(reinterpret_cast(screen->strings), static_cast(screen->stringsLength)); } - - return {begin, static_cast(end - begin)}; } ImU32 RowColour(int kind) @@ -1212,7 +773,7 @@ bool ReplaceTexture(const Image& image, bool translucent, CachedTexture& entry) entry.sampling = made.sampling; /* Another texture behind the picture, which may have been given the name of the last. */ - state.stale = true; + ph::MarkStale(); return true; } @@ -1349,7 +910,7 @@ bool TakeDecoded() /* GL hands out the name of a texture that has been unloaded again, so a frame * drawn with this one can be, number for number, a frame drawn with the one * that had the name before it. */ - state.stale = true; + ph::MarkStale(); } } else if (found != state.pictures.end() && @@ -1534,934 +1095,111 @@ const CachedTexture* Picture(const std::string& path, bool reduced, bool& loadin MakeTexture(image, translucent, entry); UnloadImage(image); } - else - { - entry.decoding = true; - loading = true; - RequestDecode(path, length, written, reduced); - } - - const auto inserted = state.pictures.emplace(path, entry).first; - return inserted->second.loaded ? &inserted->second : nullptr; -} - -/* - * Drops every picture the frame just drawn did not ask for, once the frame has been rendered and - * the draw data naming those textures has been consumed. - * - * Otherwise an entry went only when its own path was asked for again and had changed or gone, so - * every image reviewed in a session stayed decoded, on the GPU, until the session ended. A picture - * scrolled or navigated back to is decoded again, which is one file read. - */ -void ForgetUnusedPictures() -{ - for (auto entry = state.pictures.begin(); entry != state.pictures.end();) - { - if (entry->second.used) - { - entry->second.used = false; - ++entry; - continue; - } - - if (entry->second.loaded) - { - UnloadTexture(entry->second.texture); - } - - if (entry->second.decoding || - entry->second.reducing) - { - CancelDecode(entry->first); - } - - entry = state.pictures.erase(entry); - } -} - -/* - * The checkerboard's texture, or null on a context that would not make one, where a picture is - * drawn over the lighter of the two tones instead. - * - * Sampled as its two tones and nothing between them, and repeating, which is what lets one quad - * the size of the picture stand for every square behind it. - */ -const Texture2D* Checker() -{ - if (!state.checkerMade) - { - state.checkerMade = true; - - /* Light where the row and the column are both even or both odd, and dark elsewhere. */ - unsigned char pixels[] = { - 64, 64, 64, 255, 48, 48, 48, 255, - 48, 48, 48, 255, 64, 64, 64, 255}; - Image image{}; - image.data = pixels; - image.width = 2; - image.height = 2; - image.mipmaps = 1; - image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; - state.checker = LoadTextureFromImage(image); - if (IsTextureValid(state.checker)) - { - SetTextureFilter(state.checker, TEXTURE_FILTER_POINT); - SetTextureWrap(state.checker, TEXTURE_WRAP_REPEAT); - } - } - - return IsTextureValid(state.checker) ? &state.checker : nullptr; -} - -void UnloadPictures() -{ - StopDecoder(); - for (auto& entry : state.pictures) - { - if (entry.second.loaded) - { - UnloadTexture(entry.second.texture); - } - } - - state.pictures.clear(); - - if (IsTextureValid(state.checker)) - { - UnloadTexture(state.checker); - } - - state.checker = Texture2D{}; - state.checkerMade = false; -} - -/* ---- fonts ---- */ - -/* - * The machine's own fonts, for the characters the embedded one does not have. - * - * JetBrains Mono has Latin, Greek, Cyrillic and the symbols code is written in, and it was the - * only font here: Chinese, Japanese, Korean, Arabic, Hebrew, Thai and emoji all drew as the - * replacement glyph, so a snapshot holding any of them could not be reviewed in this head. A line - * with one such character changed was marked as changed and looked the same on both sides. The - * other two heads have their toolkits' font fallback. ImGui has none of its own, but it does draw - * a character from the first of a font's sources to have it, so the machine's fonts are merged - * into the window's font as further sources. - * - * Drawn, and not shaped: each character is the glyph its font has for it, where the grid put it. - * Arabic is its letters unjoined and in the order they are stored, and an emoji made of several - * is as many of them as its cells hold. That is enough to see which characters a snapshot holds, - * which is what this is for. - * - * Only the fonts a character on screen has needed, and only once one has. Every font fontconfig - * knows of can be hundreds of megabytes of files, and a screen of ASCII, which is nearly every - * screen, costs a pass over its bytes and nothing else. Until a font lands its characters are the - * replacement glyph they always were. - * - * Never for a capture: see State::font. - */ - -/* As many of the machine's fonts as are ever merged in. ImGui numbers a font's sources in four - * bits, and the embedded font is the first of them. */ -constexpr size_t fontLimit = 15; - -/* - * fontconfig's FcFontSet, whose layout is part of its ABI, and the entry points this uses. - * - * Found in the library when a character first needs them rather than linked. Linked, a machine - * without fontconfig could not load this library at all, and building it would need fontconfig's - * headers. Found at run time, such a machine has no fonts to offer, which is what every machine - * had before. - */ -struct FontSet -{ - int count; - int capacity; - void** fonts; -}; - -struct Fontconfig -{ - void* (*initLoadConfigAndFonts)() = nullptr; - void* (*nameParse)(const unsigned char* name) = nullptr; - int (*configSubstitute)(void* config, void* pattern, int kind) = nullptr; - void (*defaultSubstitute)(void* pattern) = nullptr; - FontSet* (*fontSort)(void* config, void* pattern, int trim, void** charset, int* result) = nullptr; - int (*patternGetString)(const void* pattern, const char* object, int index, unsigned char** value) = nullptr; - int (*patternGetInteger)(const void* pattern, const char* object, int index, int* value) = nullptr; - int (*patternGetBool)(const void* pattern, const char* object, int index, int* value) = nullptr; - int (*patternGetCharSet)(const void* pattern, const char* object, int index, void** value) = nullptr; - int (*charSetHasChar)(const void* charset, unsigned int codepoint) = nullptr; -}; - -/* - * Every font on the machine that says which characters it has, in the order fontconfig falls - * back through them from a monospace font for this user's language. That is the answer every - * other program here is given, and it is what puts the Japanese forms of the Han characters - * ahead of the Chinese ones for a Japanese reader. - */ -struct SystemFonts -{ - bool opened = false; - Fontconfig fontconfig; - - struct Candidate - { - const void* pattern; - const void* charset; - }; - - std::vector candidates; - - /* Handed over already, and found to be something stb_truetype cannot draw from. By file and - * face rather than by candidate, because one face can be listed more than once. */ - std::set> taken; - std::set> unusable; -}; - -#if !defined(_WIN32) -template -bool Resolve(void* library, const char* name, Entry& entry) -{ - entry = reinterpret_cast(dlsym(library, name)); - return entry != nullptr; -} -#endif - -/* On the finder's thread, the first time a character is asked about. What fontconfig hands back - * is not given back: the candidates point into it for as long as the thread runs, which is as - * long as the window does, and a process has the one window. */ -void OpenSystemFonts(SystemFonts& fonts) -{ - fonts.opened = true; -#if !defined(_WIN32) - void* library = dlopen("libfontconfig.so.1", RTLD_NOW | RTLD_LOCAL); - if (library == nullptr) - { - return; - } - - Fontconfig& fontconfig = fonts.fontconfig; - if (!Resolve(library, "FcInitLoadConfigAndFonts", fontconfig.initLoadConfigAndFonts) || - !Resolve(library, "FcNameParse", fontconfig.nameParse) || - !Resolve(library, "FcConfigSubstitute", fontconfig.configSubstitute) || - !Resolve(library, "FcDefaultSubstitute", fontconfig.defaultSubstitute) || - !Resolve(library, "FcFontSort", fontconfig.fontSort) || - !Resolve(library, "FcPatternGetString", fontconfig.patternGetString) || - !Resolve(library, "FcPatternGetInteger", fontconfig.patternGetInteger) || - !Resolve(library, "FcPatternGetBool", fontconfig.patternGetBool) || - !Resolve(library, "FcPatternGetCharSet", fontconfig.patternGetCharSet) || - !Resolve(library, "FcCharSetHasChar", fontconfig.charSetHasChar)) - { - return; - } - - void* config = fontconfig.initLoadConfigAndFonts(); - void* pattern = fontconfig.nameParse(reinterpret_cast("monospace")); - if (config == nullptr || - pattern == nullptr) - { - return; - } - - /* The two steps every match is prepared with: the configuration's rules, which is where - * "monospace" becomes the fonts the machine means by it, and the defaults, which is where - * the user's language comes from. */ - fontconfig.configSubstitute(config, pattern, 0); - fontconfig.defaultSubstitute(pattern); - - /* Untrimmed. Trimming leaves out a font with no character the ones ahead of it lack, which - * it works out by uniting every character set in turn, and each character is asked of them - * here anyway. */ - int result = 0; - const FontSet* sorted = fontconfig.fontSort(config, pattern, 0, nullptr, &result); - if (sorted == nullptr) - { - return; - } - - for (int index = 0; index < sorted->count; index++) - { - void* charset = nullptr; - if (fontconfig.patternGetCharSet(sorted->fonts[index], "charset", 0, &charset) == 0 && - charset != nullptr) - { - fonts.candidates.push_back({sorted->fonts[index], charset}); - } - } -#endif -} - -constexpr uint32_t Tag(char first, char second, char third, char fourth) -{ - return static_cast(static_cast(first)) << 24 | - static_cast(static_cast(second)) << 16 | - static_cast(static_cast(third)) << 8 | - static_cast(static_cast(fourth)); -} - -/* - * The scale that makes deview_init's size an em for a face: its ascent plus its descent over its - * em, which is what emScale is for the embedded font. Merged at ImGui's own scale it is each - * font's height that is matched, so one with tall lines comes out small and one with short lines - * large. An em is what the other two heads fall back at, and what leaves a CJK character, an em - * wide, inside the two cells the grid gives it. - * - * False for a face stb_truetype, which is what rasterises here, cannot draw from. Those are its - * own conditions, asked first. It wants outlines, as TrueType's or in a CFF table, and a variable - * font of the CFF2 kind has neither, which is one of the forms Noto CJK comes in. Asked here, on - * the finder's thread, the next font with the character is tried instead; left to ImGui, the - * refusal comes on the render thread as an error, and nothing else is tried. - */ -bool EmScaleOf(const std::vector& data, int face, float& scale) -{ - const size_t size = data.size(); - const auto u16 = [&data, size](size_t at) -> uint32_t - { - return at + 2 <= size - ? static_cast(data[at]) << 8 | static_cast(data[at + 1]) - : 0; - }; - const auto u32 = [&u16](size_t at) -> uint32_t { return u16(at) << 16 | u16(at + 2); }; - - /* A collection starts with where each of its faces does. */ - size_t start = 0; - if (u32(0) == Tag('t', 't', 'c', 'f')) - { - if (static_cast(face) >= u32(8)) - { - return false; - } - - start = u32(12 + static_cast(face) * 4); - } - else if (face != 0) - { - return false; - } - - size_t head = 0; - size_t hhea = 0; - bool cmap = false; - bool hmtx = false; - bool glyf = false; - bool loca = false; - bool cff = false; - const uint32_t tables = u16(start + 4); - for (uint32_t table = 0; table < tables; table++) - { - const size_t record = start + 12 + static_cast(table) * 16; - switch (u32(record)) - { - case Tag('h', 'e', 'a', 'd'): head = u32(record + 8); break; - case Tag('h', 'h', 'e', 'a'): hhea = u32(record + 8); break; - case Tag('c', 'm', 'a', 'p'): cmap = true; break; - case Tag('h', 'm', 't', 'x'): hmtx = true; break; - case Tag('g', 'l', 'y', 'f'): glyf = true; break; - case Tag('l', 'o', 'c', 'a'): loca = true; break; - case Tag('C', 'F', 'F', ' '): cff = true; break; - default: break; - } - } - - const int unitsPerEm = static_cast(u16(head + 18)); - const int ascent = static_cast(u16(hhea + 4)); - const int descent = static_cast(u16(hhea + 6)); - if (head == 0 || - hhea == 0 || - !cmap || - !hmtx || - !(cff || (glyf && loca)) || - unitsPerEm == 0 || - ascent <= descent) - { - return false; - } - - scale = static_cast(ascent - descent) / static_cast(unitsPerEm); - return true; -} - -bool ReadFont(const Fontconfig& fontconfig, const void* pattern, const std::pair& face, FoundFont& found) -{ - /* Outlines, and nothing else. A bitmap font has none to scale, and a colour font - which is - * what the emoji font usually is - keeps its pictures in tables stb_truetype does not read. - * Merged, it would draw every emoji as nothing, ahead of a font with plain ones. */ - int flag = 0; - if ((fontconfig.patternGetBool(pattern, "outline", 0, &flag) == 0 && flag == 0) || - (fontconfig.patternGetBool(pattern, "color", 0, &flag) == 0 && flag != 0)) - { - return false; - } - - std::ifstream file(face.first, std::ios::binary | std::ios::ate); - const std::streamoff length = file.tellg(); - /* ImGui takes a length as an int. */ - if (!file || - length <= 0 || - length > INT_MAX) - { - return false; - } - - std::vector data(static_cast(length)); - file.seekg(0); - if (!file.read(reinterpret_cast(data.data()), length) || - !EmScaleOf(data, face.second, found.scale)) - { - return false; - } - - found.data = std::move(data); - found.face = face.second; - return true; -} - -/* - * The first font in fontconfig's order to have a character and be one that can be drawn from, - * read whole. False when there is none, and when that font has been handed over already, since - * the character is then on its way with it. - */ -bool FindFont(SystemFonts& fonts, uint32_t codepoint, FoundFont& found) -{ - if (!fonts.opened) - { - OpenSystemFonts(fonts); - } - - const Fontconfig& fontconfig = fonts.fontconfig; - for (const SystemFonts::Candidate& candidate : fonts.candidates) - { - if (fontconfig.charSetHasChar(candidate.charset, codepoint) == 0) - { - continue; - } - - unsigned char* file = nullptr; - if (fontconfig.patternGetString(candidate.pattern, "file", 0, &file) != 0 || - file == nullptr) - { - continue; - } - - /* The face of a collection is the low half of the index. The high half names an instance - * of a variable font, which stb_truetype draws as its default whichever is asked for. */ - int index = 0; - fontconfig.patternGetInteger(candidate.pattern, "index", 0, &index); - const std::pair face(reinterpret_cast(file), index & 0xFFFF); - if (fonts.taken.count(face) != 0) - { - return false; - } - - if (fonts.unusable.count(face) != 0) - { - continue; - } - - if (ReadFont(fontconfig, candidate.pattern, face, found)) - { - fonts.taken.insert(face); - return true; - } - - fonts.unusable.insert(face); - } - - return false; -} - -void FindFonts(std::shared_ptr finder) -{ - SystemFonts fonts; - std::unique_lock lock(finder->mutex); - while (true) - { - finder->wake.wait(lock, [&finder] { return finder->stopping || !finder->wanted.empty(); }); - if (finder->stopping) - { - return; - } - - std::vector wanted; - wanted.swap(finder->wanted); - lock.unlock(); - - /* fontconfig and the disk, and nothing of ImGui's, which belongs to the other thread. */ - std::vector found; - for (const uint32_t codepoint : wanted) - { - FoundFont font; - if (FindFont(fonts, codepoint, font)) - { - found.push_back(std::move(font)); - } - } - - lock.lock(); - for (FoundFont& font : found) - { - finder->found.push_back(std::move(font)); - } - } -} - -void StopFontFinder() -{ - if (!state.finder) - { - return; - } - - { - const std::lock_guard lock(state.finder->mutex); - state.finder->stopping = true; - state.finder->wanted.clear(); - state.finder->found.clear(); - } - - state.finder->wake.notify_one(); - state.finder.reset(); -} - -/* - * Asks for a font for every character of a screen that the window's font cannot draw. Every - * string of the frame is in the one blob, so one pass over it covers the title, the queue and - * the tooltips with the rows. - */ -void FindFontsFor(const DeviewScreen* screen) -{ - if (state.font == nullptr || - screen->strings == nullptr || - state.fontData.size() >= fontLimit) - { - return; - } - - const char* text = reinterpret_cast(screen->strings); - const char* const end = text + screen->stringsLength; - std::vector wanted; - while (text < end) - { - /* ASCII, all of which the embedded font has, and which is nearly every byte of nearly - * every screen. */ - if (static_cast(*text) < 0x80) - { - text++; - continue; - } - - unsigned int codepoint = 0; - text += std::max(1, ImTextCharFromUtf8(&codepoint, text, end)); - if (codepoint > IM_UNICODE_CODEPOINT_MAX) - { - continue; - } - - if (state.asked.empty()) - { - state.asked.resize(static_cast(IM_UNICODE_CODEPOINT_MAX) + 1); - } - - if (state.asked[codepoint]) - { - continue; - } - - state.asked[codepoint] = true; - if (!state.font->IsGlyphInFont(static_cast(codepoint))) - { - wanted.push_back(codepoint); - } - } - - if (wanted.empty()) - { - return; - } - - if (!state.finder) - { - state.finder = std::make_shared(); - std::thread(FindFonts, state.finder).detach(); - } - - { - const std::lock_guard lock(state.finder->mutex); - state.finder->wanted.insert(state.finder->wanted.end(), wanted.begin(), wanted.end()); - } - - state.finder->wake.notify_one(); -} - -/* - * Merges what the finder has read into the window's font. At the top of a frame: ImGui takes a - * new source between frames, and drops what it had rasterised from the font as it does, so a - * character already drawn as missing is looked for again. - * - * Returns whether a font was merged, which is a frame to build: characters on the screen as the - * replacement glyph may have a glyph now. - */ -bool TakeFonts() -{ - if (!state.finder) - { - return false; - } - - std::vector found; - { - const std::lock_guard lock(state.finder->mutex); - found.swap(state.finder->found); - } - - bool merged = false; - ImGuiIO& io = ImGui::GetIO(); - for (FoundFont& font : found) - { - if (state.fontData.size() >= fontLimit) - { - return merged; - } - - state.fontData.push_back(std::move(font.data)); - std::vector& data = state.fontData.back(); - - /* Merged into the font added before it, which is the window's: see deview_init. */ - ImFontConfig config; - config.MergeMode = true; - config.FontNo = static_cast(font.face); - config.ExtraSizeScale = font.scale; - config.FontDataOwnedByAtlas = false; - - /* A font stb_truetype turns out not to read after all is left out. That is nothing for - * ImGui to assert or to write to its log, which is what it does with a font it is given - * and cannot use. */ - const bool asserts = io.ConfigErrorRecoveryEnableAssert; - const bool logs = io.ConfigErrorRecoveryEnableDebugLog; - io.ConfigErrorRecoveryEnableAssert = false; - io.ConfigErrorRecoveryEnableDebugLog = false; - const ImFont* added = io.Fonts->AddFontFromMemoryTTF( - data.data(), - static_cast(data.size()), - 0.0f, - &config); - io.ConfigErrorRecoveryEnableAssert = asserts; - io.ConfigErrorRecoveryEnableDebugLog = logs; - if (added == nullptr) - { - state.fontData.pop_back(); - continue; - } - - merged = true; - } - - return merged; -} - -ImFont* AddEmbeddedFont(const uint8_t* fontTtf, int32_t fontLength, float fontSize) -{ - /* ImGui frees font data with its own allocator, so hand it a copy rather than memory owned - * by the managed heap. */ - void* copy = IM_ALLOC(static_cast(fontLength)); - memcpy(copy, fontTtf, static_cast(fontLength)); - ImFontConfig config; - config.FontDataOwnedByAtlas = true; - config.ExtraSizeScale = emScale; - return ImGui::GetIO().Fonts->AddFontFromMemoryTTF(copy, fontLength, fontSize <= 0.0f ? 15.0f : fontSize, &config); -} - -/* ---- texture protocol (ImGuiBackendFlags_RendererHasTextures) ---- */ - -void UpdateTexture(ImTextureData* texture) -{ - if (texture->Status == ImTextureStatus_WantCreate) - { - const int format = texture->Format == ImTextureFormat_Alpha8 - ? RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE - : RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; - const unsigned int id = rlLoadTexture(texture->GetPixels(), texture->Width, texture->Height, format, 1); - texture->SetTexID(static_cast(id)); - texture->SetStatus(ImTextureStatus_OK); - return; - } - - if (texture->Status == ImTextureStatus_WantUpdates) - { - /* Re-uploading the whole texture keeps the source rows contiguous, which a sub rectangle - * of a wider buffer is not. Atlas updates only happen when new glyphs appear, so the extra - * bandwidth is irrelevant next to the copy that avoiding it would need. */ - const int format = texture->Format == ImTextureFormat_Alpha8 - ? RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE - : RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; - rlUpdateTexture( - static_cast(texture->TexID), - 0, - 0, - texture->Width, - texture->Height, - format, - texture->GetPixels()); - texture->SetStatus(ImTextureStatus_OK); - return; - } - - if (texture->Status == ImTextureStatus_WantDestroy) - { - rlUnloadTexture(static_cast(texture->TexID)); - texture->SetTexID(ImTextureID_Invalid); - texture->SetStatus(ImTextureStatus_Destroyed); - } -} - -/* ---- ImDrawData through rlgl ---- */ - -void RenderTriangles( - unsigned int count, - unsigned int indexStart, - unsigned int vertexOffset, - const ImVector& indices, - const ImVector& vertices, - ImTextureID textureId) -{ - if (count < 3) - { - return; - } - - rlBegin(RL_TRIANGLES); - rlSetTexture(static_cast(textureId)); - - for (unsigned int index = 0; index <= count - 3; index += 3) - { - for (unsigned int corner = 0; corner < 3; corner++) - { - /* Plus the command's own vertex offset. ImDrawIdx is sixteen bits, so a draw list - * that runs past 65535 vertices - a maximised 4K window of dense long lines gets - * there - is split by ImGui into commands whose indices restart from a base recorded - * here. Without adding it the indices wrapped and the panes drew scrambled, and in a - * release build, with IM_ASSERT compiled out, nothing said so. */ - const ImDrawVert& vertex = vertices[vertexOffset + indices[indexStart + index + corner]]; - const ImColor colour = ImColor(vertex.col); - rlColor4f(colour.Value.x, colour.Value.y, colour.Value.z, colour.Value.w); - rlTexCoord2f(vertex.uv.x, vertex.uv.y); - rlVertex2f(vertex.pos.x, vertex.pos.y); - } - } - - rlEnd(); -} - -void RenderDrawData(ImDrawData* drawData) -{ - for (ImTextureData* texture : drawData->Textures ? *drawData->Textures : ImVector()) - { - if (texture->Status != ImTextureStatus_OK) - { - UpdateTexture(texture); - } - } - - rlDrawRenderBatchActive(); - rlDisableBackfaceCulling(); - - /* The height of what is being drawn to, which is not the window's for a capture: that draws to - * a render texture of its own size, and BeginTextureMode changes the target without changing - * what GetScreenHeight reports. */ - const float height = drawData->DisplaySize.y; - for (int list = 0; list < drawData->CmdListsCount; list++) - { - const ImDrawList* commands = drawData->CmdLists[list]; - for (const ImDrawCmd& command : commands->CmdBuffer) - { - if (command.UserCallback != nullptr) - { - command.UserCallback(commands, &command); - continue; - } - - /* ImGui clips in framebuffer space with the origin top left; rlgl scissors from the - * bottom left. */ - rlEnableScissorTest(); - rlScissor( - static_cast(command.ClipRect.x), - static_cast(height - command.ClipRect.w), - static_cast(command.ClipRect.z - command.ClipRect.x), - static_cast(command.ClipRect.w - command.ClipRect.y)); - - RenderTriangles( - command.ElemCount, - command.IdxOffset, - command.VtxOffset, - commands->IdxBuffer, - commands->VtxBuffer, - command.GetTexID()); - - rlDrawRenderBatchActive(); - } - } - - rlSetTexture(0); - rlDisableScissorTest(); - rlEnableBackfaceCulling(); -} - -/* ---- input ---- */ - -/* - * `elapsed` is the time since the present before this one began, built or not, which is a frame's - * length while frames are coming. Not the time since the last frame ImGui was given: after a - * window has been left alone for an hour, that would have a tooltip's delay, and everything else - * ImGui times, over in the first frame. - */ -void PumpInput(float elapsed) -{ - ImGuiIO& io = ImGui::GetIO(); - io.DisplaySize = ImVec2(static_cast(GetScreenWidth()), static_cast(GetScreenHeight())); - io.DeltaTime = elapsed; - - /* Nowhere, for a pointer that has left the window: see State::pointerInside. */ - const Vector2 mouse = GetMousePosition(); - if (state.pointerGone) - { - io.AddMousePosEvent(-FLT_MAX, -FLT_MAX); - } - else - { - io.AddMousePosEvent(mouse.x, mouse.y); - } - - /* Every press and release since the last frame built, in the order they came. */ - for (const State::Press& press : state.presses) - { - io.AddMouseButtonEvent(press.button, press.down); - } - - state.presses.clear(); - - if (state.wheelAcross != 0.0f || - state.wheelDown != 0.0f) - { - io.AddMouseWheelEvent(state.wheelAcross, state.wheelDown); - state.wheelAcross = 0.0f; - state.wheelDown = 0.0f; - } -} - -/* The one character a string is, or zero for a string that is none or several. */ -unsigned int OnlyCharacter(const char* text) -{ - if (text == nullptr || - *text == '\0') + else { - return 0; + entry.decoding = true; + loading = true; + RequestDecode(path, length, written, reduced); } - unsigned int codepoint = 0; - const int length = ImTextCharFromUtf8(&codepoint, text, nullptr); - return length > 0 && text[length] == '\0' ? codepoint : 0; + const auto inserted = state.pictures.emplace(path, entry).first; + return inserted->second.loaded ? &inserted->second : nullptr; } -/* Whether the layout in use has a key that types a letter, unshifted. Asked of every key GLFW - * names, which are the ones that type something, by their own numbers. */ -bool LayoutTypes(unsigned int letter) +/* + * Drops every picture the frame just drawn did not ask for, once the frame has been rendered and + * the draw data naming those textures has been consumed. + * + * Otherwise an entry went only when its own path was asked for again and had changed or gone, so + * every image reviewed in a session stayed decoded, on the GPU, until the session ended. A picture + * scrolled or navigated back to is decoded again, which is one file read. + */ +void ForgetUnusedPictures() { - for (int key = KEY_APOSTROPHE; key <= 162; key++) + for (auto entry = state.pictures.begin(); entry != state.pictures.end();) { - if (OnlyCharacter(glfwGetKeyName(key, 0)) == letter) + if (entry->second.used) { - return true; + entry->second.used = false; + ++entry; + continue; } - } - return false; -} + if (entry->second.loaded) + { + UnloadTexture(entry->second.texture); + } -/* Whether the layout in use has a key that types any of the letters a to z, unshifted. */ -bool LayoutIsLatin() -{ - for (int key = KEY_APOSTROPHE; key <= 162; key++) - { - const unsigned int typed = OnlyCharacter(glfwGetKeyName(key, 0)); - if (typed >= 'a' && - typed <= 'z') + if (entry->second.decoding || + entry->second.reducing) { - return true; + CancelDecode(entry->first); } - } - return false; + entry = state.pictures.erase(entry); + } } /* - * Which character a key press is to be read as, in lower case, or zero for none. - * - * What it typed, where it typed something. While control is held nothing is typed, and it is what - * the key types unshifted on the layout in use, which GLFW will say: read by position, as a chord - * was, Ctrl+A on AZERTY was the key labelled Q, and Ctrl+C on Dvorak the one labelled J. + * The checkerboard's texture, or null on a context that would not make one, where a picture is + * drawn over the lighter of the two tones instead. * - * A layout with no Latin letters has neither. Russian, Greek, Hebrew and Arabic type their own - * letters from the keys a US keyboard has A to Z on, so not one of this head's letters could be - * typed there, and its user had the footer's buttons and nothing else. Then the key is read as - * the letter a US keyboard has in its place, which is what such a keyboard has printed on it - * beside its own. Only where no key of the layout - * types that letter: a layout that has it somewhere else keeps it there and nowhere else, or a - * Turkish keyboard's dotless i, which sits where a US keyboard has R, would toggle the drawing. + * Sampled as its two tones and nothing between them, and repeating, which is what lets one quad + * the size of the picture stand for every square behind it. */ -unsigned int LetterOf(const State::KeyPress& press) +const Texture2D* Checker() { - const unsigned int typed = press.character != 0 - ? press.character - : OnlyCharacter(glfwGetKeyName(press.key, press.scancode)); - if (typed == 0) + if (!state.checkerMade) { - return 0; - } + state.checkerMade = true; - if (typed < 0x80) - { - /* Which letter, and nothing of its case. A capital says that Shift or Caps Lock was on and - * not which of them, so read as typed Caps Lock turned a plain A into accept all - every - * pending snapshot written into source, with nothing asked first, by the key that accepts - * one - and left D, V, Q, N, P, M, R and J doing nothing. */ - return typed >= 'A' && typed <= 'Z' ? typed + ('a' - 'A') : typed; + /* Light where the row and the column are both even or both odd, and dark elsewhere. */ + unsigned char pixels[] = { + 64, 64, 64, 255, 48, 48, 48, 255, + 48, 48, 48, 255, 64, 64, 64, 255}; + Image image{}; + image.data = pixels; + image.width = 2; + image.height = 2; + image.mipmaps = 1; + image.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; + state.checker = LoadTextureFromImage(image); + if (IsTextureValid(state.checker)) + { + SetTextureFilter(state.checker, TEXTURE_FILTER_POINT); + SetTextureWrap(state.checker, TEXTURE_WRAP_REPEAT); + } } - if (press.key >= KEY_A && - press.key <= KEY_Z) + return IsTextureValid(state.checker) ? &state.checker : nullptr; +} + +void UnloadPictures() +{ + StopDecoder(); + for (auto& entry : state.pictures) { - const unsigned int letter = static_cast(press.key - KEY_A) + 'a'; - if (!LayoutTypes(letter)) + if (entry.second.loaded) { - return letter; + UnloadTexture(entry.second.texture); } } - /* - * And the five keys that are not letters, on a layout with no Latin letters at all: Russian - * and Arabic type letters of their own where a US keyboard has [ and ], so a paged document - * had no key for its pages there, and Persian types its own digits, so zoom had no key to - * put it back. Only on such a layout. A German keyboard types u with a diaeresis from the - * key where [ is and has [ somewhere else, and reading it by position would give a letter - * of its user's own language a command. - */ - if (!LayoutIsLatin()) + state.pictures.clear(); + + if (IsTextureValid(state.checker)) { - switch (press.key) - { - case KEY_LEFT_BRACKET: return '['; - case KEY_RIGHT_BRACKET: return ']'; - case KEY_ZERO: return '0'; - case KEY_MINUS: return '-'; - case KEY_EQUAL: return '='; - default: break; - } + UnloadTexture(state.checker); } - return 0; + state.checker = Texture2D{}; + state.checkerMade = false; } +/* ---- fonts ---- */ + +/* ---- input ---- */ + /* * Whether a command goes on for as long as its key is held, at the rate the window system repeats * a key: the ones that move through what is being read, and no other. @@ -2495,13 +1233,13 @@ bool Repeats(int key) /* What a key going down asks for, or none for a key this head has no use for, whether it is the * press or one of its repeats: see KeyOf. */ -int Pressed(const State::KeyPress& press) +int Pressed(const ph::KeyPress& press) { const unsigned int letter = LetterOf(press); /* Super as well as control, so a macOS keyboard driving the Linux build through a remote * session still copies with the chord its user has in their fingers. */ - if ((press.mods & (glfwControl | glfwSuper)) != 0) + if ((press.mods & (ph::ModControl | ph::ModSuper)) != 0) { if (press.repeated) { @@ -2539,7 +1277,7 @@ int Pressed(const State::KeyPress& press) } /* The key itself held down, rather than read off the case of what was typed: see LetterOf. */ - const bool shift = (press.mods & glfwShift) != 0; + const bool shift = (press.mods & ph::ModShift) != 0; /* Letters by the character typed rather than by key position. raylib's key codes are * positions on a US layout, so on AZERTY the key labelled Q reported KEY_A and accepted - a @@ -2588,7 +1326,7 @@ int Pressed(const State::KeyPress& press) /* What one key press asks for, or none: a key this head has no use for, or a repeat of one that * acts once however long it is held. */ -int KeyOf(const State::KeyPress& press) +int KeyOf(const ph::KeyPress& press) { const int key = Pressed(press); return press.repeated && !Repeats(key) ? DEVIEW_KEY_NONE : key; @@ -2602,10 +1340,9 @@ int KeyOf(const State::KeyPress& press) int ReadKey(bool& escape) { escape = false; - while (!state.keys.empty()) + ph::KeyPress press; + while (ph::PopKey(press)) { - const State::KeyPress press = state.keys.front(); - state.keys.pop_front(); const int key = KeyOf(press); if (key != DEVIEW_KEY_NONE) { @@ -3331,128 +2068,6 @@ bool UpdatePan(const DeviewScreen* screen) return true; } -/* - * One line of text in no more than a width, ending in an ellipsis where it was cut short, so it - * reads as cut rather than as all there was. It takes the place in the layout the text would. - */ -void TextWithin(const char* begin, const char* end, float width) -{ - const float room = std::max(width, 0.0f); - const ImVec2 size = ImGui::CalcTextSize(begin, end); - const ImVec2 position = ImGui::GetCursorScreenPos(); - const ImVec2 limit(position.x + room, position.y + size.y); - ImGui::Dummy(ImVec2(std::min(size.x, room), size.y)); - ImGui::RenderTextEllipsis(ImGui::GetWindowDrawList(), position, limit, limit.x, begin, end, &size); -} - -/* - * ImGui reads a label for more than its text. From "##" on it is the item's identity and is not - * drawn, which is how two buttons that say the same thing are told apart, and it is so for every - * label an item takes: a queue row, a menu item, a button, a pane's header. Those are a file's - * name, a test's, a solution's, and a name with "##" in it was cut short there: "Notes##2.txt" in - * the queue was "Notes". - * - * A label is never an identity here, since every item is given one by its index. So one with the - * mark in it is drawn by this side, where the item would have drawn it, over an item that is given - * no text at all. One without it is left to the item, which is every label there has been. - */ -bool Marked(const std::string& label) -{ - return label.find("##") != std::string::npos; -} - -void DrawLabel(const ImVec2& position, const std::string& label) -{ - ImGui::GetWindowDrawList()->AddText( - position, - ImGui::GetColorU32(ImGuiCol_Text), - label.data(), - label.data() + label.size()); -} - -bool SelectableLabel(const std::string& label, bool selected = false) -{ - if (!Marked(label)) - { - return ImGui::Selectable(label.c_str(), selected); - } - - /* Where Selectable puts its text: at the cursor, on the line's baseline. */ - const ImGuiWindow* window = ImGui::GetCurrentWindow(); - const ImVec2 position(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset); - const bool pressed = ImGui::Selectable("##label", selected); - DrawLabel(position, label); - return pressed; -} - -/* The width of a label's text, all of it. */ -float LabelWidth(const std::string& label) -{ - return ImGui::CalcTextSize(label.data(), label.data() + label.size()).x; -} - -bool ButtonLabel(const std::string& label) -{ - if (!Marked(label)) - { - return ImGui::Button(label.c_str()); - } - - /* The size Button gives itself from its text, and the text where it puts it: inside the - * frame's padding. */ - const ImGuiStyle& style = ImGui::GetStyle(); - const bool pressed = ImGui::Button( - "##label", - ImVec2( - LabelWidth(label) + style.FramePadding.x * 2.0f, - ImGui::GetTextLineHeight() + style.FramePadding.y * 2.0f)); - const ImVec2 corner = ImGui::GetItemRectMin(); - DrawLabel(ImVec2(corner.x + style.FramePadding.x, corner.y + style.FramePadding.y), label); - return pressed; -} - -/* - * The header row of the panes' table, as TableHeadersRow lays it out, for a table with a marked - * header: that one is given no text and has its own drawn over it, cut short with an ellipsis at - * the column's edge as the table would have cut it. - */ -void HeadersRow(const std::string* headers, int first, int columns) -{ - ImGui::TableNextRow(ImGuiTableRowFlags_Headers, ImGui::TableGetHeaderRowHeight()); - for (int column = 0; column < columns; column++) - { - if (!ImGui::TableSetColumnIndex(column)) - { - continue; - } - - ImGui::PushID(column); - if (column >= first && - Marked(headers[column - first])) - { - const std::string& header = headers[column - first]; - const ImVec2 position = ImGui::GetCursorScreenPos(); - ImGui::TableHeader(""); - const float edge = ImGui::TableGetCellBgRect(ImGui::GetCurrentTable(), column).Max.x; - const ImVec2 size = ImGui::CalcTextSize(header.data(), header.data() + header.size()); - ImGui::RenderTextEllipsis( - ImGui::GetWindowDrawList(), - position, - ImVec2(edge, position.y + size.y), - edge, - header.data(), - header.data() + header.size(), - &size); - } - else - { - ImGui::TableHeader(ImGui::TableGetColumnName(column)); - } - - ImGui::PopID(); - } -} - /* * How the footer is laid out: its buttons, on as many rows as the window's width makes of them, * and the status line, right aligned beside the last of those rows or on a line of its own. @@ -4117,203 +2732,6 @@ bool Changed(const DeviewScreen* screen) return true; } -/* - * Whether anything has come from the pointer, the keys or the window since the last present: what - * raylib gathered when it last read the window system's events, which is what the frame about to - * be built would be given. - * - * A key is not something a frame is built from, since ImGui is given none: what a key does comes - * back from the managed side as a different screen. It counts all the same, because a window is - * only left alone when nothing at all is happening to it. By the press rather than by what is - * down, since raylib reports Caps Lock and Num Lock as held for as long as they are on. - * - * The buttons, the wheel and the keys are asked of what GLFW's callbacks kept rather than of - * raylib, for the reason they are kept: see State::presses. - */ -bool Arrived() -{ - bool arrived = false; - - const Vector2 pointer = GetMousePosition(); - if (pointer.x != state.pointer.x || - pointer.y != state.pointer.y) - { - state.pointer = pointer; - arrived = true; - } - - /* A press or a release waiting to be handed to ImGui, a button held, or one of a press and - * release handed over together that ImGui is keeping for the frame after. */ - if (!state.presses.empty() || - state.held[0] || - state.held[1] || - state.held[2] || - state.context->InputEventsQueue.Size > 0) - { - arrived = true; - } - - if (state.wheelAcross != 0.0f || - state.wheelDown != 0.0f) - { - arrived = true; - } - - /* The pointer leaving the window, or coming back to where it left from: raylib's position - * for it is the same before and after. */ - const bool gone = - !state.pointerInside && - !state.held[0] && - !state.held[1] && - !state.held[2]; - if (gone != state.pointerGone) - { - state.pointerGone = gone; - arrived = true; - } - - if (state.keyed) - { - state.keyed = false; - arrived = true; - } - - const int width = GetScreenWidth(); - const int height = GetScreenHeight(); - const bool hidden = IsWindowState(FLAG_WINDOW_HIDDEN); - const bool minimised = IsWindowMinimized(); - const bool focused = IsWindowFocused(); - if (width != state.width || - height != state.height || - hidden != state.hidden || - minimised != state.minimised) - { - /* A window of another size has another framebuffer, and one that was not on the screen - * was not being kept by anything. */ - state.stale = true; - arrived = true; - } - - if (focused != state.focused) - { - arrived = true; - } - - state.width = width; - state.height = height; - state.hidden = hidden; - state.minimised = minimised; - state.focused = focused; - return arrived; -} - -uint64_t Mix(uint64_t hash, const void* data, size_t size) -{ - const unsigned char* bytes = static_cast(data); - for (; size >= sizeof(uint64_t); bytes += sizeof(uint64_t), size -= sizeof(uint64_t)) - { - uint64_t word; - memcpy(&word, bytes, sizeof word); - hash = (hash ^ word) * 0x9E3779B97F4A7C15ull; - hash ^= hash >> 29; - } - - for (; size > 0; bytes++, size--) - { - hash = (hash ^ *bytes) * 0x100000001B3ull; - } - - return hash; -} - -/* - * Everything RenderDrawData would draw a frame from, reduced to one number: the size drawn at, and - * for every draw list its vertices, its indices and what each command clips to and draws with. - * - * Two frames with the same number are the same pixels, short of a texture's content having changed - * behind its name, which is asked separately. That is what lets a frame be built and then not - * drawn: it is held against the frame on the screen, and a frame that would put the same pixels - * there again is a full window for a software rasteriser to fill, and for the window system to - * copy, to no effect. Sixty four bits, so two frames that differ share a number about as often as - * never, and a pass over the vertices costs a small part of what drawing them would. - */ -uint64_t Fingerprint(const ImDrawData* drawData) -{ - uint64_t hash = 0xCBF29CE484222325ull; - hash = Mix(hash, &drawData->DisplaySize, sizeof drawData->DisplaySize); - for (int list = 0; list < drawData->CmdListsCount; list++) - { - const ImDrawList* commands = drawData->CmdLists[list]; - hash = Mix( - hash, - commands->VtxBuffer.Data, - static_cast(commands->VtxBuffer.Size) * sizeof(ImDrawVert)); - hash = Mix( - hash, - commands->IdxBuffer.Data, - static_cast(commands->IdxBuffer.Size) * sizeof(ImDrawIdx)); - for (const ImDrawCmd& command : commands->CmdBuffer) - { - const uint64_t drawn[] = { - static_cast(command.GetTexID()), - command.VtxOffset, - command.IdxOffset, - command.ElemCount}; - hash = Mix(hash, &command.ClipRect, sizeof command.ClipRect); - hash = Mix(hash, drawn, sizeof drawn); - } - } - - return hash; -} - -/* - * Whether ImGui is waiting for a texture to be made, updated or destroyed, which RenderDrawData - * does as it draws: the font atlas, when a character is drawn for the first time. Such a frame is - * drawn whatever its fingerprint, so the atlas on the GPU never falls behind the one ImGui holds. - */ -bool TexturesWaiting(const ImDrawData* drawData) -{ - if (drawData->Textures == nullptr) - { - return false; - } - - for (const ImTextureData* texture : *drawData->Textures) - { - if (texture->Status != ImTextureStatus_OK) - { - return true; - } - } - - return false; -} - -/* - * The end of every frame, drawn or not: what EndDrawing does once a frame is on the screen, which - * it can no longer be left to do, since it only does it for a frame it has put there. - * - * It waits out what is left of the frame, counted from when the last one's wait ended, so the - * managed loop turns sixty times a second whatever a turn drew: without the wait a window with - * nothing to draw would spin a core. And then it reads the window system's events, last, so that - * what deview_poll_input reports and what the next frame is built from are as fresh as they can - * be. That is the order raylib kept them in. - */ -void Rest() -{ - const double left = frameSeconds - (GetTime() - state.ended); - if (left > 0.0) - { - /* Never longer than a frame, whatever the clock has done. */ - WaitTime(std::min(left, frameSeconds)); - } - - state.characterFollows = false; - PollInputEvents(); - state.ended = GetTime(); -} - void ApplyStyle() { ImGuiStyle& style = ImGui::GetStyle(); @@ -4349,131 +2767,54 @@ int32_t deview_init( return 1; } - SetTraceLogLevel(LOG_WARNING); - /* No MSAA. ImGui draws axis aligned quads with pre-antialiased glyph textures, so multisampling - * buys nothing visually, and it is a real source of difference between a GPU and the software - * rasteriser the pixel snapshots are pinned to. */ - /* ALWAYS_RUN because WindowShouldClose waits on events while the window is minimised, and - * that call is inside deview_present: without it the managed loop stops being pumped the - * moment the window is minimised, so a snapshot arriving after that is accepted by the - * listener and never shown. */ - unsigned int flags = FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_ALWAYS_RUN; - if (hidden != 0) + /* Made hidden, placed where it was left and then shown, by the runtime: see ph::OpenWindow. A + * viewer started behind a tray comes up where it was left too, which it did not when the + * placement was only used for a window made visible. */ + ph::WindowOptions options; + options.width = width; + options.height = height; + options.title = title == nullptr ? "DiffEngineViewer" : title; + options.hidden = hidden != 0; + ph::Placement remembered; + if (state.placed) { - flags |= FLAG_WINDOW_HIDDEN; + remembered.x = state.placement.x; + remembered.y = state.placement.y; + remembered.width = state.placement.width; + remembered.height = state.placement.height; + remembered.maximized = state.placement.maximized != 0; + options.placement = &remembered; } - /* At the size it was left, which is known before there is a window to ask about monitors. Where - * it goes is decided below, once there is. */ - const bool sized = state.placed && - hidden == 0 && - state.placement.width > 0 && - state.placement.height > 0; - SetConfigFlags(flags); - InitWindow( - sized ? state.placement.width : width, - sized ? state.placement.height : height, - title == nullptr ? "DiffEngineViewer" : title); - if (!IsWindowReady()) + if (!ph::OpenWindow(options)) { return 0; } - void* handle = glfwGetCurrentContext(); - - /* Not under 1: a desktop set smaller than a pixel to the pixel is not asking for text below - * the size it is legible at. And not a number that is no scale at all. */ - float across = 1.0f; - float down = 1.0f; - glfwGetWindowContentScale(handle, &across, &down); - state.scale = across > 1.0f && across <= 8.0f ? across : 1.0f; state.cellWidth = 0.0f; state.lineHeight = 0.0f; - - state.tracked = false; - if (!sized && - state.scale != 1.0f) - { - /* The size asked for is in the pixels of an ordinary display. As much of it at this - * display's scale as its monitor has room for, and in the middle of that monitor, which is - * where raylib put the window it has just made at the size it was given. There is no - * asking the scale before there is a window to ask it of. */ - const int monitor = GetCurrentMonitor(); - const int wide = std::min(static_cast(static_cast(width) * state.scale), GetMonitorWidth(monitor)); - const int tall = std::min(static_cast(static_cast(height) * state.scale), GetMonitorHeight(monitor)); - const Vector2 origin = GetMonitorPosition(monitor); - SetWindowSize(wide, tall); - SetWindowPosition( - static_cast(origin.x) + (GetMonitorWidth(monitor) - wide) / 2, - static_cast(origin.y) + (GetMonitorHeight(monitor) - tall) / 2); - } - - if (sized) - { - if (OnAMonitor(state.placement)) - { - SetWindowPosition(state.placement.x, state.placement.y); - } - - /* What it restores to, noted before maximising takes the chance away. */ - TrackPlacement(); - if (state.placement.maximized != 0) - { - MaximizeWindow(); - } - } - - SetExitKey(KEY_NULL); - - /* No SetTargetFPS: raylib only holds to it inside EndDrawing, which is no longer called. The - * frame is ended, and waited out, by Rest. And nothing about a window that came before this - * one says anything about this one, whose clock has started again from nothing. */ - glfwSetWindowRefreshCallback(handle, WindowRefreshed); - state.raylibCrossing = glfwSetCursorEnterCallback(handle, PointerCrossed); - state.pointerInside = true; - state.pointerGone = false; - state.raylibButton = glfwSetMouseButtonCallback(handle, ButtonChanged); - state.raylibScroll = glfwSetScrollCallback(handle, WheelTurned); - state.raylibKey = glfwSetKeyCallback(handle, KeyChanged); - state.raylibCharacter = glfwSetCharCallback(handle, CharacterTyped); - state.presses.clear(); - state.keys.clear(); - state.held[0] = state.held[1] = state.held[2] = false; - state.wheelAcross = 0.0f; - state.wheelDown = 0.0f; - state.wheelNotches = 0.0f; - state.scrollRemainder = 0.0f; - state.characterFollows = false; - state.keyed = false; state.presented.clear(); state.watched.clear(); - state.shown = 0; - state.stale = true; - state.settled = 0; state.tooltipDue = false; - state.began = 0.0; - state.ended = 0.0; - state.pointer = Vector2{}; - state.width = 0; - state.height = 0; state.context = ImGui::CreateContext(); ImGui::SetCurrentContext(state.context); ImGuiIO& io = ImGui::GetIO(); io.BackendFlags |= ImGuiBackendFlags_RendererHasTextures; /* Declared, so ImGui splits a long draw list into commands with a vertex offset rather than - * refusing to let one grow past what a sixteen bit index can address. RenderTriangles applies - * the offset. */ + * refusing to let one grow past what a sixteen bit index can address. ph::RenderDrawData + * applies the offset. */ io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; io.IniFilename = nullptr; io.LogFilename = nullptr; ApplyStyle(); - if (state.scale != 1.0f) + const float scale = ph::WindowScale(); + if (scale != 1.0f) { /* The window's context alone. A capture makes its own, which is left at 1. */ ImGuiStyle& style = ImGui::GetStyle(); - style.ScaleAllSizes(state.scale); - style.FontScaleDpi = state.scale; + style.ScaleAllSizes(scale); + style.FontScaleDpi = scale; } if (fontTtf != nullptr && fontLength > 0) @@ -4481,12 +2822,15 @@ int32_t deview_init( /* * Twice. The first is the atlas's default, and so what a capture's context draws with: * the embedded font and nothing else, on every machine. The second is the window's, which - * the machine's fonts are merged into, and it is added last because a merge goes into - * the font added before it. See State::font. + * the machine's fonts are merged into, and it is added last because a merge goes into the + * font added before it. So a capture is the same picture on a machine with every font + * installed and on one with none, and what the two draw from the embedded font is the + * same glyphs, so the captures still describe the window. */ - AddEmbeddedFont(fontTtf, fontLength, fontSize); - state.font = AddEmbeddedFont(fontTtf, fontLength, fontSize); - io.FontDefault = state.font; + ph::AddEmbeddedFont(fontTtf, fontLength, fontSize, emScale); + ImFont* font = ph::AddEmbeddedFont(fontTtf, fontLength, fontSize, emScale); + io.FontDefault = font; + ph::UseSystemFonts(font); } ResetInput(); @@ -4502,22 +2846,15 @@ int32_t deview_present(const DeviewScreen* screen) return 0; } - if (WindowShouldClose()) + /* Reported once to the managed side, which decides between hiding and exiting depending on + * whether a tray is running. Cleared at once, so a hidden window can be shown again rather + * than closing itself on its first frame back. */ + if (ph::TakeCloseRequest()) { - /* Reported once to the managed side, which decides between hiding and exiting depending - * on whether a tray is running. Cleared immediately so a hidden window can be shown again - * rather than closing itself on its first frame back. */ state.input.closeRequested = 1; - ClearCloseFlag(); } - ImGui::SetCurrentContext(state.context); - - const double now = GetTime(); - const float elapsed = state.began > 0.0 && now > state.began - ? static_cast(now - state.began) - : static_cast(frameSeconds); - state.began = now; + const float elapsed = ph::BeginPresent(state.context); /* * What has arrived since the last present. Each of these is asked every time, whatever the @@ -4528,30 +2865,27 @@ int32_t deview_present(const DeviewScreen* screen) */ bool arrived = TakeDecoded(); /* And its fonts, for that reason and because a font can only be added between frames. */ - arrived = TakeFonts() || arrived; + arrived = ph::TakeFonts() || arrived; const bool changed = Changed(screen); arrived = changed || arrived; - arrived = Arrived() || arrived; + arrived = ph::Arrived() || arrived; arrived = arrived || state.tooltipDue; /* - * A hidden window is not built for and not drawn into, whatever has arrived. It was, each time - * its screen changed, and a viewer hidden behind a tray is handed another screen by every - * arrival in its queue: the whole queue laid out and the whole window filled, for nobody. + * A hidden or minimised window is not built for and not drawn into, whatever has arrived. It + * was, each time its screen changed, and a viewer hidden behind a tray is handed another screen + * by every arrival in its queue: the whole queue laid out and the whole window filled, for + * nobody. * * What arrived has still been taken in, above, and the fonts for what the screen holds are * still asked for, so that they are there by the time it is shown. Showing it is itself an * arrival, and marks the window stale, so the first present after it builds the screen it is - * handed and draws it: see deview_set_hidden and Arrived. - * - * A minimised window the same, which was still built and drawn whenever its screen changed. - * Nothing of it is on the screen either, and coming back from the taskbar is an arrival that - * marks it stale as being shown is. + * handed and draws it. * * Not before a frame has been built for the window at all. The grid the managed side slices * its rows by is measured from one, and ImGui has no font to measure with until its first. */ - if ((state.hidden || state.minimised) && + if (ph::Hidden() && state.cellWidth > 0.0f) { if (changed) @@ -4559,9 +2893,8 @@ int32_t deview_present(const DeviewScreen* screen) FindFontsFor(screen); } - Rest(); + ph::Rest(); MeasureGrid(); - TrackPlacement(); return 1; } @@ -4571,29 +2904,25 @@ int32_t deview_present(const DeviewScreen* screen) * already there, and under a software rasteriser or over a remote session each of those is the * whole window filled and copied again. * - * Left alone only once it is certain the next frame would be the one on the screen. The screen - * handed over is the last one byte for byte, nothing has come from the pointer, the keys, the - * window system, the decoder or the font finder, no tooltip is waiting to appear, the files - * behind the pictures are as they were, and a second of frames built since any of that last - * changed have all come out as the frame on the screen. That last is what a spinner fails, - * and anything else that moves by itself. + * Left alone only once it is certain the next frame would be the one on the screen: see + * ph::CanLeaveAlone. And the files behind the pictures are as they were, which only this head + * can say. */ - if (!arrived && - !state.stale && - state.settled >= settledFrames) + if (ph::CanLeaveAlone(arrived)) { if (!PicturesRewritten()) { - Rest(); + ph::Rest(); MeasureGrid(); - TrackPlacement(); return 1; } arrived = true; } - PumpInput(elapsed); + /* No keys for ImGui: every key is read here and handed to the managed side, and none of this + * head's widgets takes text. */ + ph::FeedImGui(elapsed, false); FindFontsFor(screen); state.watched.clear(); state.tooltipDue = false; @@ -4601,52 +2930,14 @@ int32_t deview_present(const DeviewScreen* screen) BuildFrame(screen); ImGui::Render(); - /* ImGui only records the cursor it wants. Showing it is the backend's job, and the splitter is - * the one thing here that asks for anything but an arrow. */ - const int cursor = ImGui::GetMouseCursor() == ImGuiMouseCursor_ResizeEW - ? MOUSE_CURSOR_RESIZE_EW - : MOUSE_CURSOR_DEFAULT; - if (cursor != state.cursor) - { - state.cursor = cursor; - SetMouseCursor(cursor); - } - - /* - * Drawn only if it is not the frame on the screen: the pointer crossing a pane, a key that did - * nothing and the frames that follow any change mostly come out as the frame before them. - * Building one costs a fraction of drawing it, and is what all of ImGui's own state is kept - * moving by, so those frames are built and not drawn rather than not built. - */ - ImDrawData* drawData = ImGui::GetDrawData(); - const uint64_t frame = Fingerprint(drawData); - if (state.stale || - frame != state.shown || - TexturesWaiting(drawData)) - { - BeginDrawing(); - ClearBackground(Color{24, 24, 24, 255}); - RenderDrawData(drawData); - rlDrawRenderBatchActive(); - SwapScreenBuffer(); - state.shown = frame; - state.stale = false; - state.settled = 0; - } - else if (arrived) - { - state.settled = 0; - } - else if (state.settled < settledFrames) - { - state.settled++; - } - - Rest(); + /* Drawn only if it is not the frame on the screen: building one costs a fraction of drawing + * it, and is what all of ImGui's own state is kept moving by, so those frames are built and + * not drawn rather than not built. */ + ph::Show(ImGui::GetDrawData(), 24, 24, 24, arrived); + ph::Rest(); ForgetUnusedPictures(); MeasureGrid(); - TrackPlacement(); return 1; } @@ -4672,13 +2963,9 @@ void deview_poll_input(DeviewInput* input) state.input.menuClosed = 1; } - /* Whole notches, keeping the fraction. A touchpad sends a fraction of one per frame and - * truncating each frame on its own threw every one of them away. Every wheel message since - * the last poll, added up: read off raylib it was the last of them alone. */ - state.scrollRemainder += state.wheelNotches; - state.wheelNotches = 0.0f; - const int32_t notches = static_cast(state.scrollRemainder); - state.scrollRemainder -= static_cast(notches); + /* Every wheel message since the last poll, in whole notches with the fraction kept: see + * ph::TakeWheelNotches. */ + const int32_t notches = ph::TakeWheelNotches(); /* Over a picture the wheel is for the picture, and anywhere with control held, as it is in * everything else that shows one. Everywhere else it scrolls the rows, as it always has. */ @@ -4697,10 +2984,8 @@ void deview_poll_input(DeviewInput* input) MeasureGrid(); - /* As it is now, like the grid. Nothing of a window that is hidden or minimised is on the - * screen. One behind another window is not known to be: X11 says nothing of it that GLFW - * passes on. */ - state.input.unseen = IsWindowState(FLAG_WINDOW_HIDDEN) || IsWindowMinimized() ? 1 : 0; + /* As it is now, like the grid: see ph::Unseen. */ + state.input.unseen = ph::Unseen() ? 1 : 0; } *input = state.input; @@ -4727,9 +3012,9 @@ int32_t deview_capture(const DeviewScreen* screen, int32_t width, int32_t height ImGui::SetCurrentContext(capture); ImGuiIO& io = ImGui::GetIO(); io.BackendFlags |= ImGuiBackendFlags_RendererHasTextures; - /* As the window's context declares it, and for its reason: both are drawn by RenderTriangles. - * Without it a capture of more than 65,535 vertices in one draw list, which dense text at 4K - * comes to, had its indices wrap, and came out scrambled. */ + /* As the window's context declares it, and for its reason. Without it a capture of more than + * 65,535 vertices in one draw list, which dense text at 4K comes to, had its indices wrap, and + * came out scrambled. */ io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset; io.IniFilename = nullptr; io.LogFilename = nullptr; @@ -4776,30 +3061,21 @@ void deview_set_hidden(int32_t hidden) return; } - if (hidden != 0) - { - SetWindowState(FLAG_WINDOW_HIDDEN); - return; - } - - ClearWindowState(FLAG_WINDOW_HIDDEN); - /* The window system asks for a window it has just shown to be drawn. Not waited for: nothing - * was keeping what a hidden window showed. */ - state.stale = true; + /* Shown, a minimised window is brought back too: see ph::SetHidden. */ + ph::SetHidden(hidden != 0); } void deview_set_clipboard(const char* text) { /* GLFW owns the clipboard and needs its window, so a runtime that never opened one - a capture * host - copies nothing rather than crashing. */ - if (text == nullptr || - !state.initialised || + if (!state.initialised || !state.windowOpen) { return; } - SetClipboardText(text); + ph::SetClipboard(text); } void deview_focus(void) @@ -4809,17 +3085,7 @@ void deview_focus(void) return; } - ClearWindowState(FLAG_WINDOW_HIDDEN); - /* A minimised window stays minimised through SetWindowFocused, so a focus for a new snapshot - * left it in the taskbar. */ - if (IsWindowMinimized()) - { - RestoreWindow(); - } - - SetWindowFocused(); - /* Shown, restored or raised: drawn again, as in deview_set_hidden. */ - state.stale = true; + ph::Focus(); } void deview_set_placement(const DeviewPlacement* placement) @@ -4835,15 +3101,20 @@ void deview_set_placement(const DeviewPlacement* placement) int32_t deview_get_placement(DeviewPlacement* placement) { + ph::Placement normal; if (placement == nullptr || !state.initialised || !state.windowOpen || - !state.tracked) + !ph::GetPlacement(normal)) { return 0; } - *placement = state.normal; + placement->x = normal.x; + placement->y = normal.y; + placement->width = normal.width; + placement->height = normal.height; + placement->maximized = normal.maximized ? 1 : 0; return 1; } @@ -4854,9 +3125,8 @@ void deview_shutdown(void) return; } - /* Before CloseWindow, which takes the GL context these live in with it. */ + /* Before the window closes, which takes the GL context these live in with it. */ UnloadPictures(); - StopFontFinder(); if (state.context != nullptr) { @@ -4865,16 +3135,14 @@ void deview_shutdown(void) state.context = nullptr; } - /* After the context, whose atlas was still reading glyphs out of these. */ - state.font = nullptr; - state.fontData.clear(); - state.asked.clear(); + /* After the context, whose atlas was still reading glyphs out of the fonts merged in. */ + ph::StopFontFinder(); state.presented.clear(); state.arriving.clear(); state.watched.clear(); - CloseWindow(); + ph::CloseWindow(); state.initialised = false; state.windowOpen = false; } diff --git a/native/swift/Package.swift b/native/swift/Package.swift index b882eff09..0ec705327 100644 --- a/native/swift/Package.swift +++ b/native/swift/Package.swift @@ -9,13 +9,21 @@ let package = Package( products: [ .library(name: "diffengine_viewer", type: .dynamic, targets: ["Deview"]) ], + dependencies: [ + // What every AppKit head does underneath its drawing, shared with BuildMonitor. The sixth + // pin of PlatformHeads, moved with the other five. + .package(url: "https://github.com/SimonCropp/PlatformHeads", branch: "native-runtime") + ], targets: [ // Exists only to import the ABI. Swift does not guarantee struct layout, so the structs // have to come from the C header rather than being redeclared here. .target(name: "CDeview"), .target( name: "Deview", - dependencies: ["CDeview"], + dependencies: [ + "CDeview", + .product(name: "PlatformHeadsMac", package: "PlatformHeads") + ], linkerSettings: [ .linkedFramework("AppKit"), .linkedFramework("CoreText"), diff --git a/native/swift/Sources/Deview/Exports.swift b/native/swift/Sources/Deview/Exports.swift index d56df0f53..a3e54d842 100644 --- a/native/swift/Sources/Deview/Exports.swift +++ b/native/swift/Sources/Deview/Exports.swift @@ -1,8 +1,7 @@ import AppKit import CDeview -import CoreGraphics import Foundation -import ImageIO +import PlatformHeadsMac /// The eleven entry points of native/include/deview.h, implemented over AppKit and Core Text. /// @@ -105,12 +104,8 @@ public func deviewSetClipboard(_ text: UnsafePointer?) { return } - // Cleared first: NSPasteboard keeps whatever types were declared before, so writing a string - // over an image would otherwise leave both on the board and paste the wrong one. autoreleasepool { - let board = NSPasteboard.general - board.clearContents() - board.setString(String(cString: text), forType: .string) + Clipboard.set(String(cString: text)) } } @@ -153,13 +148,8 @@ public func deviewShutdown() { } } -/// Renders into a bitmap of this side's own making rather than asking the view for one. -/// -/// `bitmapImageRepForCachingDisplay` would inherit the window's backing scale, which is 2 on a -/// Retina machine and 1 elsewhere, so a committed baseline would only ever match on the kind of -/// display that produced it. Everything that varies is pinned here instead: scale, colour space, -/// and the six font smoothing and subpixel switches. No window is needed, which also means the -/// snapshot tests do not need a window server. +/// Renders into a bitmap of this side's own making rather than asking the view for one, with +/// everything that varies pinned, so a committed baseline matches on any display: see `Capture`. @_cdecl("deview_capture") public func deviewCapture( _ screen: UnsafePointer?, @@ -176,44 +166,18 @@ private func capture( _ width: Int32, _ height: Int32, _ pngPath: UnsafePointer?) -> Int32 { - guard let screen, - let pngPath, - let renderer = Runtime.shared.renderer, - let space = CGColorSpace(name: CGColorSpace.sRGB), - let context = CGContext( - data: nil, - width: Int(width), - height: Int(height), - bitsPerComponent: 8, - bytesPerRow: 0, - space: space, - bitmapInfo: CGImageAlphaInfo.premultipliedFirst.rawValue | CGBitmapInfo.byteOrder32Little.rawValue) - else { + guard let screen, let pngPath, let renderer = Runtime.shared.renderer else { return 0 } - context.setAllowsFontSmoothing(false) - context.setShouldSmoothFonts(false) - context.setAllowsFontSubpixelPositioning(false) - context.setShouldSubpixelPositionFonts(false) - context.setAllowsFontSubpixelQuantization(false) - context.setShouldSubpixelQuantizeFonts(false) - - renderer.draw( - Frame.decode(screen), - in: context, - size: CGSize(width: CGFloat(width), height: CGFloat(height)), - capturing: true) - - guard let image = context.makeImage() else { - return 0 - } - - let url = URL(fileURLWithPath: String(cString: pngPath)) as CFURL - guard let destination = CGImageDestinationCreateWithURL(url, "public.png" as CFString, 1, nil) else { - return 0 + let frame = Frame.decode(screen) + let written = Capture.png(width: width, height: height, path: String(cString: pngPath)) { context in + _ = renderer.draw( + frame, + in: context, + size: CGSize(width: CGFloat(width), height: CGFloat(height)), + capturing: true) } - CGImageDestinationAddImage(destination, image, nil) - return CGImageDestinationFinalize(destination) ? 1 : 0 + return written ? 1 : 0 } diff --git a/native/swift/Sources/Deview/Frame.swift b/native/swift/Sources/Deview/Frame.swift index 9f2bcca70..122d09230 100644 --- a/native/swift/Sources/Deview/Frame.swift +++ b/native/swift/Sources/Deview/Frame.swift @@ -1,5 +1,6 @@ import CDeview import Foundation +import PlatformHeadsMac /// One frame, decoded out of the flat description the managed side hands over. /// @@ -196,18 +197,8 @@ struct Frame: Equatable { return pane } - /// Every offset is validated against the blob rather than trusted. This is the boundary the - /// managed side reaches across, and a bad length here would be a read past the end of it. + /// Every offset is validated against the blob rather than trusted: see `StringBlob`. private static func string(_ screen: DeviewScreen, _ offset: Int32, _ length: Int32) -> String { - guard length > 0, - offset >= 0, - let base = screen.strings, - Int(offset) + Int(length) <= Int(screen.stringsLength) - else { - return "" - } - - let buffer = UnsafeBufferPointer(start: base + Int(offset), count: Int(length)) - return String(decoding: buffer, as: UTF8.self) + StringBlob(screen.strings, length: screen.stringsLength).text(offset: offset, length: length) } } diff --git a/native/swift/Sources/Deview/Runtime.swift b/native/swift/Sources/Deview/Runtime.swift index 38f039944..debe74143 100644 --- a/native/swift/Sources/Deview/Runtime.swift +++ b/native/swift/Sources/Deview/Runtime.swift @@ -1,6 +1,7 @@ import AppKit import CDeview import Foundation +import PlatformHeadsMac /// Process wide, because the ABI is: one window, addressed by free functions. /// @@ -12,8 +13,15 @@ final class Runtime { private var delegate: WindowDelegate? - /// Held here because `NSApplication.delegate` does not keep it alive. - private let applicationDelegate = ApplicationDelegate() + /// A quit from the Dock or a logout, reported as a close, which the managed side answers the + /// way it answers the window's close button: it leaves the loop, persists the queue it owns, + /// and exits. macOS has no tray to hold the queue instead. Held here because + /// `NSApplication.delegate` does not keep it alive. + private lazy var terminateGuard = TerminateGuard { [unowned self] in + self.input.closeRequested = 1 + } + + private let napGuard = NapGuard() private var size = CGSize(width: 1100, height: 700) private var title = "DiffEngineViewer" @@ -21,7 +29,7 @@ final class Runtime { /// is a weak reference and an autoreleased one would leave the menu inert. private let target = ControlTarget() - private var scroller: NSScroller? + private var scroller: KnobScroller? private var scrollerWidth: CGFloat = 0 /// Whether the menu the current frame carries has already been popped. The managed side takes @@ -63,10 +71,8 @@ final class Runtime { case menuClosed } - /// Keeps App Nap off for as long as the runtime is open: see `open`. - private var activity: NSObjectProtocol? - - /// How the last window was left, handed over before this one exists and used as it is made. + /// How the last window was left, handed over before this one exists and used as it is made, + /// from the top left of the primary screen as every head measures it. var placement: DeviewPlacement? /// Where the right-click that asked for a pane's menu landed, in the view's coordinates, which @@ -87,15 +93,10 @@ final class Runtime { self.title = title initialised = true - // Out of App Nap for as long as this runs. A napped process has its timers coalesced and - // its priority lowered, and this one is a loop driven from outside, waiting on - // nextEvent(until:) a frame at a time, with a socket listener beside it: covered, it could - // be slow to answer a failing test's inline send and slower to bring its window forward, - // and hidden while it owns the queue it still has to answer every send promptly. Idle - // sleep stays allowed. The loop only redraws on a change, so staying awake costs a pump. - activity = ProcessInfo.processInfo.beginActivity( - options: .userInitiatedAllowingIdleSystemSleep, - reason: "Reviewing snapshots and answering the queue") + // Out of App Nap for as long as this runs: covered, it could be slow to answer a failing + // test's inline send, and hidden while it owns the queue it still has to answer every + // send promptly. + napGuard.begin(reason: "Reviewing snapshots and answering the queue") // A hidden start is capture only, and capture draws into a bitmap of its own making. Not // touching AppKit at all in that case is what lets the pixel tests run: NSWindow may only @@ -118,39 +119,23 @@ final class Runtime { return } - let application = NSApplication.shared - // Regular rather than accessory, so the window can take focus and appear in the dock - // without this being an app bundle. finishLaunching is the part of run() that has to - // happen before events are pumped by hand. - application.setActivationPolicy(.regular) - // Everything the renderer draws is dark, and everything AppKit draws here — the menus, the // tooltips, the scroller, the title bar — would otherwise follow the machine's setting and // come up light against it. The WinForms head says the same thing with SetColorMode. - application.appearance = NSAppearance(named: .darkAqua) - - // Before finishLaunching, which is when the bar is first read. - application.mainMenu = MainMenu.build(target) - application.delegate = applicationDelegate - application.finishLaunching() - - let bounds = NSRect(origin: .zero, size: size) - let view = ViewerView(renderer: renderer, frame: bounds) - let window = NSWindow( - contentRect: bounds, - styleMask: [.titled, .closable, .miniaturizable, .resizable], - backing: .buffered, - defer: false) - let delegate = WindowDelegate() + NSApplication.shared.appearance = NSAppearance(named: .darkAqua) + HeadWindow.launch(menu: MainMenu.build(target), delegate: terminateGuard) - window.title = title - window.contentView = view - window.delegate = delegate - window.isReleasedWhenClosed = false - if let frame = rememberedFrame() { - window.setFrame(frame, display: false) - } else { - window.center() + let view = ViewerView(renderer: renderer, frame: NSRect(origin: .zero, size: size)) + let delegate = WindowDelegate() + let window = HeadWindow.make(view: view, size: size, title: title, delegate: delegate) + // Where the last window was, when its title bar is still on a screen there is now. + // Displays come and go between runs, and a window opened where one used to be is a viewer + // that looks as if it did not start. A zoomed window is only a frame here, so there is + // nothing separate to restore. + if let placement { + WindowPlacement.restore( + window, + to: WindowBounds(x: placement.x, y: placement.y, width: placement.width, height: placement.height)) } self.view = view @@ -159,82 +144,27 @@ final class Runtime { makeScroller(in: view, renderer) } - /// Where the last window was, when that is still somewhere it can be reached: its title bar on - /// a screen there is now, with enough of its width there to take hold of. Displays come and go - /// between runs, and a window opened where one used to be is a viewer that looks as if it did - /// not start. - /// - /// The whole frame, title bar included, in points from the bottom left of the main screen, - /// which is what `placementNow` reports. A zoomed window is only a frame here, so there is - /// nothing separate to restore. - private func rememberedFrame() -> NSRect? { - guard let placement, placement.width > 0, placement.height > 0 else { - return nil - } - - let frame = NSRect( - x: CGFloat(placement.x), - y: CGFloat(placement.y), - width: CGFloat(placement.width), - height: CGFloat(placement.height)) - let reach: CGFloat = 100 - let reachable = NSScreen.screens.contains { screen in - let visible = screen.visibleFrame - let overlap = min(frame.maxX, visible.maxX) - max(frame.minX, visible.minX) - // A point of slack at the top: the frame was rounded to whole points on its way out - return overlap >= reach && frame.maxY <= visible.maxY + 1 && frame.maxY > visible.minY + reach - } - return reachable ? frame : nil - } - - /// The window's frame as it is now, or nil when there is no window, or it is full screen: that - /// frame is the display's rather than one the reader chose, and the one they did choose comes - /// back when they leave full screen. + /// The window's frame as it is now, or nil when there is no window, or it is full screen. func placementNow() -> DeviewPlacement? { - guard let window, !window.styleMask.contains(.fullScreen) else { - return nil + WindowPlacement.current(of: window).map { + DeviewPlacement(x: $0.x, y: $0.y, width: $0.width, height: $0.height, maximized: 0) } - - let frame = window.frame - return DeviewPlacement( - x: Int32(frame.minX.rounded()), - y: Int32(frame.minY.rounded()), - width: Int32(frame.width.rounded()), - height: Int32(frame.height.rounded()), - maximized: 0) } - /// The pane scrollbar. - /// - /// Legacy rather than overlay, whatever the machine prefers. An overlay scroller only fades in - /// and out as part of an `NSScrollView`, and there is none here — the managed side owns the - /// scroll position and hands over one screenful of rows at a time. Placed by hand it would - /// simply sit over the right hand pane forever. Legacy takes a strip of its own instead, which - /// is also what the WinForms head does and for the same reason: a bar that comes and goes - /// moves the pane split about. + /// The pane scrollbar, a strip of its own beside the right hand pane, whose knob is followed + /// as it is dragged: see `KnobScroller`. /// /// The strip comes off the renderer rather than out of the window, so the offscreen capture — /// which has no window and so no scroller — is not left with a gap where one would be. private func makeScroller(in view: ViewerView, _ renderer: Renderer) { - let width = NSScroller.scrollerWidth(for: .regular, scrollerStyle: .legacy) - let scroller = PaneScroller( - frame: NSRect(x: view.bounds.maxX - width, y: 0, width: width, height: view.bounds.height)) - scroller.scrollerStyle = .legacy + let scroller = KnobScroller.legacy(in: view, target: target, action: #selector(ControlTarget.scrolled(_:))) scroller.knobStyle = .light - // Kept against the right edge and as tall as the window leaves it by AppKit, as well as by - // `position`. A window being resized is a loop of AppKit's own, inside the pump, so - // `position` does not run until the mouse comes up, and until then the scroller stayed - // where the last frame had put it: out in the right hand pane of a window being widened. - scroller.autoresizingMask = [.minXMargin, .height] - scroller.target = target - scroller.action = #selector(ControlTarget.scrolled(_:)) - // Said rather than left to whatever a scroller starts as. A scroll view sees to this for - // its own scrollers and there is none here, and a scroller that is not enabled draws its - // slot with no knob in it to take hold of. - scroller.isEnabled = true - view.addSubview(scroller) + scroller.knobDragged = { [unowned self] in + self.knobDragged(to: $0) + } self.scroller = scroller + let width = scroller.frame.width scrollerWidth = width renderer.rightInset = width } @@ -299,26 +229,25 @@ final class Runtime { width: scrollerWidth, height: max(1, body.height)) - // Assigned during a drag of the knob as at any other time. `PaneScroller` reports where a + // Assigned during a drag of the knob as at any other time. `KnobScroller` reports where a // drag has got to without moving the knob, so this is what moves it: to the row the panes // are showing, which is where the WinForms bar's thumb sits too. - let visible = max(1, frame.left.rows.count) - let total = max(Int(frame.left.totalRows), visible) - let maximum = total - visible - scroller.knobProportion = CGFloat(visible) / CGFloat(total) - scroller.doubleValue = maximum <= 0 ? 0 : Double(frame.left.scrollTop) / Double(maximum) + Runtime.travel(of: frame).apply(to: scroller) + } + + /// The panes' rows as the scroller counts them. + private static func travel(of frame: Frame) -> ScrollerTravel { + ScrollerTravel(top: Int(frame.left.scrollTop), visible: frame.left.rows.count, total: Int(frame.left.totalRows)) } /// The knob dragged to `value` of the way along its travel, as a first visible row. From - /// `PaneScroller`, which follows that drag itself. + /// `KnobScroller`, which follows that drag itself. func knobDragged(to value: Double) { guard let frame = view?.model else { return } - let visible = max(1, frame.left.rows.count) - let maximum = max(0, Int(frame.left.totalRows) - visible) - input.scrollTo = Int32((value * Double(maximum)).rounded()) + input.scrollTo = Runtime.travel(of: frame).row(at: value) } /// Translates wherever the scroller was grabbed into a first visible row. What reaches here is @@ -328,20 +257,7 @@ final class Runtime { return } - let visible = max(1, frame.left.rows.count) - let maximum = max(0, Int(frame.left.totalRows) - visible) - switch scroller.hitPart { - case .decrementPage: - input.scrollTo = Int32(max(0, Int(frame.left.scrollTop) - visible)) - case .incrementPage: - input.scrollTo = Int32(min(maximum, Int(frame.left.scrollTop) + visible)) - case .decrementLine: - input.scrollTo = Int32(max(0, Int(frame.left.scrollTop) - 1)) - case .incrementLine: - input.scrollTo = Int32(min(maximum, Int(frame.left.scrollTop) + 1)) - default: - input.scrollTo = Int32((scroller.doubleValue * Double(maximum)).rounded()) - } + input.scrollTo = Runtime.travel(of: frame).row(for: scroller.hitPart, value: scroller.doubleValue) } /// The context menu, as a real one. The managed side still owns opening and closing; this pops @@ -396,47 +312,16 @@ final class Runtime { } } - /// Drains what is queued and then blocks until the deadline, which is both the pump and the - /// frame throttle. Without the second part this would spin a core, since the managed loop - /// calls straight back in. - /// - /// Not blocked while input is still waiting to be handed over, which is the next frame's, - /// now. It goes one event a poll, and a frame's wait between two of them would hand a held - /// key's repeats over more slowly than a fast repeat rate makes them. - /// - /// Nor once an event has left something to hand over. The wait used to run to its deadline - /// whatever arrived during it, so a key pressed a millisecond into a frame was answered a - /// frame late. What else is already queued is still dispatched, without waiting for more. - /// - /// A window nobody can see waits longer: ordered out behind a tray, miniaturised, or wholly - /// covered. The managed loop turns only as fast as this returns, and it was turning sixty - /// times a second to present to nothing. An event still ends the wait at once, and a click - /// on the Dock icon is one. What does not is the managed side's own reason to show the - /// window, a patch arriving over the socket, which it acts on between two presents and has - /// no way to interrupt this with: `unseenWait` is how late that can be. + /// Drains what is queued and waits out the frame, returning early for input and waiting longer + /// for a window nobody can see: see `EventPump`. A patch arriving over the socket is the + /// managed side's reason to show the window, and `EventPump.unseenWait` is how late that can + /// be. private func pump() { - let wait = unseen ? Runtime.unseenWait : 1.0 / 60.0 - var deadline = hasInput ? Date.distantPast : Date(timeIntervalSinceNow: wait) - while let event = NSApp.nextEvent(matching: .any, until: deadline, inMode: .default, dequeue: true) { - NSApp.sendEvent(event) - if hasInput { - deadline = Date.distantPast - } - } + EventPump.pump(unseen: unseen) { hasInput } } - /// How long a pump waits for an event while nobody can see the window: ten turns of the - /// managed loop a second, and a tenth of a second at most before a window that has been - /// asked for comes forward. - private static let unseenWait: TimeInterval = 0.1 - - /// Nobody can see the window: it is ordered out, in the Dock, or has nothing of it showing. private var unseen: Bool { - guard let window else { - return false - } - - return !window.isVisible || window.isMiniaturized || !window.occlusionState.contains(.visible) + EventPump.isUnseen(window) } /// Something is waiting for the next poll to hand over: a key or a click in line, or any of @@ -468,8 +353,7 @@ final class Runtime { /// from the managed loop's thread, which is the main one. func show() { makeWindow() - window?.makeKeyAndOrderFront(nil) - NSApp.activate(ignoringOtherApps: true) + HeadWindow.show(window) } func hide() { @@ -477,14 +361,8 @@ final class Runtime { } func shutdown() { - if let activity { - ProcessInfo.processInfo.endActivity(activity) - self.activity = nil - } - - window?.delegate = nil - window?.orderOut(nil) - window?.close() + napGuard.end() + HeadWindow.close(window) window = nil view = nil renderer = nil @@ -561,24 +439,3 @@ final class Runtime { input.rightClickedPane = -1 } } - -/// Answers a quit that comes from outside the managed loop: Quit in the Dock, and logout. -/// -/// Both arrive as `terminate:`, which does not return. With no delegate to ask, AppKit exits from -/// inside it, so nothing after the pump call runs, the managed `finally` included. For a viewer -/// that owns the queue, that `finally` is `PersistOwned`, and macOS has no tray to hold the queue -/// instead, so the queue was lost. -/// -/// The quit is refused and reported as a close, which the managed side answers the way it answers -/// the window's close button: it leaves the loop, persists, and exits. That is what GLFW does. -/// Not `.terminateLater`, whose reply AppKit waits for in a modal loop inside the pump, while the -/// thread that would send the reply is the one blocked waiting for the pump to return. -/// -/// A refused quit also cancels the logout that asked for it. By the time the logout is tried -/// again the viewer has exited. -final class ApplicationDelegate: NSObject, NSApplicationDelegate { - func applicationShouldTerminate(_ sender: NSApplication) -> NSApplication.TerminateReply { - Runtime.shared.input.closeRequested = 1 - return .terminateCancel - } -} diff --git a/native/swift/Sources/Deview/ViewerView.swift b/native/swift/Sources/Deview/ViewerView.swift index dcedbffe4..8eee1f90d 100644 --- a/native/swift/Sources/Deview/ViewerView.swift +++ b/native/swift/Sources/Deview/ViewerView.swift @@ -1,9 +1,10 @@ import AppKit import CDeview +import PlatformHeadsMac /// The window's content. Drawing goes through the same `Renderer` the capture uses; this only adds /// input, which it records into `Runtime` for the next `deview_poll_input` to drain. -final class ViewerView: NSView, NSViewToolTipOwner { +final class ViewerView: NSView { private let renderer: Renderer private var draggingSplitter = false @@ -68,49 +69,18 @@ final class ViewerView: NSView, NSViewToolTipOwner { } } - /// One tip region per queue row that has something to say, rebuilt with the frame because - /// anything that scrolls the column renumbers the rows. Driven from `Runtime` rather than from - /// `draw`, since these are tracking rectangles and rebuilding them while AppKit is drawing - /// invites re-entrancy. - /// - /// A row with an empty tooltip gets no region at all, rather than a region answering with an - /// empty string: the second would still open a popup, and a popup that says nothing is worse - /// than none. - /// - /// The text is answered on demand below rather than stored here, so a row whose label changed - /// under a resting cursor still reads correctly. - /// Rebuilt only when the regions themselves changed. AppKit times its tooltip delay from the - /// moment the cursor enters a tracking rectangle, and this runs on every frame, so removing - /// and re-adding the rectangle under a resting cursor restarted that delay before it could - /// ever elapse - which is to say queue tooltips never appeared on macOS at all. + /// One tip region per queue row that has something to say, as the managed side composed it, + /// rebuilt with the frame because anything that scrolls the column renumbers the rows, and + /// registered again only when that changed them: see `ToolTipRegions`. Driven from `Runtime` + /// after drawing, since these are tracking regions. func refreshToolTips() { - let wanted = layout.queueItems.enumerated() - .filter { $0.offset < model.queue.count && !model.queue[$0.offset].tooltip.isEmpty } - .map(\.element) - guard wanted != toolTipRects else { - return - } - - toolTipRects = wanted - removeAllToolTips() - for bounds in wanted { - _ = addToolTip(bounds, owner: self, userData: nil) - } + let rows = layout.queueItems.enumerated() + .filter { $0.offset < model.queue.count } + .map { (rect: $0.element, text: model.queue[$0.offset].tooltip) } + toolTips.apply(rows, to: self) } - /// What the tips are registered on, so an unchanged frame can leave them alone. - private var toolTipRects: [NSRect] = [] - - /// Composed by the managed side, so this only finds the row under the cursor. - func view(_ view: NSView, stringForToolTip tag: NSView.ToolTipTag, point: NSPoint, userData: UnsafeMutableRawPointer?) -> String { - guard let index = layout.queueItems.firstIndex(where: { $0.contains(point) }), - index < model.queue.count - else { - return "" - } - - return model.queue[index].tooltip - } + private let toolTips = ToolTipRegions() /// The resize cursor over the splitter, which is the only hint that it can be dragged. override func resetCursorRects() { @@ -327,42 +297,14 @@ final class ViewerView: NSView, NSViewToolTipOwner { return false } - /// A notch of a wheel, in the points a precise device reports one movement of it as. - /// - /// AppKit reports a wheel in lines and a trackpad in points, and rounding both to an integer - /// number of notches treated them as the same thing: an ordinary flick of a trackpad reads as - /// tens of points, so it arrived as tens of notches and the managed side then multiplied it - /// by three. Slow movement rounded to nothing at all. + /// A notch of a wheel, in the points a precise device reports one movement of it as. The + /// managed side multiplies a notch by three. private static let pointsPerNotch = 16.0 - /// What is left over between events, because a trackpad delivers many small deltas between - /// two polls and dropping each one on its own is what made slow movement do nothing. - private var scrollRemainder = 0.0 + private var wheel = WheelNotches() override func scrollWheel(with event: NSEvent) { - let notches: Double - if event.hasPreciseScrollingDeltas { - scrollRemainder += Double(event.scrollingDeltaY) / ViewerView.pointsPerNotch - notches = scrollRemainder.rounded(.towardZero) - scrollRemainder -= notches - } else { - // A wheel with notches: an event is a click of it. Its delta is in lines, scaled by - // how fast the wheel is turning, and for one click turned slowly that is a tenth of - // a line. Added up as a trackpad's are, ten such clicks went by before anything - // moved. So at least one notch the way it turned, and more only when it says more. - let lines = Double(event.scrollingDeltaY).rounded() - if event.scrollingDeltaY > 0 { - notches = max(1, lines) - } else if event.scrollingDeltaY < 0 { - notches = min(-1, lines) - } else { - // Turned sideways, which nothing here answers - notches = 0 - } - - scrollRemainder = 0 - } - + let notches = wheel.take(event, pointsPerNotch: ViewerView.pointsPerNotch) guard notches != 0 else { return } @@ -373,26 +315,21 @@ final class ViewerView: NSView, NSViewToolTipOwner { let point = convert(event.locationInWindow, from: nil) let modified = event.modifierFlags.contains(.command) || event.modifierFlags.contains(.control) if modified || layout.pictures.contains(where: { $0.bounds.contains(point) }) { - Runtime.shared.input.zoomDelta += Int32(notches) + Runtime.shared.input.zoomDelta += notches } else { - Runtime.shared.input.scrollDelta += Int32(notches) + Runtime.shared.input.scrollDelta += notches } } /// How far two fingers have to spread or close for one step of zoom. private static let magnificationPerStep = 0.25 - private var magnifyRemainder = 0.0 + private var magnification = Steps() /// A pinch, which is how a trackpad says zoom. Steps, like the wheel, so every way of zooming /// moves between the same sizes. override func magnify(with event: NSEvent) { - magnifyRemainder += Double(event.magnification) / ViewerView.magnificationPerStep - let steps = magnifyRemainder.rounded(.towardZero) - magnifyRemainder -= steps - if steps != 0 { - Runtime.shared.input.zoomDelta += Int32(steps) - } + Runtime.shared.input.zoomDelta += magnification.add(Double(event.magnification) / ViewerView.magnificationPerStep) } override func keyDown(with event: NSEvent) { @@ -528,68 +465,6 @@ final class ViewerView: NSView, NSViewToolTipOwner { } } -/// The pane scrollbar, with a drag of its knob followed here rather than in AppKit's own loop. -/// -/// `NSScroller` tracks a press on its knob in a loop of its own, inside `mouseDown`, and returns -/// when the button comes up. That is inside `Runtime.pump`, so `deview_present` did not return -/// for the length of the drag: the knob moved under the pointer, every move was reported, and the -/// managed loop that scrolls the panes in answer ran once, at the release. The WinForms head has -/// the same loop under its scroll bar and is handed frames from inside it, which this ABI has no -/// way to ask for. -/// -/// So the drag is three ordinary events instead, as a selection is in `ViewerView`. The window -/// sends the moves and the release to the view that took the press, each comes through the pump -/// on its own, and there is a frame between one and the next. -/// -/// Only a press on the knob. One in the slot is still AppKit's: what it means is the reader's -/// setting, a page or the place that was pressed, and it is over in a click. -final class PaneScroller: NSScroller { - /// A knob being dragged: where in the window the pointer took hold of it, where the knob was - /// then, as the fraction of its travel `doubleValue` is, and how long that travel is. - private var dragging = false - private var heldAt: CGFloat = 0 - private var heldValue = 0.0 - private var travel: CGFloat = 0 - - override func mouseDown(with event: NSEvent) { - let knob = rect(for: .knob) - let room = rect(for: .knobSlot).height - knob.height - guard room > 0, knob.contains(convert(event.locationInWindow, from: nil)) else { - super.mouseDown(with: event) - return - } - - dragging = true - heldAt = event.locationInWindow.y - heldValue = doubleValue - travel = room - } - - override func mouseDragged(with event: NSEvent) { - guard dragging else { - super.mouseDragged(with: event) - return - } - - // Measured from the press rather than from the last move, as a picture's drag is, and in - // the window's coordinates, which count up the screen while the document runs down it. - // The knob is not moved here. It goes where the frame that answers this puts it, which - // is the row the panes are showing. - let moved = Double((heldAt - event.locationInWindow.y) / travel) - Runtime.shared.knobDragged(to: min(max(heldValue + moved, 0), 1)) - } - - override func mouseUp(with event: NSEvent) { - guard dragging else { - super.mouseUp(with: event) - return - } - - // Nothing to report: the last move already said where it is. - dragging = false - } -} - /// Closing is the managed side's decision: with a tray to reopen from it hides, without one it /// exits. So the request is recorded and the close refused, and the answer comes back as either /// `deview_set_hidden` or `deview_shutdown`. From 2006cdd9ee61de1beb123914dc7466aa8b1d9034 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Thu, 22 Oct 2026 18:31:11 +1100 Subject: [PATCH 2/3] Pin PlatformHeads 0.4.0 All six pins, off the native-runtime branch the adoption was checked against. --- .github/workflows/build-native.yml | 2 +- native/CMakeLists.txt | 2 +- native/swift/Package.swift | 2 +- src/Directory.Packages.props | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-native.yml b/.github/workflows/build-native.yml index f3198a687..5b49f0f87 100644 --- a/.github/workflows/build-native.yml +++ b/.github/workflows/build-native.yml @@ -35,7 +35,7 @@ concurrency: jobs: native: - uses: SimonCropp/PlatformHeads/.github/workflows/build-native.yml@0.3.0 + uses: SimonCropp/PlatformHeads/.github/workflows/build-native.yml@0.4.0 permissions: contents: write pull-requests: write diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 11adb3b43..d98a4b0c6 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -15,7 +15,7 @@ include(FetchContent) FetchContent_Declare( platformheads GIT_REPOSITORY https://github.com/SimonCropp/PlatformHeads.git - GIT_TAG native-runtime + GIT_TAG 0.4.0 GIT_SHALLOW ON) FetchContent_MakeAvailable(platformheads) include(${platformheads_SOURCE_DIR}/cmake/PlatformHeads.cmake) diff --git a/native/swift/Package.swift b/native/swift/Package.swift index 0ec705327..ab7fad6da 100644 --- a/native/swift/Package.swift +++ b/native/swift/Package.swift @@ -12,7 +12,7 @@ let package = Package( dependencies: [ // What every AppKit head does underneath its drawing, shared with BuildMonitor. The sixth // pin of PlatformHeads, moved with the other five. - .package(url: "https://github.com/SimonCropp/PlatformHeads", branch: "native-runtime") + .package(url: "https://github.com/SimonCropp/PlatformHeads", exact: "0.4.0") ], targets: [ // Exists only to import the ABI. Swift does not guarantee struct layout, so the structs diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index 1af0b0ca7..9eeed2071 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -19,9 +19,9 @@ --> - - - + + + From f3830b5fdf83ba0b9ffca745f0a27ac0e85cd668 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 22 Oct 2026 20:25:31 +1100 Subject: [PATCH 3/3] Rebuild native renderer binaries (#968) Co-authored-by: SimonCropp <122666+SimonCropp@users.noreply.github.com> --- .../native/libdiffengine_viewer.so | Bin 2243416 -> 2243416 bytes .../linux-x64/native/libdiffengine_viewer.so | Bin 2468200 -> 2472296 bytes .../native/libdiffengine_viewer.dylib | Bin 460408 -> 509464 bytes .../osx-x64/native/libdiffengine_viewer.dylib | Bin 460408 -> 509464 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so b/src/DiffEngineViewer.Linux/runtimes/linux-arm64/native/libdiffengine_viewer.so index c0dcdaebeebb4dca654ff8686717cd526819f48f..acbc5f95e8d176e6c58779ce9d5e7191bd726c53 100644 GIT binary patch delta 290417 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