Minor improvements and cleanup for example 24.CursorControl

- ESC now also makes cursor visible again (probably first key users press in panic usually)
- Bunch of spelling fixes
- Let all words in UI elements start with upper-case

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6317 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien 2022-03-25 17:54:28 +00:00
parent 60538c3646
commit f0c890d3ff

View File

@ -1,6 +1,6 @@
/** Example 024 CursorControl /** Example 024 CursorControl
Show how to modify cursors and offer some useful tool-functions for creating cursors. Show how to modify cursors and offer some useful tool functions for creating cursors.
It can also be used for experiments with the mouse in general. It can also be used for experiments with the mouse in general.
*/ */
@ -142,7 +142,7 @@ void PrintMouseEventName(const SEvent& event, stringw &result)
} }
/* /*
Helper function to print all the state information which get from a mouse-event into a stringw Helper function to print all the state information from a mouse event into a stringw
*/ */
void PrintMouseState(const SEvent& event, stringw &result) void PrintMouseState(const SEvent& event, stringw &result)
{ {
@ -295,6 +295,17 @@ public:
} }
} }
if ( event.EventType == EET_KEY_INPUT_EVENT)
{
// Allow invisible cursor to show up again when users presses ESC
if ( !event.KeyInput.PressedDown && event.KeyInput.Key == irr::KEY_ESCAPE )
{
TimerAction action;
action.Action = ETA_MOUSE_VISIBLE;
Context.runTimerAction(action);
}
}
return false; return false;
} }
@ -303,7 +314,7 @@ private:
}; };
/* /*
Use several imagefiles as animation frames for a sprite which can be used as cursor icon. Use several image files as animation frames for a sprite which can then be used as a cursor icon.
The images in those files all need to have the same size. The images in those files all need to have the same size.
Return sprite index on success or -1 on failure Return sprite index on success or -1 on failure
*/ */
@ -345,7 +356,7 @@ s32 AddAnimatedIconToSpriteBank( gui::IGUISpriteBank * spriteBank, video::IVideo
} }
/* /*
Use several images within one imagefile as animation frames for a sprite which can be used as cursor icon Use several images within one image file as animation frames for a sprite which can then be used as a cursor icon
The sizes of the icons within that file all need to have the same size The sizes of the icons within that file all need to have the same size
Return sprite index on success or -1 on failure Return sprite index on success or -1 on failure
*/ */
@ -433,8 +444,6 @@ int main()
video::IVideoDriver* driver = device->getVideoDriver(); video::IVideoDriver* driver = device->getVideoDriver();
IGUIEnvironment* env = device->getGUIEnvironment(); IGUIEnvironment* env = device->getGUIEnvironment();
gui::IGUISpriteBank * SpriteBankIcons;
SAppContext context; SAppContext context;
context.Device = device; context.Device = device;
@ -443,23 +452,24 @@ int main()
rectInfoStatic.UpperLeftCorner += dimension2di(0, 15); rectInfoStatic.UpperLeftCorner += dimension2di(0, 15);
context.InfoStatic = env->addStaticText (L"", rectInfoStatic, true, true); context.InfoStatic = env->addStaticText (L"", rectInfoStatic, true, true);
rect< s32 > rectEventBox(10,210, 200, 400); rect< s32 > rectEventBox(10,210, 200, 400);
env->addStaticText (L"click events (new on top)", rectEventBox, true, true); env->addStaticText (L"Click events (new on top)", rectEventBox, true, true);
rectEventBox.UpperLeftCorner += dimension2di(0, 15); rectEventBox.UpperLeftCorner += dimension2di(0, 15);
context.EventBox = env->addListBox(rectEventBox); context.EventBox = env->addListBox(rectEventBox);
rect< s32 > rectCursorBox(210,10, 400, 250); rect< s32 > rectCursorBox(210,10, 400, 250);
env->addStaticText (L"cursors, click to set the active one", rectCursorBox, true, true); env->addStaticText (L"Cursors, click to set the active one", rectCursorBox, true, true);
rectCursorBox.UpperLeftCorner += dimension2di(0, 15); rectCursorBox.UpperLeftCorner += dimension2di(0, 15);
context.CursorBox = env->addListBox(rectCursorBox); context.CursorBox = env->addListBox(rectCursorBox);
rect< s32 > rectSpriteBox(210,260, 400, 400); rect< s32 > rectSpriteBox(210,260, 400, 400);
env->addStaticText (L"sprites", rectSpriteBox, true, true); env->addStaticText (L"Sprites", rectSpriteBox, true, true);
rectSpriteBox.UpperLeftCorner += dimension2di(0, 15); rectSpriteBox.UpperLeftCorner += dimension2di(0, 15);
context.SpriteBox = env->addListBox(rectSpriteBox); context.SpriteBox = env->addListBox(rectSpriteBox);
context.ButtonSetVisible = env->addButton( rect<s32>( 410, 20, 560, 40 ), 0, -1, L"set visible (delayed)" ); context.ButtonSetVisible = env->addButton( rect<s32>( 410, 20, 560, 40 ), 0, -1, L"Set visible (delayed)" );
context.ButtonSetInvisible = env->addButton( rect<s32>( 410, 50, 560, 70 ), 0, -1, L"set invisible (delayed)" ); context.ButtonSetInvisible = env->addButton( rect<s32>( 410, 50, 560, 70 ), 0, -1, L"Set invisible (delayed)" );
context.ButtonSimulateBadFps = env->addButton( rect<s32>( 410, 80, 560, 100 ), 0, -1, L"simulate bad FPS" ); context.ButtonSimulateBadFps = env->addButton( rect<s32>( 410, 80, 560, 100 ), 0, -1, L"Simulate bad FPS" );
context.ButtonSimulateBadFps->setIsPushButton(true); context.ButtonSimulateBadFps->setIsPushButton(true);
context.ButtonChangeIcon = env->addButton( rect<s32>( 410, 140, 560, 160 ), 0, -1, L"replace cursor icon\n(cursor+sprite must be selected)" ); s32 t = context.SpriteBox->getAbsolutePosition().UpperLeftCorner.Y;
context.ButtonChangeIcon = env->addButton( rect<s32>( 410, t, 560, t+20), 0, -1, L"Replace cursor icon\n(cursor+sprite must be selected)" );
// set the names for all the system cursors // set the names for all the system cursors
for ( int i=0; i < (int)gui::ECI_COUNT; ++i ) for ( int i=0; i < (int)gui::ECI_COUNT; ++i )
@ -470,7 +480,7 @@ int main()
/* /*
Create sprites which then can be used as cursor icons. Create sprites which then can be used as cursor icons.
*/ */
SpriteBankIcons = env->addEmptySpriteBank(io::path("cursor_icons")); gui::IGUISpriteBank * SpriteBankIcons = env->addEmptySpriteBank(io::path("cursor_icons"));
context.SpriteBox->setSpriteBank(SpriteBankIcons); context.SpriteBox->setSpriteBank(SpriteBankIcons);
const io::path mediaPath = getExampleMediaPath(); const io::path mediaPath = getExampleMediaPath();
@ -546,7 +556,8 @@ int main()
driver->endScene(); driver->endScene();
} }
// By simulating bad fps we can find out if hardware-support for cursors works or not. If it works the cursor will move as usual,while it otherwise will just update with 2 fps now. // By simulating a bad frame rate we can find out if hardware support for cursors works or not.
// If it works the cursor will move as usual, otherwise it will update with only 2 fps when SimulateBadFps is true.
if ( context.SimulateBadFps ) if ( context.SimulateBadFps )
{ {
device->sleep(500); // 2 fps device->sleep(500); // 2 fps