浏览代码

Disable outputs which are larger than the target framebuffer size

Apparently this is not necessary when using the internal API, but a
must with libXrandr.
tags/v1.8.90
Peter Åstrand (astrand) 6 年前
父节点
当前提交
396f8c9fb5
共有 1 个文件被更改,包括 21 次插入1 次删除
  1. 21
    1
      unix/common/randr.cxx

+ 21
- 1
unix/common/randr.cxx 查看文件

@@ -30,6 +30,26 @@
#include <RandrGlue.h>
static rfb::LogWriter vlog("RandR");

static int ResizeScreen(int fb_width, int fb_height)
{
/*
* Disable outputs which are larger than the target size
*/
for (int i = 0;i < vncRandRGetOutputCount();i++) {
int x, y, width, height;
if (vncRandRGetOutputDimensions(i, &x, &y, &width, &height) == 0) {
if (x + width > fb_width || y + height > fb_height) {
/* Currently ignoring errors */
/* FIXME: Save output rotation and restore when configuring output */
vncRandRDisableOutput(i);
}
}
}

return vncRandRResizeScreen(fb_width, fb_height);
}


rfb::ScreenSet computeScreenLayout(OutputIdMap *outputIdMap)
{
rfb::ScreenSet layout;
@@ -120,7 +140,7 @@ unsigned int setScreenLayout(int fb_width, int fb_height, const rfb::ScreenSet&
/* First we might need to resize the screen */
if ((fb_width != vncGetScreenWidth()) ||
(fb_height != vncGetScreenHeight())) {
ret = vncRandRResizeScreen(fb_width, fb_height);
ret = ResizeScreen(fb_width, fb_height);
if (!ret) {
vlog.error("Failed to resize screen to %dx%d", fb_width, fb_height);
return rfb::resultInvalid;

正在加载...
取消
保存