-*- outline -*- demo - Chalkboard - Bottle2 -- tools -- scroll -- turtle todo: inspy todo: copy and paste todo: turtle geometry demo todo: 半加算器のデモ todo: ファイル名を入力して表示するデモ(含一行テキストフィールド) todo: メニューなどのレイアウト todo: ツール類にスクロールバー todo: 複数フォント todo: テキストに合わせてスクロールバー操作 todo: イアン式の単純なテキストファイルに対する利点はあるか? todo: pbook 適用 todo: 他のアプリで実行可能にする。 todo: フォント検索 todo: squeak と同様のインタフェースを提供する。 todo done: browser with scroll todo done: undefined の処理 todo done: bunnu 動かす todo done: キャンバス todo done: { パーサー指定 } の効果を持続 todo done: カーソル移動とスクロール連動 todo done: HScrollBar scrollAbsolute: -> errorDivisionByZero todo done: inspector with scroll todo done: inspector event todo done: text and scrollpane 横幅を変更した時に縦を更新する処理。現在イベント処理 TextView onReplaced: diff の中だけで縦を更新しているが、横更新 -> レイアウト -> 縦更新が自然に起こるようにする。layoutExtent: を定義 todo done: 最後の行の処理 todo done: vertical / horizontal bar on/off option todo done: スクロールウインドウ todo done: スクロールペインの外側までイベント処理されてしまう問題。 todo done: vscrollBar と hscrollBar の順序統一 todo done: clipping todo done: inspector を TextController.st に実装するのは適当か? Develop.st に移行 todo done: out of bounds とカーソル動作 TextView getOffset: point todo done: デモ用プログラムを別に分ける。 todo done: inspector 動くように * タートルグラフィックス lib/ (load "bunnu.k") { bunnu-program } * スクロール付きテキストウィジェットの問題 スクロールバー付きテキストウィジェットについて面白い問題を発見した。ス クロールが「自動」モード、すなわち、必要に応じて表示される設定を考える。 現在テキストは十分短く、スクロールバーが非表示になっている状態で、ユー ザが文字を沢山打ち込む。その際。 - 文字の量とテキストの幅に応じてレイアウトを行い、テキストの高さが計算される。 - テキストの高さが表示領域の高さを超えると、スクロールバーが表示される。 - スクロールバーが表示されるため、その分だけテキストの幅が減る。 - テキストの幅が減るため、テキストをレイアウトし直し、高さを再計算する。 つまり、テキストの高さがテキストの幅に依存し、テキストの幅(スクロールバー の表示/非表示)がテキストの高さに依存するという双方向の依存がある。つま り、下手に実装すると無限ループが生まれる。これを実装するためには次のよ うな方法があるだろう。 - テキストの高さを変更するルーチンに条件を入れて、もしも今と同じだけの 幅が指定された場合はレイアウトし直さない。 - スクロールバーがある場合と無い場合で、多くとも二回レイアウトを行う ウィジェットの大きさを指定するアクセッサでレイアウトを行う場合、前者の やり方が上手く行く、しかし、なんか汚い感じがするし、ループが停止する保 証が無い。後者のやりかたはバックトラックと考える事が出来るが、うまく実 装する方法が思い浮かばない。特にテキストウィジェットの入力でもリサイズ が発生するが、その際どうやってスクロール窓に処理を移せば良いのか分から ない。 というわけで、面倒なのでとりあえずレイアウトは一度しか行わない。もし表 示が崩れた際は、ユーザが適当にスクロールバーを操作して自分で直すのを期 待する事にした。 何でこんな事を書いたかというと、あとで暇な時に考えるネタにするため。 * レイアウト案 terminology fitting: in -> out layout: out -> in extent: は希望のサイズを Box に伝える。 Layout オブジェクトがある場合はレイアウトを委譲する。 Layout オブジェクトは extent: を使ってはならない。 extent は結果のサイズを返す。 問題: position はレイアウトに影響を与えないのか? -> 与えない。 処理の流れ Box >> extent: が外部から呼ばれる Box >> layoutContentsIn: aPoint Layout layout: aBox in: aPoint 子要素 の Box >> extent: Box >> layoutExtent: position が使えるという事は、コンテナがレイアウトを行わない場合。 Morphic の場合何故か fullBounds で行われる。 layoutExtent: を実装 extent: を削除 レイアウトだけ変えたい場合は? -> layout:in: TextView に適用 * slider まず Squeak のスライダーをそのまま実装する。 丸を表示する。 写真をクリッピングして表示する。 curl -O http://www.digibarn.com/digibarn-research-images/pa_alto2.jpg convert -geometry 800x800 -quality 20 pa_alto2.jpg alto.jpg * clipping Box drawContentsOn: aContext にて Box propertyAt: #clip を使う SDLImage _surface := SDL_Surface _pixmap := ピクセルデータ SDL_SetClipRect が使える。 ** bottle (lessphic) Views-scrolling.st ClippingView drawOn: aCanvas in: clipRectangle Cairo を使用 ** Morph FormCanvas>>clipBy:during: Form をコピーして使う * オリジナルソース function/example2/sdl と bottle2/sdl の相違点 todo done: オリジナルソースとの相違点をリストアップ。 - イベントハンドリング - ダメージ領域 * 主要クラス FrameBox : ウインドウ Glyph : 文字ビットマップ * 描画 leastphic/Box.st Box drawForegroundOn: aContext file:///Users/takashi/src/gtk+-2.14.4/docs/reference/gtk/html/index.html