winxp で正常に動作する単純な時計プログラムを作成しました。Linux で実行すると、奇妙な動作をします。プログラムは、テキストが "00:00" に設定されたラベルを描画し、同じテキストで 1 秒に 1 回更新します。
プログラムを実行するには、コマンド ラインでフォント サイズを指定します。非常に小さく設定すると (私の画面では 200.0 以下で、あなたの画面とは異なる場合があります)、正常に動作します。設定が大きすぎてテキストが画面に収まらない場合 (私の場合は 500.0) も問題なく動作します。ただし、中央のサイズ (たとえば、300.0 または 400.0) を選択すると、「00:00」と表示されますが、updateClock がテキストを設定すると、画面上で「:00」になります (左にシフトされず、2 つだけです)。先頭のゼロは空白に置き換えられます)
問題を示す簡略化されたコードを次に示します。
import System.Environment
import System.Time
import System.Locale
import Data.Time
import Graphics.Rendering.Cairo
import Graphics.UI.Gtk hiding (fill)
import Graphics.UI.Gtk.Gdk.EventM
parseArgs [str] = case reads str::[(Double, String)] of
[(number, "")] -> Just number
_ -> Nothing
parseArgs _ = Nothing
updateClock labl = do
labelSetText labl "00:00"
return True
main = do
args <- getArgs
case (parseArgs args) of
Just size ->
showGui size
_ -> putStrLn "\nUsage: test fontSize"
where
showGui size = do
initGUI
window <- windowNew
onDestroy window mainQuit
window `on` keyPressEvent $ tryEvent $ do
"Escape" <- eventKeyName
liftIO mainQuit
labl <- labelNew Nothing
fd <- fontDescriptionNew
containerAdd window labl
windowFullscreen window
fontDescriptionSetSize fd size
widgetModifyFont labl $ Just fd
timeoutAdd (updateClock labl >> return True) 1000
widgetShowAll window
mainGUI
libghc-gtk-dev 0.12.4-3 を使用しています。
ghc 7.6.3
および libgtk2.0-0 2.24.23-0ubuntu1.2。
ghc --make --threaded でコンパイルします
ここで何が起こっているのか理解できません。助けていただければ幸いです