首页 > 解决方案 > OCaml 图形的窗口大小不正确

问题描述

问题说明

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

可能和窗口系统有关;我在 OS X 上使用 X11 (XQuartz)。

问题的证据

考虑以下顺序:

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 ()

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

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遵循所有说明;当然,这不是一个非常令人满意的解决方案……</p> Unix.sleepf 0.1synchronize (); Unix.sleepf 0.1auto_synchronize

标签: graphicsocamlx11

解决方案


推荐阅读