mirror of
https://github.com/minetest/irrlicht.git
synced 2024-12-27 00:17:30 +01:00
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;
|
||
|
}
|
||
|
|