wxHaskell と Reactive Banana の学習の演習として単純な UI を構築しようとしていますが、一見単純な問題を解決しようとして壁にぶつかりました。具体的には、ラベルのテキストが更新されたときにラベルの周りに収まるようにウィンドウのサイズを変更して、常にテキストに収まるようにしたいと思います。でこれを達成しようとしましたwindowReLayoutMinimal
が、予期せず、テキストがオーバーフローしたときにウィンドウのサイズ変更に失敗し、ウィンドウが手動でサイズ変更されたときに元のサイズと新しいサイズの間でストローブしました (つまり、コーナー)。私が知る限りStaticText
、テキストが変更されたときにアイテムのサイズが更新されません。アイテムの最小サイズを強制的に再計算する方法はありますか? 私のコードは次のようになります。
{-# LANGUAGE ScopedTypeVariables #-}
import Graphics.UI.WX hiding (Event)
import Reactive.Banana
import Reactive.Banana.WX
main = start $ do
mainWindow <- frame [text := "Test"]
inputText <- textEntry mainWindow []
outputText <- staticText mainWindow []
set mainWindow [layout :=
margin 10 $
grid 10 10 [
[widget inputText, fill $ valignCenter $ widget outputText]
]
]
let
networkDescription :: forall t . Frameworks t => Moment t ()
networkDescription = do
inputTextEvStream <- eventText inputText
let
currentInputText = stepper "" inputTextEvStream
sink outputText [text :== currentInputText]
reactimate $ windowReLayoutMinimal mainWindow <$ inputTextEvStream
network <- compile networkDescription
actuate network