Yusk's UseCase

プログラマの成れの果てTipsBlog

oF v0.8.4でウィンドウ上のカーソルが表示されない不具合の解決法

最近、oF v0.8.4で開発をしているが、ウィンドウ上のカーソルが表示されなくなるという問題に遭遇した(何らかのタイミングで正常に戻るときもある)。
oFの開発コミュニティでも不具合について認識している(GLFW関連の不具合とのこと)らしく、解決法が提示されていたので、まとめておく。

1. oF本体のフォルダにある
ofAppGLFWWindow.cpp

を開く。

2. 下記のメンバ関数を修正する
void ofAppGLFWWindow::motion_cb(GLFWwindow* windowP_, double x, double y)

上記の関数の開始直後(rotateMouseXY(ofGetOrientation(), x, y);呼び出し前)に

#ifdef TARGET_OSX
    [(NSWindow*)ofGetCocoaWindow() resetCursorRects];
#endif

を入れる。

3. 下記のメンバ関数を修正する
void ofAppGLFWWindow::mouse_cb(GLFWwindow* windowP_, int button, int state, int mods)

上記の関数の

if (state == GLFW_PRESS) {
(略)
}  else if (state == GLFW_RELEASE) {
(略)

if (state == GLFW_PRESS) {
#ifdef TARGET_OSX
    NSPoint position = [(NSWindow*)ofGetCocoaWindow() mouseLocationOutsideOfEventStream];
    int posY= abs(position.y-ofGetHeight());
    if(position.y>ofGetHeight())posY= (position.y-ofGetHeight())*-1;

    ofNotifyMousePressed((int)position.x, posY, button);
#else
    ofNotifyMousePressed(ofGetMouseX(), ofGetMouseY(), button);
#endif
    instance->buttonPressed=true;
}  else if (state == GLFW_RELEASE) {
(略)

に書き換える。

自分の環境では、これで一応表示されるようになった。
ただ、今度はクリックするとカーソルが消える(その後、移動すると表示される)問題が発生しているので、完全解決に向けて、これからも調べていきたい。