【问题标题】:Electron overriding High DPI support on macOS with SDLElectron 在 macOS 上使用 SDL 覆盖高 DPI 支持
【发布时间】:2019-10-21 07:18:35
【问题描述】:

在 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

  • 电子版:

    • “电子”:“^6.0.9”, “电子制造商”:“^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 . 时,如何确保它在开发中有效
  • 打包后如何使这项成功工作?

【问题讨论】:

  • SDL_GL_GetDrawableSize(window, &w, &h) 返回的大小不同吗?

标签: electron sdl-2


【解决方案1】:

解决方案:在 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

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    • 2018-08-26
    相关资源
    最近更新 更多