Xのマウスカーソルのサイズについて

Xのマウスカーソルファイルの構造は、Man page of XCURSORのCURSOR FILESセクションに書いてあり(あるいはXcursor.hを見ても良い)、画像のheightとwidthはともに0x7fff以下でなければならない。
この制限はほとんどないに等しいが(さらにheight=widthである必要もない)、libXCursorのソースを見るとxcursorint.hの59行目でMAX_BITMAP_CURSOR_SIZEが64に定義されており、xlibcで定義されている各種APIを使うには、64x64以下であることが求められる。
さらにgnome-appearance-properties(「外観の設定」ダイアログ)のソースコードを調べると、gnome-control-center-2.22.2.1/capplets/common/gnome-theme-info.cの中で、

// ここまで省略

static GnomeThemeCursorInfo *
read_cursor_theme (GFile *cursor_theme_uri)
{
  GnomeThemeCursorInfo *cursor_theme_info = NULL;
  GFile *parent_uri, *cursors_uri;

  const gint filter_sizes[] = { 12, 16, 24, 32, 36, 40, 48, 64 };
  const gint num_sizes = G_N_ELEMENTS (filter_sizes);

// 中略

    for (i = 0; i < num_sizes; ++i) {
      cursor = XcursorLibraryLoadImage ("left_ptr", name, filter_sizes[i]);

      if (cursor) {
        if (cursor->size == filter_sizes[i]) {
          g_array_append_val (sizes, filter_sizes[i]);

          if (thumbnail == NULL && i >= 1)
            thumbnail = gdk_pixbuf_from_xcursor_image (cursor);
        }

        XcursorImageDestroy (cursor);
      }
    }

// 以下略

とfilter_sizes[]が定義されていて、カーソルテーマのleft_ptrの高さと幅がsize*1がこれらの数字(12,16,24,32,36,40,48,64)のどれかに等しくない場合は、ポインタタブにそのカーソルテーマが表示されず、選択できない。(tarボールからインストールした直後はサムネイル画像は無いもののカーソルテーマの名前は表示され、選択する事が出来る。)
この制限については、ComixCursorsの作者であるThomas Zajic氏の立てたBug 402656 – Cursor theme list displayも参照のこと。

これらの事からカーソルテーマを作るときは、できれば縦横同じ長さで12,16,24,32,36,40,48,64pxのいずれかにするべき。xcursorgenの第一フィールドを12,16,24,32,36,40,48,64のいずれかにするべき。とくに理由が無ければ標準的な32を選ぶと良い。


2008/08/15追記
(nominal) sizeに関する誤りを訂正。

*1:カーソルのsizeは「man Xcursor」にある通り「nominal size(名目上のサイズ)」で実際の画像の幅や高さとは関係ない。一つのファイルに複数のサイズのカーソルを格納する際のタグ付けに使われる。詳しくはマニュアル参照