Annotation of nono/wx/wxsoftkey.h, revision 1.1.1.2

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: 
                      9: #include "wxsubwindow.h"
                     10: #include "wxtextpanel.h"
                     11: #include "keyboard.h"
                     12: #include <array>
                     13: #include <vector>
                     14: 
                     15: // キー描画用のデータ構造体
                     16: struct keydata_t
                     17: {
                     18:        // フォントサイズの切り替えに対応するため、座標系の単位はピクセルでは
                     19:        // ない点に注意。フォントサイズ(高さ)の 1/4 を 1 と表現する。つまり
                     20:        // どのフォントサイズでも半角1文字は 2 x 4。
                     21:        int x;  // このキー枠の左上点
                     22:        int y;  // このキー枠の左上点
                     23:        int w;  // このキー枠の幅
                     24:        int h;  // このキー枠の高さ
1.1.1.2 ! root       25: 
        !            26:        // 色種別
        !            27:        // LUNA の場合はキートップ色の区別に使う。1=濃い, 0=通常。
        !            28:        // X68k では使用しない。
        !            29:        int coltype;
        !            30: 
        !            31:        int led;                        // -1ならLEDなし、0以上なら LED 番号
1.1       root       32:        uint keycode;           // キーコード (keyboard.h の KC_*)
1.1.1.2 ! root       33: 
1.1       root       34:        // 刻印
                     35:        // [0]: 通常
                     36:        // [1]: SHIFT時 (NULL なら通常のまま)
                     37:        const char *disp[2];
                     38: 
                     39:        int right() const { return x + w; }             // このキー枠の右
                     40:        int bottom() const { return y + h; }    // このキー枠の下
                     41: };
                     42: 
1.1.1.2 ! root       43: // ソフトウェアキーボード (パネル) 共通部分
        !            44: class WXSoftKeyPanel : public WXTextPanel
1.1       root       45: {
1.1.1.2 ! root       46:        using inherited = WXTextPanel;
        !            47:  protected:
        !            48:        // 色の集合(パレット)
        !            49:        struct ColorPalette {
        !            50:                wxColour Background;    // 背景というかガワの部分の色
        !            51:                wxColour Text;                  // 文字色
        !            52:                wxColour Keytop[2];             // キートップ色。0:通常色、1:(あれば)濃色
        !            53:                wxColour KeyPressed;    // キーが押された時のキートップ色
        !            54:                wxColour Border;                // LED 枠の薄い輪郭色
        !            55:                wxColour LED[2];                // LED。色は各機種定義 (今のところ0:赤 1:緑)
        !            56:        };
        !            57: 
1.1       root       58:  public:
1.1.1.2 ! root       59:        WXSoftKeyPanel(wxWindow *parent, int u_width_, int u_height_);
        !            60:        virtual ~WXSoftKeyPanel();
1.1       root       61: 
                     62:        // フォントサイズ変更
                     63:        void SetFontSize(fontsize_t fontsize);
                     64: 
1.1.1.2 ! root       65:  protected:
        !            66:        void InitLED();
1.1       root       67:        void DoSize();
                     68:        void OnSize(wxSizeEvent& event);
                     69:        void OnPaint(wxPaintEvent& event);
1.1.1.2 ! root       70: 
1.1       root       71:        void Draw(wxDC& dc);
                     72:        void DrawKey(wxDC& dc, const keydata_t& key);
                     73:        void DrawEnterKey(wxDC& dc);
                     74:        void DrawEnterMark(wxDC& dc, const wxPoint& basep);
1.1.1.2 ! root       75:        virtual int DrawLED(wxDC& dc, const keydata_t& key) = 0;
1.1       root       76:        const keydata_t& FindKeydata(uint) const;
                     77: 
                     78:        void OnLeftDown(wxMouseEvent& event);
1.1.1.2 ! root       79:        void DoLeftDown(const keydata_t *key);
1.1       root       80:        void OnLeftUp(wxMouseEvent& event);
1.1.1.2 ! root       81:        void DoLeftUp(const keydata_t *key);
1.1       root       82:        void OnLeftDClick(wxMouseEvent& event);
                     83:        void OnRightDown(wxMouseEvent& event);
1.1.1.2 ! root       84:        virtual void KeyDown(const keydata_t& key) = 0;
        !            85:        virtual void KeyUp(const keydata_t& key) = 0;
        !            86: 
        !            87:        const keydata_t *GetKeydataFromPoint(const wxPoint& pt) const;
1.1       root       88: 
                     89:        // 押されていれば true (左クリック、右クリック区別なく両方)。
                     90:        // 共通キーコードによる配列。
                     91:        std::array<bool, KC_max> hit {};
                     92: 
1.1.1.2 ! root       93:        // 左クリック押下時のキー
        !            94:        const keydata_t *leftdown_key = NULL;
1.1       root       95: 
                     96:        // 修飾キーの状態 (刻印を変更するため)
                     97:        enum {
                     98:                ModNormal = 0,
                     99:                ModShift,
                    100:        } modifier {};
                    101: 
                    102:        // フォントサイズに相対的な描画単位
                    103:        int unit = 0;
                    104: 
1.1.1.2 ! root      105:        // コントロールのサイズ [基準単位]
        !           106:        int u_width = 0;
        !           107:        int u_height = 0;
        !           108: 
        !           109:        // コントロールのサイズ [px]
1.1       root      110:        int view_width = 0;
                    111:        int view_height = 0;
                    112: 
1.1.1.2 ! root      113:        std::unique_ptr<uint8[]> bmpbuf {};
        !           114:        std::unique_ptr<wxImage> image {};
        !           115:        std::unique_ptr<wxBitmap> bitmap {};
1.1       root      116: 
                    117:        // エンター記号の周囲の点集合
                    118:        std::vector<wxPoint> enter_points;
                    119:        wxRegion enter_region;
                    120: 
1.1.1.2 ! root      121:        // 色
        !           122:        ColorPalette color {};
        !           123: 
1.1       root      124:        // UTF-8 -> CP932 変換
                    125:        // Unicode の "\\" は Shift_JIS に対応する文字がないため、これを
                    126:        // Unicode から Shift_JIS に変換すると "" になり、これではキートップが
                    127:        // 刻印できなくて困る。
                    128:        // CP932 なら "\\" を変換しても "\\" ('\x5c') になってくれるので、
                    129:        // これを使う。この \x5c をバックスラッシュだと思うか円記号だと思うかは
                    130:        // こちらで決める。
                    131:        wxCSConv conv { "CP932" };
                    132: 
1.1.1.2 ! root      133:        // キー描画データ
        !           134:        virtual const std::vector<keydata_t>& GetKeydata() const = 0;
        !           135: 
1.1       root      136:        // イベントテーブル
                    137:        wxDECLARE_EVENT_TABLE();
1.1.1.2 ! root      138: };
        !           139: 
        !           140: // LUNA ソフトウェアキーボード (パネル)
        !           141: class WXLunaSoftKeyPanel : public WXSoftKeyPanel
        !           142: {
        !           143:        using inherited = WXSoftKeyPanel;
        !           144:  public:
        !           145:        WXLunaSoftKeyPanel(wxWindow *parent);
        !           146:        virtual ~WXLunaSoftKeyPanel();
        !           147: 
        !           148:  private:
        !           149:        virtual int DrawLED(wxDC& dc, const keydata_t& key);
        !           150:        virtual void KeyDown(const keydata_t& key);
        !           151:        virtual void KeyUp(const keydata_t& key);
1.1       root      152: 
                    153:        // キー描画データ
1.1.1.2 ! root      154:        virtual const std::vector<keydata_t>& GetKeydata() const { return keydata; }
        !           155:        static std::vector<keydata_t> keydata;
        !           156: };
        !           157: 
        !           158: // X68k ソフトウェアキーボード (パネル)
        !           159: class WXX68kSoftKeyPanel : public WXSoftKeyPanel
        !           160: {
        !           161:        using inherited = WXSoftKeyPanel;
        !           162:  public:
        !           163:        WXX68kSoftKeyPanel(wxWindow *parent);
        !           164:        virtual ~WXX68kSoftKeyPanel();
        !           165: 
        !           166:  private:
        !           167:        virtual int DrawLED(wxDC& dc, const keydata_t& key);
        !           168:        virtual void KeyDown(const keydata_t& key);
        !           169:        virtual void KeyUp(const keydata_t& key);
        !           170: 
        !           171:        // キー描画データ
        !           172:        virtual const std::vector<keydata_t>& GetKeydata() const { return keydata; }
1.1       root      173:        static std::vector<keydata_t> keydata;
                    174: };
                    175: 
                    176: // LUNA ソフトウェアキーボード (ウィンドウ)
                    177: class WXLunaSoftKeyWindow : public WXSubWindow
                    178: {
1.1.1.2 ! root      179:        using inherited = WXSubWindow;
1.1       root      180:  public:
                    181:        WXLunaSoftKeyWindow(wxWindow *parent, wxWindowID id);
                    182:        virtual ~WXLunaSoftKeyWindow();
                    183: 
                    184:        virtual void SetFontSize(fontsize_t fontsize);
                    185:  private:
                    186:        // キーボードパネル
                    187:        WXLunaSoftKeyPanel *panel = NULL;
                    188: };
1.1.1.2 ! root      189: 
        !           190: // X68k ソフトウェアキーボード (ウィンドウ)
        !           191: class WXX68kSoftKeyWindow : public WXSubWindow
        !           192: {
        !           193:        using inherited = WXSubWindow;
        !           194:  public:
        !           195:        WXX68kSoftKeyWindow(wxWindow *parent, wxWindowID id);
        !           196:        virtual ~WXX68kSoftKeyWindow();
        !           197: 
        !           198:        virtual void SetFontSize(fontsize_t fontsize);
        !           199:  private:
        !           200:        // キーボードパネル
        !           201:        WXX68kSoftKeyPanel *panel = NULL;
        !           202: };

unix.superglobalmegacorp.com

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