Menu

#649 タブバーの「閉じるボタン」関連修正

None
closed
nobody
None
5
2013-08-01
2013-07-27
ryoji
No

Fix:「閉じるボタン」ONのときフォントの指定が効かない
Fix:「閉じるボタン」と「等幅」がONだと非アクティブタブ上のマウスオーバーでタブがハイライトしない
(↑一度タブを並べ替えるなどの操作をするとハイライトするようになる)

その他、
・オーナー描画スタイルの切替処理をRefresh()からLayoutTab()に移動
(設定やレイアウトの変更はLayoutTab()に集約し、Refresh()はタブの増減・入れ替えのみに戻した)
・Rev2127(フォント指定機能追加)でLayoutTab()に不正な変更(実害はなし)が紛れ込んでいたのを戻した

Discussion

  • ryoji

    ryoji - 2013-07-27

    Fix@DispTabClose_v146_r3241.patch

     
  • ryoji

    ryoji - 2013-07-27

    rev2127の一部の戻しはただ戻すのではだめなようで、フォントサイズ変更時にタブサイズがおかしくなっていました。
    修正版です。

     
  • ryoji

    ryoji - 2013-07-28

    いちおう、V147パッチでそれらしく動作しているようなのですが、CTabWnd::LayoutTab()の末尾に移動した「タブ余白設定」の部分がよくわかっていません。

    (1) 実行条件の絞り込み(必須ではない)
    起動時と設定変更時(「閉じるボタン」と「等幅」の切替時?)に絞って良いか
    (2) IsWin2000_or_later() を実行条件にしている理由
    (3) bDispTabClose && !bSameTabWidth による条件分けの意味
    bDispTabClose 単独でなく、&& !bSameTabWidth を追加しているのは何故?
    (4) TabCtrl_SetPadding に渡すパディングの数値
    「閉じるボタン」の有無で、水平方向パディング値を変えるのは何となくわかるのだけど、
    垂直方向パディング値を変える(0とDpiScaleY(3))のは何故?
    このパディング値によって縦横幅はどれだけ変わるのでしょう?
    横幅は「閉じるボタン」ありが14、なしが6になっているので差が8でそれほど大きくないですが…
    また、「閉じるボタン」ありの場合はアイコンの有無によっても文字末尾と×の隙間が違うように見えます。
    TabCtrl_SetPaddingの効果がよくわからないのですが、図解したサイトとか無いですかね~。

    自分は、まだしばらくはあまり時間が取れないので、これ以上の作業はできないかも、です。

     
    • syat

      syat - 2013-07-29

      タブが等幅の場合は右端からタブ内部に食い込むように閉じるボタンを描画し、等幅でない場合はSetPaddingを使ってタブ幅を広げてできた余白に描画します。
      (1) はい。等幅か否かで処理を分けているため、切り替え時に再設定が必要です。
      (2) TabCtrl_SetPaddingの最低バージョンがWin2000なためです。
      http://msdn.microsoft.com/en-us/library/windows/desktop/bb760698(v=vs.85).aspx
      (3) (1)と同様。
      (4) 等幅でない場合は横幅を14ピクセルひろげます。そうでない方はおそらくデフォルトのパディング値だと思います。試行錯誤してこの値になりました。

       

      Last edit: ryoji 2013-07-30
      • ryoji

        ryoji - 2013-07-30

        IsWin2000_or_later()は不要ですね。
        VS2008以前のMSDNを見てください。TabCtrl_SetPadding()はWindows NT 3.51, Windows 95で利用可能です。
        最近のMSDN(2010年以降)は各所に記載されているMinimum supportedを9x/NTからWin2000に書き換えてしまっているため、鵜呑みにしてはいけないです。(最近のMSDNだとTabCtrl_SetItem()のような基本マクロでさえWin2000になっているので確認してみてください)

        パディング数値についてはやはり試行錯誤の結果でしたか。
        ちょっと実験してみたところ、余白は以下のように配置される感じです。
        ■アイコン無しの場合は指定値×2だけタブ幅を広げて、広げた分の余白をテキストの左右(2箇所)に分配する
        ■アイコン有りの場合は指定値×3だけタブ幅を広げて、広げた分の余白をアイコンの左、アイコンとテキストの間、テキストの右(3箇所)に分配する
        (もちろんオーナードローなら余白はどこにどれだけ分配しようが自由です)

        あと、等幅でオーナードローの場合ですが、タブ幅はパディング指定とは無関係にTabCtrl_SetItemSize()の指定幅で決まり、描画もパディング指定とは無関係にタブ内のどこにでも自由な場所に描画できると思います。
        従って、等幅でないオーナードローの場合と同じパディング値を指定しても何も問題ないと思います。

        ということで、下にあるFix@DispTabClose_v148_r3241.patchの修正で良さそうに思いますが、見ていただけませんか?

         

        Last edit: ryoji 2013-07-30
        • syat

          syat - 2013-07-30

          なるほど勉強になります。
          タブの描画はやたら複雑だと感じていましたが、アイコンの有無でも変わってくるんですね・・・。
          Fix@DispTabClose_v148_r3241.patchで問題が修正されていることを確認しました

           
  • ryoji

    ryoji - 2013-07-29

    Ver 2.1.0 に対する追加修正
    Fix: 「[等幅]OFF、[閉じるボタン]ON」から「[等幅]ON、[閉じるボタン]OFF」への変更でタブのアイコンやテキストの描画位置がずれる
    Imp: [アイコン]ON時のタブのテキストと閉じるボタンの隙間を狭める調整

     

    Last edit: ryoji 2013-07-29
  • ryoji

    ryoji - 2013-08-01

    [r3283]でcommitしました。

     

    Related

    Commit: [r3283]

  • ryoji

    ryoji - 2013-08-01
    • status: open --> closed
     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.