Annotation of nono/wx/wxsubwindow.h, revision 1.1.1.7

1.1       root        1: //
                      2: // nono
1.1.1.2   root        3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
                      7: #pragma once
                      8: 
1.1.1.7 ! root        9: #include "wxnono.h"
1.1.1.6   root       10: 
                     11: class WXPaddingPanel;
1.1.1.2   root       12: 
1.1       root       13: //
                     14: // サブウィンドウ
                     15: //
                     16: // メインウィンドウのメニューから表示されて、表示されてる間チェック状態を
                     17: // 維持するタイプのウィンドウ。クローズ処理が共通に必要なだけで、中身に
                     18: // ついては関与していない。
1.1.1.7 ! root       19: class WXSubWindow : public wxFrame
1.1       root       20: {
1.1.1.7 ! root       21:        using inherited = wxFrame;
1.1       root       22:  public:
                     23:        static const int DEFAULT_STYLE =
                     24:                (wxDEFAULT_FRAME_STYLE | wxFRAME_FLOAT_ON_PARENT)
                     25:                & ~wxMAXIMIZE_BOX
                     26:                & ~wxRESIZE_BORDER;
                     27: 
                     28:  public:
                     29:        WXSubWindow(wxWindow *parent, wxWindowID id, const wxString& name,
                     30:                int style);
1.1.1.7 ! root       31:        WXSubWindow(wxWindow *parent, wxWindowID id, const wxString& name)
        !            32:                : WXSubWindow(parent, id, name, DEFAULT_STYLE) { }
1.1.1.5   root       33:        virtual ~WXSubWindow() override;
1.1       root       34: 
1.1.1.3   root       35:        // テキスト系パネルのフォントサイズ変更
                     36:        virtual void SetFontSize(FontId fontid);
1.1       root       37: 
                     38:  private:
                     39:        void OnClose(wxCloseEvent& event);
                     40: 
                     41:        wxDECLARE_EVENT_TABLE();
                     42: };
1.1.1.3   root       43: 
                     44: 
                     45: //
                     46: // 縦リサイズ可能なサブウィンドウ
                     47: //
                     48: class WXVResizeSubWindow : public WXSubWindow
                     49: {
                     50:        using inherited = WXSubWindow;
                     51:  public:
                     52:        WXVResizeSubWindow(wxWindow *parent, wxWindowID id, const wxString& name);
                     53:        virtual ~WXVResizeSubWindow() override;
                     54: 
                     55:        // テキスト系パネルのフォントサイズ変更
                     56:        void SetFontSize(FontId fontid) override;
                     57: 
                     58:        // ウィンドウサイズ再計算 (継承先による)
                     59:        virtual void DoSize() = 0;
                     60: 
                     61:  protected:
                     62:        // ウィンドウサイズを再計算の共通部分 (継承先 DoSize() から呼ばれる)
                     63:        void CalcVSize(int fixed);
                     64: 
                     65:        // 全体を収納する sizer
1.1.1.4   root       66:        wxBoxSizer *topsizer {};
1.1.1.3   root       67: 
                     68:        // テキストパネル
1.1.1.4   root       69:        WXTextScreen *screen {};
1.1.1.3   root       70: 
                     71:        // 上下パディング
1.1.1.6   root       72:        WXPaddingPanel *padding1 {};
                     73:        WXPaddingPanel *padding2 {};
                     74: };
                     75: 
                     76: //
                     77: // パディングパネル
                     78: //
                     79: // モニタウィンドウ系で使うテキストパネルは単純なキャラクタビットマップ構造
                     80: // のため、クライアント領域の端の1ピクセルまでふんだんに使用している。
                     81: // モニタウィンドウは本来このテキストパネルを一つ持つだけの単純なウィンドウ
                     82: // でよいはずだった。しかし、ウィンドウマネージャ側でこのウィンドウに余白なり
                     83: // 枠なりをつけてくれる場合はそれで問題ないが、余白(ふち)を一切つけないタイプ
                     84: // のウィンドウマネージャでこのウィンドウを表示するとウィンドウ境界に接する
                     85: // 文字の視認性が(文字とウィンドウ外の背景によっては)すこぶる悪い。
                     86: // そのため、こちらで余白パネルを用意する。なお wxSizer にも似たような
                     87: // パディング機能はあるが、このパディング領域の背景色はテキストパネルの背景色
                     88: // と異なっているため悪目立ちしてしまう。そのため、テキストパネルと背景色を
                     89: // 揃えたパネルをわざわざ用意する。
                     90: // サブウィンドウ系の人は、このパネルを四辺に貼り付けること。
                     91: class WXPaddingPanel : public wxPanel
                     92: {
                     93:        using inherited = wxPanel;
                     94: 
                     95:        // デフォルトの余白幅もしくは高さ [px]
                     96:        // 余白は、リサイズ可能なテキストウィンドウのリサイズ方向では1行の高さや
                     97:        // 1文字の幅の整数倍にしなければならない(したい)ので都度計算する必要が
                     98:        // あるが、そうでない固定方向については現在のフォントから計算とかも面倒
                     99:        // なのでとりあえず固定値としておく。単位は px。
                    100:        static const int DefaultPadding = 3;
                    101: 
                    102:  public:
                    103:        WXPaddingPanel(wxWindow *parent);
                    104:        WXPaddingPanel(wxWindow *parent_, const wxSize& size_);
                    105:        virtual ~WXPaddingPanel();
1.1.1.3   root      106: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.