git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6000 dfc29bdd-3216-0410-991c-e03cc46cb475
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (C) 2008-2012 Colin MacDonald
 | |
| // No rights reserved: this software is in the public domain.
 | |
| 
 | |
| #include "testUtils.h"
 | |
| 
 | |
| using namespace irr;
 | |
| using namespace core;
 | |
| 
 | |
| struct TrapMouseMoves : IEventReceiver
 | |
| {
 | |
| 	int MouseMovesReceived;
 | |
| 
 | |
| 	TrapMouseMoves() : MouseMovesReceived(0) { }
 | |
| 
 | |
| 	virtual bool OnEvent(const SEvent & event)
 | |
| 	{
 | |
| 		if(event.EventType == EET_MOUSE_INPUT_EVENT
 | |
| 			&& event.MouseInput.Event == EMIE_MOUSE_MOVED)
 | |
| 			MouseMovesReceived++;
 | |
| 
 | |
| 		return false;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| /** This test verifies that setting the cursor visibility
 | |
| 	only generates a mouse message when it actually changes */
 | |
| bool cursorSetVisible(void)
 | |
| {
 | |
| 	IrrlichtDevice * device = createDevice(video::EDT_SOFTWARE, dimension2d<u32>(1, 1));
 | |
| 	TrapMouseMoves moveTrapper;
 | |
| 	device->setEventReceiver(&moveTrapper);
 | |
| 
 | |
| 	device->run();
 | |
| 
 | |
| 	gui::ICursorControl * cursor = device->getCursorControl();
 | |
| 
 | |
| 	// Move the cursor inside the Irrlicht window so that we get messages for it.
 | |
| 	cursor->setPosition(0, 0);
 | |
| 	device->run(); // Receive any messages
 | |
| 
 | |
| 	cursor->setVisible(false); // Should generate a mouse move
 | |
| 	device->run(); // Receive any messages
 | |
| 
 | |
| 	cursor->setVisible(false); // Should not generate a mouse move
 | |
| 	device->run(); // Receive any messages
 | |
| 
 | |
| 	cursor->setVisible(true); // Should generate a mouse move
 | |
| 	device->run(); // Receive any messages
 | |
| 
 | |
| 	cursor->setVisible(true); // Should not generate a mouse move
 | |
| 	device->run(); // Receive any messages
 | |
| 
 | |
| 
 | |
| 	// We should get at most 3 messages: one for the setPosition(), and one for
 | |
| 	// each actual change of visibility.
 | |
| 	bool result = (moveTrapper.MouseMovesReceived <= 3);
 | |
| 
 | |
| 	device->closeDevice();
 | |
| 	device->run();
 | |
| 	device->drop();
 | |
| 
 | |
| 	if(!result)
 | |
| 	{
 | |
| 		logTestString("ERROR: cursorSetVisible received %d events.\n", moveTrapper.MouseMovesReceived);
 | |
| 		assert_log(false);
 | |
| 	}
 | |
| 
 | |
| 	return result;
 | |
| }
 | |
| 
 |