curs_mouse 3x

curs_mouse(3x)                                           curs_mouse(3x)




名前

       has_mouse, getmouse, ungetmouse, mousemask, wenclose,
       mouse_trafo, wmouse_trafo, mouseinterval
       - curses によるマウス・インターフェイス


書式

       #include <curses.h>

       typedef unsigned long mmask_t;

       typedef struct {
           short id;         /* 複数デバイス識別用ID */
           int x, y, z;      /* イベント座標 */
           mmask_t bstate;   /* ボタン状態ビット */
       } MEVENT;

       bool has_mouse(void);
       int getmouse(MEVENT *event);
       int ungetmouse(MEVENT *event);
       mmask_t mousemask(mmask_t newmask, mmask_t *oldmask);
       bool wenclose(const WINDOW *win, int y, int x);
       bool mouse_trafo(int* pY, int* pX, bool to_screen);
       bool wmouse_trafo(const WINDOW* win, int* pY, int* pX,
            bool to_screen);
       int mouseinterval(int erval);


説明

        これらの関数は ncurses(3x) からマウスイベントへの
       インターフェイスを提供します。
        マウスイベントは wgetch 入力ストリームの
       擬似キー値 KEY_MOUSE で表されます。
       (訳注: wgetchcurs_getch(3x) 参照)


mousemask

        マウスイベントを可視化するには mousemask 関数を使います。
        これはマウスイベントを報告するように設定します。
        デフォルトでは、マウスイベントは報告されません。
        この関数は、どのマウスイベントが報告されるかを示すマスクを
       返します。完全に失敗した場合は 0 を返します。
        oldmask が NULL でない場合、この関数は指定されたウインドウの
       以前のマウスイベント・マスクの値をポインタの指す場所に
       格納します。
       (訳注: ウインドウに関連付ける引数はありません)

        副作用として、mousemask にゼロを設定するとマウスポインタが
       オフになることがあります。非ゼロ値のマスクを設定すると、
       オンになることがあります。
        これが起こるかどうかはデバイス依存です。


Mouse events マウスイベント

        定義されたマウスイベント型マスクを次の表に示します。

       名前                     説明
       ---------------------------------------------------------------------
       BUTTON1_PRESSED          マウスボタン 1 押下 (押されること)
       BUTTON1_RELEASED         マウスボタン 1 解放 (離されること)
       BUTTON1_CLICKED          マウスボタン 1 クリック
       BUTTON1_DOUBLE_CLICKED   マウスボタン 1 ダブルクリック
       BUTTON1_TRIPLE_CLICKED   マウスボタン 1 トリプルクリック
       ---------------------------------------------------------------------
       BUTTON2_PRESSED          マウスボタン 2 押下
       BUTTON2_RELEASED         マウスボタン 2 解放
       BUTTON2_CLICKED          マウスボタン 2 クリック
       BUTTON2_DOUBLE_CLICKED   マウスボタン 2 ダブルクリック
       BUTTON2_TRIPLE_CLICKED   マウスボタン 2 トリプルクリック
       ---------------------------------------------------------------------
       BUTTON3_PRESSED          マウスボタン 3 押下
       BUTTON3_RELEASED         マウスボタン 3 解放
       BUTTON3_CLICKED          マウスボタン 3 クリック
       BUTTON3_DOUBLE_CLICKED   マウスボタン 3 ダブルクリック
       BUTTON3_TRIPLE_CLICKED   マウスボタン 3 トリプルクリック
       ---------------------------------------------------------------------
       BUTTON4_PRESSED          マウスボタン 4 押下
       BUTTON4_RELEASED         マウスボタン 4 解放
       BUTTON4_CLICKED          マウスボタン 4 クリック
       BUTTON4_DOUBLE_CLICKED   マウスボタン 4 ダブルクリック
       BUTTON4_TRIPLE_CLICKED   マウスボタン 4 トリプルクリック
       ---------------------------------------------------------------------
       BUTTON5_PRESSED          マウスボタン 5 押下
       BUTTON5_RELEASED         マウスボタン 5 解放
       BUTTON5_CLICKED          マウスボタン 5 クリック
       BUTTON5_DOUBLE_CLICKED   マウスボタン 5 ダブルクリック
       BUTTON5_TRIPLE_CLICKED   マウスボタン 5 トリプルクリック
       ---------------------------------------------------------------------
       BUTTON_SHIFT             ボタンの状態変化中にシフト押下
       BUTTON_CTRL              ボタンの状態変化中にコントロール押下
       BUTTON_ALT               ボタンの状態変化中に Alt 押下
       ALL_MOUSE_EVENTS         すべてのボタン状態変化を報告する
       REPORT_MOUSE_POSITION    マウスの動きを報告する
       ---------------------------------------------------------------------


getmouse

        ウインドウでマウスイベントの種類が可視になった後、
       そのウインドウで wgetch 関数を呼び出すと、マウスイベントが
       キューにあることを知らせるため KEY_MOUSE を返します。
        イベントのデータを読み出し、キューからイベントを
       取り出すには、getmouse を呼び出します。
        この関数は、指定のウインドウでマウスイベントが実際に
       可視ならば OK を、そうでなければ ERR を返します。
        getmouseOK を返したとき、イベント構造体の座標 y と x 
       として置かれたデータは、文字を置くマスの、画面に相対的な
       座標です。
        返された状態マスクは、イベントの種類を示すため、きっかり 
       1 ビットがセットされています。
        キュー中の対応するデータは無効としてマークされます。
        続けて getmouse を呼び出すと、キューから次に古い項目を
       取り出します。


ungetmouse

        ungetmouse 関数の動作は ungetch に似ています。
        KEY_MOUSE イベントを入力キューに戻し、そのイベントと
       与えられた (ボタン) 状態データや、マスの画面に相対的な座標を
       結びつけます。
       (訳注: ungetchcurs_getch(3x) 参照)


wenclose

        wenclose 関数はマスの画面に相対的な座標の与えられた組が
       与えられたウインドウに含まれるかどうかを調べ、
       そうであれば TRUE を、そうでなければ FALSE を返します。
        これはマウスイベントの位置がどのウインドウに含まれるかを
       決めるために便利です。


wmouse_trafo

        wmouse_trafo 関数は、与えられた座標の組を stdscr に相対的な
       座標から与えられたウインドウに相対的な座標へと変換します。
       または、その逆を行います。
        変換結果である stdscr に相対的な座標は、常にウインドウに
       相対的な座標と同じとは限りません。
        これは、他の用途のために画面の最上部または最下部の行を
       予約するしくみがあるためです。(例えば ripofflineslk_init 
       呼び出しを参照)

       o   引数 to_screenTRUE のとき、ポインタ pY, pX は
           ウインドウ win 内の座標を参照していなければなりません。
           これらはウインドウに相対的な座標に変換され、
           ポインタを通して値が返されます。
           正常に変換されると、関数は TRUE を返します。

       o   引数のどれかが NULL だったとき、
           または位置がウインドウの中でないとき、FALSE を返します。

       o   引数 to_screenFALSE のとき、pY, pX は
           ウインドウに相対的な座標を参照していなければなりません。
           ウインドウ win がこの点を含んでいれば、これらは stdscr に
           相対的な座標に変換されます。
           この場合、関数は TRUE を返します。

       o   引数のどれかが NULL だったとき、
           または位置がウインドウの中でないとき、FALSE を返します。
           正常に変換されると、参照される座標は変換後の座標に
           単に置き換えられます。


mouse_trafo

        mouse_trafo 関数は win として stdscr を使って 
       wmouse_trafo と同じ変換を行います。


mouseinterval

        mouseinterval 関数は、クリックとして認識される押下と解放の
       イベントの間に経過する最大の時間 (千秒単位) を設定します。
       (訳注: 千分の 1 秒単位か)
        クリックの分離を無効にするには mouseinterval(0) を
       使ってください。
        この関数は以前の間隔値を返します。
        値を変化させずに時間間隔を得るには mouseinterval(-1) を
       使ってください。
        デフォルト値は 1/6 秒です。


has_mouse

        has_mouse 関数はマウスドライバが正常に初期化されていれば 
       TRUE を返します。

        入力が cooked モードのとき、マウスイベントは無視されること、
       そして入力ループを終了するために改行を期待する getstr のような
       関数によって cooked モードがウインドウでシミュレート
       されているときマウスイベントはエラー音を発生させることに
       注意してください。
       (訳注: cooked モード … curs_inopts(3x) 参照)


戻り値

        getmouseungetmouse は失敗のとき整数 ERR を、
       正常終了のとき OK を返します。

          getmouse
               次の場合にエラーを返します。

          o   マウスドライバが初期化されていなかったとき、
              またはマスク引数がゼロのとき
               (訳注: mousemasknewmask か) 

          o   キューにそれ以上イベントがない場合にもエラーを返します

          ungetmouse
               キューに空きがない場合にエラーを返します。

        mousemask は報告可能なイベントのマスクを返します。

        mouseinterval は直前の間隔値を返します。ただし端末が
       初期化されていなかった場合を除きます。この場合には
       最大の間隔値 (166) を返します。

        wenclosewmouse_trafo はそれぞれの調査結果によって 
       TRUE または FALSE を返すブール値関数です。


移植性

        これらの呼び出しは ncurses(3x) 用に設計されており、
       SVr4 curses, 4.4BSD curses, その他 curses の以前の
       バージョンにはみられません。

        機能が存在するかどうかをプリプロセッサを使って調べるために
       マクロ NCURSES_MOUSE_VERSION が提供されます。
        インターフェイスが変更されると、NCURSES_MOUSE_VERSION の値は
       増加します。
        ncurses を構成するとき NCURSES_MOUSE_VERSION に次の値が
       設定されます。

          1  予約されたイベントのための定義を持ちます。
             マスクは 28 ビットを使います。

          2  ボタン 5 の定義を加え、予約されたイベントのための定義を
             削除しています。
             マスクは 29 ビットを使います。

        MEVENT 構造体のメンバの順序は保証されません。
        将来、構造体に追加の項目が加えられるかもしれません。

        ncurses(3x) では、これらの呼び出しは xterm の組込みマウス(追跡) 
       API も、プラットフォーム依存の以下を含むドライバも使うように
       実装されています。

          o   Alessandro Rubini's gpm server

          o   FreeBSD sysmouse

          o   OS/2 EMX

        サポートされていない構成を使っている場合、マウスイベントは 
       ncurses(3x) で可視になりません。(そして mousemask 関数は常に 
       0 を返します。)

        terminfo 収録項目に XM 文字列が含まれていれば、
       xterm マウスドライバがマウス操作のために端末を初期化する方法を
       制御するために使われます。
        デフォルトで、XM が見つからない場合、xterm の
       プライベート・モード 1000 に対応するのは

          \E[?1000%?%p1%{1}%=%th%el%;
       です。

        イベント構造体のメンバ z は現在使われていません。
        これは (感圧式などの) タッチスクリーンや3Dマウス、
       トラックボール、パワーグローブで使うことを意図したものです。

        ALL_MOUSE_EVENTS クラスは REPORT_MOUSE_POSITION を含みません。
        両者は別のものです。
        例えば、xterm では、ホイールマウス、スクロールマウスは
       位置情報をボタン 4 または 5 の一連の押下として送信し、
       ボタン解放とのマッチングをしません。


バグ

        xterm でのマウスイベントは、もし mousemask で有効に
       なっている場合には、実のところ cooked モードの間、
       無視されません。
        代わりに xterm マウス報告シーケンスが読み込んだ文字列中に
       現れます。

        keypad ビットがオフのウインドウでは xterm のマウスイベントは
       種々のファンクションキーに変換されるため正しく検出されません。
        terminfo 記述で kmous を "\E[M" に設定しなくてはなりません
        (xterm からのマウスクリックの応答の開始) 。
         kmous の他の値も許されますが、同じ仮定のもとで、
        つまり応答の開始としてです。
       (訳注: keypadcurs_inopts(3x) 参照)

        xterm マウス・プロトコルをサポートする端末を
       識別するのに役立つ標準的な端末応答が存在しないため、
       環境変数 $TERM が "xterm" を含んでいるか、
       または端末記述の中に kmous が定義されている場合に、
       端末がマウスイベントを送れるものと ncurses は仮定します。


関連項目

       curses(3x),  curs_kernel(3x),   curs_slk(3x),
       curs_variables(3x).



                                                         curs_mouse(3x)