gpt4 book ai didi

electron - 具有SDL的macOS上的 Electron 优先级高DPI支持

转载 作者:行者123 更新时间:2023-12-03 12:28:17 26 4
gpt4 key购买 nike

在Electron中运行我们的C++节点插件时,不遵守高DPI设置/标志。直到与Electron打包为止,节点插件才可以正常工作。

我们的节点插件在另一个过程中,但是在Electron内部被调用,分别创建了一个新窗口,该窗口使用SDL尝试通过SDL_WINDOW_ALLOW_HIGHDPI启用DPI

我们不使用new BrowserWindow,并希望Chrome在这种情况下能够调整大小!

在以下情况下不起作用:

  • 通过electron .运行
  • 在打包的.dmg
  • 之后运行

    Info.plist High Resolution Capable中的Key设置为YES- Electron 似乎可以自动生成默认的info.plist。 (我们不会自行设置任何内容),也不会设置 --extend-info
  • Electron 版本:
  • “electron”:“^ 6.0.9”,
    “Electron 生成器”:“^ 21.2.0”,
  • 操作系统:
    macOS-10.14.6

  • 预期行为

    该程序应以高DPI模式显示,并尊重传递给SDL的内容

    例如,我们应该收到一个SDL_WINDOWEVENT,它告诉我们以新的宽度和高度调整纹理的大小。

    实际行为

    将程序窗口(不是由Electron创建的窗口)移到Retina屏幕(macbook pro)时,它也不会接收新的渲染器输出以调整大小,也不会表现出很高的DPI感知能力

    当我们分别运行节点插件时,每次将屏幕移动到另一个DPI屏幕时,每次移动窗口都会重新配置纹理。

    重现

    在SDL中进行以下设置:
    // init
    SDL_Window *window = SDL_CreateWindow(
    "App name", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height,
    SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI)

    SDL_Renderer *renderer =
    SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    // configure texture
    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");

    int o_width = 0, o_height = 0;
    int ret = SDL_GetRendererOutputSize(ctx->renderer, &o_width, &o_height);
    if (ret != 0) {
    throw runtime_error("Could not get output renderer size\n");
    }

    printf("Output renderer size: %dx%d\n", o_width, o_height);

    问题
  • 当我们做electron .
  • 时,如何确保它在开发环境中有效
  • 打包后如何使此成功工作?
  • 最佳答案

    解决方案:在Electron中,在Info.plist中为主进程设置的任何内容均不会等效地应用于Electron Helper进程,因为它们具有自己的Info.plist。

    我们通过以下方式对此进行了修补:

    cd dist/mac/Your.app/Contents/Frameworks/Your\ Helper.app/Contents
    /usr/libexec/PlistBuddy -c "add NSHighResolutionCapable bool true" Info.plist

    在Electron 7.1或更低版本中不正确支持

    Github issue

    关于electron - 具有SDL的macOS上的 Electron 优先级高DPI支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481485/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com