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

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2019 [email protected]
                      4: //
                      5: 
                      6: #pragma once
                      7: 
                      8: #include "wxsubwindow.h"
                      9: #include "wxtextpanel.h"
                     10: #include "keyboard.h"
                     11: #include <array>
                     12: #include <vector>
                     13: 
                     14: // キー描画用のデータ構造体
                     15: struct keydata_t
                     16: {
                     17:        // フォントサイズの切り替えに対応するため、座標系の単位はピクセルでは
                     18:        // ない点に注意。フォントサイズ(高さ)の 1/4 を 1 と表現する。つまり
                     19:        // どのフォントサイズでも半角1文字は 2 x 4。
                     20:        int x;  // このキー枠の左上点
                     21:        int y;  // このキー枠の左上点
                     22:        int w;  // このキー枠の幅
                     23:        int h;  // このキー枠の高さ
                     24:        int coltype;            // キートップの色(1:濃, 0:薄)
                     25:        uint keycode;           // キーコード (keyboard.h の KC_*)
                     26:        // 刻印
                     27:        // [0]: 通常
                     28:        // [1]: SHIFT時 (NULL なら通常のまま)
                     29:        const char *disp[2];
                     30: 
                     31:        int right() const { return x + w; }             // このキー枠の右
                     32:        int bottom() const { return y + h; }    // このキー枠の下
                     33: };
                     34: 
                     35: class WXLunaSoftKeyPanel : public WXTextPanel
                     36: {
                     37:        typedef WXTextPanel inherited;
                     38:  public:
                     39:        WXLunaSoftKeyPanel(wxWindow *parent);
                     40:        ~WXLunaSoftKeyPanel();
                     41: 
                     42:        // フォントサイズ変更
                     43:        void SetFontSize(fontsize_t fontsize);
                     44: 
                     45:  private:
                     46:        void DoSize();
                     47:        void OnSize(wxSizeEvent& event);
                     48:        void OnPaint(wxPaintEvent& event);
                     49:        void Draw(wxDC& dc);
                     50:        void DrawKey(wxDC& dc, const keydata_t& key);
                     51:        void DrawEnterKey(wxDC& dc);
                     52:        void DrawEnterMark(wxDC& dc, const wxPoint& basep);
                     53:        const wxColour GetTopColor(const keydata_t& key) const;
                     54:        const keydata_t& FindKeydata(uint) const;
                     55: 
                     56:        void OnLeftDown(wxMouseEvent& event);
                     57:        void DoLeftDown(uint code);
                     58:        void OnLeftUp(wxMouseEvent& event);
                     59:        void DoLeftUp(uint code);
                     60:        void OnLeftDClick(wxMouseEvent& event);
                     61:        void OnRightDown(wxMouseEvent& event);
                     62:        void KeyDown(uint code);
                     63:        void KeyUp(uint code);
                     64:        uint GetKeycodeFromPoint(const wxPoint& pt) const;
                     65: 
                     66:        // XXX どうするかね
                     67:        bool black_keyboard = false;
                     68: 
                     69:        // LED キーなら true を返す
                     70:        bool IsLEDKey(uint code) const {
                     71:                return (code == KC_CAPS || code == KC_kana);
                     72:        }
                     73: 
                     74:        // 押されていれば true (左クリック、右クリック区別なく両方)。
                     75:        // 共通キーコードによる配列。
                     76:        std::array<bool, KC_max> hit {};
                     77: 
                     78:        // 左クリック押下時の keycode
                     79:        uint leftdown_keycode = 0;
                     80: 
                     81:        // LED
                     82:        bool led_cap = false;
                     83:        bool led_kana = false;
                     84: 
                     85:        // 修飾キーの状態 (刻印を変更するため)
                     86:        enum {
                     87:                ModNormal = 0,
                     88:                ModShift,
                     89:        } modifier {};
                     90: 
                     91:        // フォントサイズに相対的な描画単位
                     92:        int unit = 0;
                     93: 
                     94:        // コントロールのサイズ
                     95:        int view_width = 0;
                     96:        int view_height = 0;
                     97: 
                     98:        uint8 *bmpbuf = NULL;
                     99:        wxImage *image = NULL;
                    100:        wxBitmap *bitmap = NULL;
                    101: 
                    102:        // エンター記号の周囲の点集合
                    103:        std::vector<wxPoint> enter_points;
                    104:        wxRegion enter_region;
                    105: 
                    106:        // UTF-8 -> CP932 変換
                    107:        // Unicode の "\\" は Shift_JIS に対応する文字がないため、これを
                    108:        // Unicode から Shift_JIS に変換すると "" になり、これではキートップが
                    109:        // 刻印できなくて困る。
                    110:        // CP932 なら "\\" を変換しても "\\" ('\x5c') になってくれるので、
                    111:        // これを使う。この \x5c をバックスラッシュだと思うか円記号だと思うかは
                    112:        // こちらで決める。
                    113:        wxCSConv conv { "CP932" };
                    114: 
                    115:        // イベントテーブル
                    116:        wxDECLARE_EVENT_TABLE();
                    117: 
                    118:        // キー描画データ
                    119:        static std::vector<keydata_t> keydata;
                    120: };
                    121: 
                    122: //
                    123: // LUNA ソフトウェアキーボード (ウィンドウ)
                    124: //
                    125: class WXLunaSoftKeyWindow : public WXSubWindow
                    126: {
                    127:        typedef WXSubWindow inherited;
                    128:  public:
                    129:        WXLunaSoftKeyWindow(wxWindow *parent, wxWindowID id);
                    130:        virtual ~WXLunaSoftKeyWindow();
                    131: 
                    132:        virtual void SetFontSize(fontsize_t fontsize);
                    133:  private:
                    134:        // キーボードパネル
                    135:        WXLunaSoftKeyPanel *panel = NULL;
                    136: };

unix.superglobalmegacorp.com

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