<   2004年 11月 ( 4 )   > この月の画像一覧

[CoveredCalc for Windows] 1.0.2 をリリース

今回は(修正が)簡単な不具合をなおしました。

実は今回なおした不具合は 桝田道也さんが作ってくださったカバーを会社で使っていて気づいたものだったりします。
#全く関係ないですが、桝田さんの浅倉家騒動記はかなり笑えておすすめです。

これまでにリリースしたバージョンのバージョン番号がむちゃくちゃですね。
1.00 → 1.00.1 → 1.0.2

これからは、1.0.2 つまり、<メジャーバージョン>.<マイナーバージョン>.<リビジョン> の形式で統一します。(リビジョンはない場合もあります)
これは BeOS 版のことを考えた結果です。
メジャーバージョン、マイナーバージョンは実装される機能の仕様に変更や追加・削除があったときに変えます。
リビジョンはバグ修正だけで仕様に変化がないときにつけます。
つまり、Windows 版でも BeOS 版でも、例えば 1.1.x なら 1.1 の仕様を実装したものということです。
なので、もしかしたら、BeOS 版の初回リリースは 1.1 になる可能性もあります。
今のところ、BeOS 版の 1.0 (Windows 版の 1.0.x の機能を実装)を出すつもりなのでその予定はありませんが。
[PR]
by hironytic | 2004-11-29 13:39 | 開発状況

[CoveredCalc for BeOS] BColumnListView

カバーブラウザのリスト部分の色(BColumnListView のデフォルト設定色)が気に入らなかったので修正してやることにしました。
ところがやってみてわかったんですが、BColumnListView::SetColor() で色を設定しても全く反映されないものとかあるんですよね。選択テキストの色とかはソース上で全く使われていません。
まあ、作りかけの状態で終わってしまったんだと思うので仕方ないと言えば仕方ないのですが。

BColumnListView は Haiku OS の CVS レポジトリからとってきたものをそのまま手を加えずに使おうと考えていたんですが、やっぱり手を加えることにしました。
修正はしましたが、CoveredCalc の使い方で不都合があったところだけ。
それに修正方法も、周辺のコードを見て適当にやったので正しいのかどうか。(^^;

あと、まだ修正してないんですが、横方向にスクロールしたときに選択部分の描画が少し変です。
どうも、ビューの左端からビューの範囲(すなわちスクロールバーを左端に持って行ったときに表示される範囲)だけに何かやってる感じがします。

とりあえず、今回の修正点:
(CoveredCalc の Subversion リポジトリでとった差分。revision 201 が Haiku OS からとってきたオリジナルです。エディタか何かにコピペしないと意味不明かも…)
Index: ColumnListView.cpp
===================================================================
--- ColumnListView.cpp  (revision 201)
+++ ColumnListView.cpp  (revision 202)
@@ -2559,12 +2559,17 @@
   #if DOUBLE_BUFFERED_COLUMN_RESIZE
               fDrawBuffer->Lock();
               if (row->fNextSelected != 0) {
-                   if(fEditMode) {
-                       fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_EDIT_BACKGROUND));
-                       fDrawBufferView->SetLowColor(fMasterView->Color(B_COLOR_EDIT_BACKGROUND));
+                   if (Window()->IsActive()) {
+                       if(fEditMode) {
+                           fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_EDIT_BACKGROUND));
+                           fDrawBufferView->SetLowColor(fMasterView->Color(B_COLOR_EDIT_BACKGROUND));
+                       } else {
+                           fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_SELECTION));
+                           fDrawBufferView->SetLowColor(fMasterView->Color(B_COLOR_SELECTION));
+                       }
                   } else {
-                       fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_SELECTION));
-                       fDrawBufferView->SetLowColor(fMasterView->Color(B_COLOR_SELECTION));
+                       fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_NON_FOCUS_SELECTION));
+                       fDrawBufferView->SetLowColor(fMasterView->Color(B_COLOR_NON_FOCUS_SELECTION));
                   }
               } else {
                   fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_BACKGROUND));
@@ -2603,7 +2608,11 @@
                   fDrawBufferView->ConstrainClippingRegion(&clipRegion);
                   fDrawBufferView->PushState();
       #endif
-                   fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_TEXT));
+                   if (row->fNextSelected != 0) {
+                       fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_SELECTION_TEXT));
+                   } else {
+                       fDrawBufferView->SetHighColor(fMasterView->Color(B_COLOR_TEXT));
+                   }
                   float baseline = floor(fieldRect.top + fh.ascent
                                           + (fieldRect.Height()+1-(fh.ascent+fh.descent))/2);
                   fDrawBufferView->MovePenTo(fieldRect.left + 8, baseline);
@@ -2614,7 +2623,7 @@
       #endif
               }
   
-               if (fFocusRow == row) {
+               if (fFocusRow == row && fMasterView->IsFocus() && Window()->IsActive()) {
                   if(!fEditMode) {
                       fDrawBufferView->SetHighColor(0, 0, 0);
                       fDrawBufferView->StrokeRect(BRect(-1, sourceRect.top, 10000.0, sourceRect.bottom - 1));
@@ -2812,7 +2821,10 @@
                           ConstrainClippingRegion(&clipRegion);
                           PushState();
#endif
-                           SetHighColor(fMasterView->Color(B_COLOR_TEXT));
+                           if (row->fNextSelected != 0)
+                               SetHighColor(fMasterView->Color(B_COLOR_SELECTION_TEXT));
+                           else
+                               SetHighColor(fMasterView->Color(B_COLOR_TEXT));
                           float baseline = floor(destRect.top + fh.ascent
                                                   + (destRect.Height()+1-(fh.ascent+fh.descent))/2);
                           MovePenTo(destRect.left + 8, baseline);
[PR]
by hironytic | 2004-11-11 00:57 | 開発状況

[CoveredCalc for BeOS] カバーブラウザ

カバーブラウザでカバーが切り替えられるようになりました。
BeOS 独特のウィンドウごとにスレッドが別というところにちょっと悩まされました。
具体的には、カバーブラウザからの操作(つまり、カバーブラウザのスレッド)で、メインウィンドウの状態を切り替えるので、メインウィンドウのロックが必要なのです。
そのロックをどこで行うか悩んでしまいました。

そもそも、メインウィンドウの状態が切り替わるんだから、カバーブラウザはメインウィンドウにメッセージを送ったりしてメインウィンドウ自身に処理を行わせたらいいような気もしてきたんですが、Windows との設計の共有もあるのでそれは少し難しいのです。
このあたりの設計をしたのはずいぶん前なので、自分自身、どうなってるのかいまいち覚えてないのですが(^^; だいたい流れとしてはカバーブラウザ→(カバー変更依頼)→カバー管理クラス→(カバー変更イベント発生)→ UI 管理クラスときて、UI 管理クラスが自分に結び付いた UI 操作インタフェース経由で UI を操作するのです。BeOS版の場合、UI 操作インタフェースを実装しているのがメインウィンドウ内に1つだけ存在するビュー(BBiew継承クラス)です。
そういうわけで、カバーブラウザは最終的にメインウィンドウが影響を受けるなんてことは知らない(知るべきでない)のです。で、結局は、UI操作インタフェースが OS 間の相違を吸収してるわけで、そのインタフェースを実装しているビューのそのメソッドでロックをかけるようにしました。

まだカバーブラウザのウィンドウタブのボタンを押すとブラウザが消えてしまうのを防がなければいけませんが、とりあえず少し進んだかな、と思います。
[PR]
by hironytic | 2004-11-08 00:26 | 開発状況

[CoveredCalc] 小数点のバグ発見!

JPBE.net の Koki さんに CoveredCalc を発見していただきました。
まだ BeOS 版は開発中なのですが、JPBE.net で紹介していただけるということです。

(Zeta を持っていないので)Zeta での動作を確認してもらうために現状のものを Koki さんに送る際に、R5 で一応動くことを確認していたら小数点が入力できない(ことがある)バグを見つけてしまいました。
例えば、[1.2+3.4] と入力すると、後の小数点が入力されず、[1.2+34] になってしまいます。
電卓のエンジン部分は BeOS でも Windows でも共通のソースファイルのはずなので、もしやと思い、すでにリリース済みの Windows 版でも実行してみるとやっぱり発生!(泣)

ということで、今日はこれからデバッグです。
Windows 版はリリースしちゃってますからね。さすがに致命的なバグですし…。

(23:00; 追記)
修正しました。
いったん小数点を入力して小数部分を入力しているときに、再度小数点が入力できるとマズいので、小数部分を入力しているかどうかのフラグを持たせていたんですが、そのフラグをクリアするのを忘れていました。とほほ。
というわけで、Windows 版はバージョンアップしました
[PR]
by hironytic | 2004-11-03 21:19 | 開発状況