OCaml图形的窗口大小不正确

时间:2019-02-17 17:46:12

标签: graphics ocaml x11

问题描述

使用OCaml图形模块时,我经常得到一个尺寸错误的窗口;这不是可预测的行为。显示的窗口始终具有所需的大小,但由于未知原因,OCaml有时会认为它实际上具有不同的大小,因此会影响图形。

也许与窗口系统有关;我正在OS X上使用X11(XQuartz)。

问题的证据

请考虑以下顺序:

28.0.3

预期结果是一个大小恒定为500x500的窗口,即:

open Graphics
let f () =
    Printf.printf "size_x = %d, size_y = %d\n" (size_x ()) (size_y ())
let () =
    open_graph "";
    resize_window 500 500;
    f ();
    Unix.sleepf 0.01
    f ();
    Unix.sleepf 0.1
    f ()

但有时我(很有可能)得到

size_x = 500, size_y = 500
size_x = 500, size_y = 500
size_x = 500, size_y = 500

size_x = 500, size_y = 500
size_x = 600, size_y = 450
size_x = 500, size_y = 500

size_x = 600, size_y = 450
size_x = 500, size_y = 500
size_x = 500, size_y = 500

换句话说,这是一个可变行为,似乎在打开窗口后仅十分之几秒内就会发生。

无论我将选项size_x = 600, size_y = 450 size_x = 600, size_y = 450 size_x = 500, size_y = 500 auto_synchronize设置为真还是假,结果都是相同的。

解决方法

我确保至少在所有display_mode指令之后紧跟resize_window(或在Unix.sleepf 0.1关闭的情况下紧跟synchronize (); Unix.sleepf 0.1);当然,这不是一个非常令人满意的解决方案……

0 个答案:

没有答案