STR #2427

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 Home  |  Articles & FAQs  |  Bugs & Features  |  Documentation  |  Download  |  Screenshots  ]
 

Return to Bugs & Features | Roadmap 2.0 | Post Text | Post File | SVN ⇄ GIT ]

STR #2427

Application:FLTK Library
Status:5 - New
Priority:3 - Moderate, e.g. unable to compile the software
Scope:2 - Specific to an operating system
Subsystem:Unassigned
Summary:Strange cursor behavior in child GlWindow
Version:2.0-current
Created By:don_dempsey
Assigned To:Unassigned
Fix Version:Unassigned
Update Notification:

Receive EMails Don't Receive EMails

Trouble Report Files:

Post File ]

No files


Trouble Report Comments:

Post Text ]
Name/Time/Date Text top right image
 
#1 don_dempsey
21:35 Oct 07, 2010
Inside the handle() method of a GlWindow that is a child of a Window, my code changes the cursor's display type based on the event parameter that was provided. I handle the events fltk::ENTER and fltk::MOVE by attempting to change the cursor to CURSOR_CROSS and I handle fltk::LEAVE by changing the cursor back to CURSOR_DEFAULT. The cursor changes as expected upon an fltk::ENTER event but immediately changes back to CURSOR_DEFAULT when the next event is handled (usually fltk::MOVE).

Note that if the left mouse button is down while the mouse enters the child GlWindow, the cursor behaves correctly (remaining CURSOR_CROSS until fltk::LEAVE is handled and it returns to CURSOR_DEFAULT).

Also note that this only appears to occur in Windows (tested on XP and Windows 7).

The following test code can be used to reproduce the error:


/*-----------------------------------------------------------*/
// Compiled on my ubuntu and msys boxes with fltk2-config
// --use-gl --configure text.cxx
// linked against ws2_32.lib, fltk2.lib, fltk2_gl.lib,
// glu32.lib and opengl32.lib under msvs

#include <fltk/GlWindow.h>
#include <fltk/events.h>
#include <fltk/Cursor.h>
#include <fltk/run.h>
#include <fltk/gl.h>
#include <cstdio>

using namespace fltk;

class RR_GlWindow : public GlWindow {
     void draw() {
         if (!valid()) {
             valid(1);
             glLoadIdentity();
             glViewport(0,0,w(),h());
             glOrtho(-w(),w(),-h(),h(),-1,1);
         }
         glClearColor(1.0, 1.0, 1.0, 0.0);
         glClear(GL_COLOR_BUFFER_BIT);
        // Draw white 'X'
        glColor3f(0.0, 0.0, 0.0);
        glBegin(GL_LINE_STRIP);
             glVertex2i(w(), h());
             glVertex2i(-w(),-h());
        glEnd();
        glBegin(GL_LINE_STRIP);
             glVertex2i(w(),-h());
             glVertex2i(-w(), h());
        glEnd();
     }
public:
     RR_GlWindow(int x, int y, int w, int h, const char* label=0) :
         GlWindow(x,y,w,h,label) {};
     int handle(int e) {
         int ret = GlWindow::handle(e);
         switch(e) {
             case fltk::ENTER:
                 this->cursor(CURSOR_CROSS);
                 return 1;
             default:
                 return ret;
         }
     }
};

int main(){
     Window win(10, 10, 1000, 800, "");
     win.begin();
     RR_GlWindow mygl(10, 10, 400, 400);
     win.end();
     win.show();
     return run();
}

/*-----------------------------------------------------------*/

Note that fltk::MOVE and fltk::LEAVE are not handled in the code example (as described above) but these are not required in order to demonstrate the incorrect cursor behavior.
 
bottom left image   bottom right image

Return to Bugs & Features | Post Text | Post File ]

 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.