SDLでIM

what?

SDLはSDLSKKがあるんだけど、 やっぱ辞書とか必要だし、SKKだし(僕は大好きだけど…)、色々問題あると思うので、 システムのIM使えたらいいなぁ…っていう話。

で、ちょろっと試してみて、XIMのほうは一応動いたところ。もっと色々練る必要があるような。

XIM

SDL-1.2.7用パッチ。 それと適当に書いたメモか何かが。

なんか configure.in 変更したらautomakeのバージョンの問題だかなんだかでパッチが無駄に大きくなってしまった…

#include <stdio.h>
#include "SDL.h"

SDL_Surface *screen;

int 
main()
{
  SDL_Init( SDL_INIT_VIDEO );

  screen = SDL_SetVideoMode( 256, 256, 0, SDL_SWSURFACE|SDL_DOUBLEBUF );
  SDL_EnableUNICODE(1);

  SDL_SetIMPosition( 0, 100 );

  while ( 1 ) {
    SDL_Event ev;

    SDL_WaitEvent( &ev );

    if ( ev.type == SDL_KEYDOWN ) {
      SDL_KeyboardEvent *key = (SDL_KeyboardEvent*)&ev;

      if ( key->keysym.im_compose )
	fprintf(stderr, "str: %s\n", key->keysym.im_compose );

      if ( key->keysym.sym == SDLK_ESCAPE ) {
	break;
      }
    }
  }

  SDL_Quit();

  return 0;
}

IMによってフィルタリングされたあとの文字列がkeysym.im_composeに入ってます。 イベントはSDL_KEYDOWNで飛んできます。 文字コードはロケールに依存してます。

SDL_SetIMPositionで変換中文字の位置を指定できます。

問題

あと、Macとかその他OSのIMインターフェースは全然知らない&&テストできないので、 どうしようもない。Windowsはやる気さえあればなんとかなりそう。

hotmailのほうは一応見れるので、 何かいい案があったらメールください。BBSでも構いません。

参考

日本語入力プログラミング

XとWindowsでのIMの基本知識+使い方。とても参考になります。