2

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 でコンパイルします

ここで何が起こっているのか理解できません。助けていただければ幸いです

4

0 に答える 0