【问题标题】:How to get this X11 code to work?如何让这个 X11 代码工作?
【发布时间】:2012-11-15 15:07:16
【问题描述】:

我试图关注 tutorial on X11 haskell 库,但遇到了问题 - 创建的窗口位于屏幕的左下角,而不是左上角,并且绘图(在方法drawInWin 中)似乎没有做任何事情。

#!/usr/bin/runghc -Wall

module Main where
import Graphics.X11.Xlib
import System.Exit (exitWith, ExitCode(..))
import Control.Concurrent (threadDelay)

main :: IO ()
main = do
 dpy <- openDisplay ""
 let dflt = defaultScreen dpy
     border = blackPixel dpy dflt
     background = whitePixel dpy dflt
 rootw <- rootWindow dpy dflt
 win <- createSimpleWindow dpy rootw 0 0 100 100 1 border background
 setTextProperty dpy win "Hello World" wM_NAME
 mapWindow dpy win
 drawInWin dpy win
 sync dpy False
 threadDelay (10 * 1000000)
 exitWith ExitSuccess

drawInWin :: Display -> Window -> IO ()
drawInWin dpy win = do
 bgcolor <- initColor dpy "green"
 fgcolor <- initColor dpy "blue"
 gc <- createGC dpy win
 setForeground dpy gc bgcolor
 fillRectangle dpy win gc 0 0 100 100
 setForeground dpy gc fgcolor
 fillRectangle dpy win gc 2 2 96 96
 freeGC dpy gc

initColor :: Display -> String -> IO Pixel
initColor dpy color = do
 let colormap = defaultColormap dpy (defaultScreen dpy)
 (apros,real) <- allocNamedColor dpy colormap color
 return $ color_pixel apros

基本上,我需要创建一个带有画布的简单窗口,我将在其上绘制一些线条。

我在那个 sn-p 中做错了什么?

版本:

X11 - 1.5.0.1
GHC - 6.12.1
OS - Linux Mint 10
Xorg - 1:7.5

【问题讨论】:

  • 它适用于我...X11 库的版本、GHC 的版本、操作系统的版本等?
  • @DanielWagner - 将它们添加到问题中。
  • @DanielWagner - 让我感到困惑的是,X11 是对本机库的简单绑定,据我所知,我系统中的 X 行为正常 - 因此本机库应该没问题。跨度>
  • 这对我有用,但我明白为什么它对你不起作用。不能保证窗口的定位,您的窗口管理器可以覆盖它。至于窗口的内容,很难说。这个简单的程序不会重绘它的窗口,并且窗口管理器可能正在玩使画布无效的技巧。尝试一个更完整的程序,一个带有重绘的事件循环的程序。只是一个疯狂的猜测。
  • @n.m. - 至于绘图,你似乎是对的 - 似乎前几次绘图被忽略了,并且有适当的绘图循环修复它。但是关于窗口的定位 - 窗口管理器如何覆盖它?我没有运行 XMonad 什么的,我使用普通的 Gnome 2。

标签: haskell x11


【解决方案1】:

X11 绑定的 1.5 版本中存在许多与 64 位正确性相关的错误。这些问题已在 1.6 版本中得到修复,因此升级应该可以解决这些问题。

【讨论】:

  • 我升级到 1.6.0.2,仍然得到相同的行为:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 2020-03-23
相关资源
最近更新 更多