From 959831f4ef5a3e797f576c3de08cd65032c997ad Mon Sep 17 00:00:00 2001
From: David Walter Seikel
Date: Sun, 13 Jan 2013 18:54:10 +1000
Subject: Remove damned ancient DOS line endings from Irrlicht. Hopefully I
did not go overboard.
---
.../examples/24.CursorControl/CursorControl.vcproj | 264 ++---
.../24.CursorControl/CursorControl_vc10.vcxproj | 366 +++----
.../24.CursorControl/CursorControl_vc11.vcxproj | 374 +++----
.../24.CursorControl/CursorControl_vc8.vcproj | 380 +++----
.../24.CursorControl/CursorControl_vc9.vcproj | 370 +++----
.../examples/24.CursorControl/Makefile | 132 +--
.../examples/24.CursorControl/main.cpp | 1126 ++++++++++----------
7 files changed, 1506 insertions(+), 1506 deletions(-)
(limited to 'libraries/irrlicht-1.8/examples/24.CursorControl')
diff --git a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl.vcproj b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl.vcproj
index 1bc2f53..0c37ee7 100644
--- a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl.vcproj
+++ b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl.vcproj
@@ -1,132 +1,132 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc10.vcxproj b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc10.vcxproj
index 9912eda..7712ed5 100644
--- a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc10.vcxproj
+++ b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc10.vcxproj
@@ -1,184 +1,184 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- 24.CursorControl
- {02B67A37-50E1-49DB-BECF-905BC029C2FE}
- 24.CursorControl
- Win32Proj
-
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
-
-
- Application
- MultiByte
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_ProjectFileVersion>10.0.30319.1
- ..\..\bin\Win32-VisualStudio\
- ..\..\bin\Win64-VisualStudio\
- ..\..\bin\Win32-VisualStudio\
- ..\..\bin\Win64-VisualStudio\
- AllRules.ruleset
- AllRules.ruleset
-
-
-
-
- AllRules.ruleset
- AllRules.ruleset
-
-
-
-
-
-
-
- Disabled
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebug
-
-
- Level3
- EditAndContinue
-
-
- ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
- true
- $(OutDir)CursorControl.pdb
- Console
-
-
-
-
-
-
- Disabled
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- EnableFastChecks
- MultiThreadedDebug
-
-
- Level3
- ProgramDatabase
-
-
- ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
- true
- $(OutDir)CursorControl.pdb
- Console
-
-
-
-
-
-
- true
- Speed
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
- Sync
-
-
- Level3
-
-
- Cdecl
-
-
- ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
- false
- Console
- true
- true
-
-
-
-
-
-
- true
- Speed
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
- Sync
-
-
- Level3
-
-
- Cdecl
-
-
- ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
- false
- Console
- true
- true
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ 24.CursorControl
+ {02B67A37-50E1-49DB-BECF-905BC029C2FE}
+ 24.CursorControl
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+ Application
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.30319.1
+ ..\..\bin\Win32-VisualStudio\
+ ..\..\bin\Win64-VisualStudio\
+ ..\..\bin\Win32-VisualStudio\
+ ..\..\bin\Win64-VisualStudio\
+ AllRules.ruleset
+ AllRules.ruleset
+
+
+
+
+ AllRules.ruleset
+ AllRules.ruleset
+
+
+
+
+
+
+
+ Disabled
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ EditAndContinue
+
+
+ ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
+ true
+ $(OutDir)CursorControl.pdb
+ Console
+
+
+
+
+
+
+ Disabled
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ ProgramDatabase
+
+
+ ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
+ true
+ $(OutDir)CursorControl.pdb
+ Console
+
+
+
+
+
+
+ true
+ Speed
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ Sync
+
+
+ Level3
+
+
+ Cdecl
+
+
+ ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+
+
+
+
+
+
+ true
+ Speed
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ Sync
+
+
+ Level3
+
+
+ Cdecl
+
+
+ ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc11.vcxproj b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc11.vcxproj
index 362f064..ae321a4 100644
--- a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc11.vcxproj
+++ b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc11.vcxproj
@@ -1,188 +1,188 @@
-
-
-
-
- Debug
- Win32
-
-
- Debug
- x64
-
-
- Release
- Win32
-
-
- Release
- x64
-
-
-
- 24.CursorControl
- {02B67A37-50E1-49DB-BECF-905BC029C2FE}
- 24.CursorControl
- Win32Proj
-
-
-
- Application
- MultiByte
- v110
-
-
- Application
- MultiByte
- v110
-
-
- Application
- MultiByte
- v110
-
-
- Application
- MultiByte
- v110
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <_ProjectFileVersion>10.0.30319.1
- ..\..\bin\Win32-VisualStudio\
- ..\..\bin\Win64-VisualStudio\
- ..\..\bin\Win32-VisualStudio\
- ..\..\bin\Win64-VisualStudio\
- AllRules.ruleset
- AllRules.ruleset
-
-
-
-
- AllRules.ruleset
- AllRules.ruleset
-
-
-
-
-
-
-
- Disabled
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- true
- EnableFastChecks
- MultiThreadedDebug
-
-
- Level3
- EditAndContinue
-
-
- ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
- true
- $(OutDir)CursorControl.pdb
- Console
-
-
-
-
-
-
- Disabled
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
- EnableFastChecks
- MultiThreadedDebug
-
-
- Level3
- ProgramDatabase
-
-
- ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
- true
- $(OutDir)CursorControl.pdb
- Console
-
-
-
-
-
-
- true
- Speed
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
- Sync
-
-
- Level3
-
-
- Cdecl
-
-
- ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
- false
- Console
- true
- true
-
-
-
-
-
-
- true
- Speed
- ..\..\include;%(AdditionalIncludeDirectories)
- WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
- Sync
-
-
- Level3
-
-
- Cdecl
-
-
- ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
- ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
- false
- Console
- true
- true
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ 24.CursorControl
+ {02B67A37-50E1-49DB-BECF-905BC029C2FE}
+ 24.CursorControl
+ Win32Proj
+
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+ Application
+ MultiByte
+ v110
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_ProjectFileVersion>10.0.30319.1
+ ..\..\bin\Win32-VisualStudio\
+ ..\..\bin\Win64-VisualStudio\
+ ..\..\bin\Win32-VisualStudio\
+ ..\..\bin\Win64-VisualStudio\
+ AllRules.ruleset
+ AllRules.ruleset
+
+
+
+
+ AllRules.ruleset
+ AllRules.ruleset
+
+
+
+
+
+
+
+ Disabled
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ true
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ EditAndContinue
+
+
+ ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
+ true
+ $(OutDir)CursorControl.pdb
+ Console
+
+
+
+
+
+
+ Disabled
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ ProgramDatabase
+
+
+ ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
+ true
+ $(OutDir)CursorControl.pdb
+ Console
+
+
+
+
+
+
+ true
+ Speed
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ Sync
+
+
+ Level3
+
+
+ Cdecl
+
+
+ ..\..\bin\Win32-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win32-visualstudio;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+
+
+
+
+
+
+ true
+ Speed
+ ..\..\include;%(AdditionalIncludeDirectories)
+ WIN32;WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)
+ Sync
+
+
+ Level3
+
+
+ Cdecl
+
+
+ ..\..\bin\Win64-VisualStudio\24.CursorControl.exe
+ ..\..\lib\Win64-visualstudio;%(AdditionalLibraryDirectories)
+ false
+ Console
+ true
+ true
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc8.vcproj b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc8.vcproj
index 6148942..965e3a0 100644
--- a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc8.vcproj
+++ b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc8.vcproj
@@ -1,190 +1,190 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc9.vcproj b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc9.vcproj
index 90ebf1f..8a11f64 100644
--- a/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc9.vcproj
+++ b/libraries/irrlicht-1.8/examples/24.CursorControl/CursorControl_vc9.vcproj
@@ -1,185 +1,185 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/libraries/irrlicht-1.8/examples/24.CursorControl/Makefile b/libraries/irrlicht-1.8/examples/24.CursorControl/Makefile
index bc2a137..25cb7dd 100644
--- a/libraries/irrlicht-1.8/examples/24.CursorControl/Makefile
+++ b/libraries/irrlicht-1.8/examples/24.CursorControl/Makefile
@@ -1,66 +1,66 @@
-# Makefile for Irrlicht Examples
-# It's usually sufficient to change just the target name and source file list
-# and be sure that CXX is set to a valid compiler
-
-# Name of the executable created (.exe will be added automatically if necessary)
-Target := 24.CursorControl
-# List of source files, separated by spaces
-Sources := main.cpp
-# Path to Irrlicht directory, should contain include/ and lib/
-IrrlichtHome := ../..
-# Path for the executable. Note that Irrlicht.dll should usually also be there for win32 systems
-BinPath = ../../bin/$(SYSTEM)
-
-# general compiler settings (might need to be set when compiling the lib, too)
-# preprocessor flags, e.g. defines and include paths
-USERCPPFLAGS =
-# compiler flags such as optimization flags
-USERCXXFLAGS = -O3 -ffast-math
-#USERCXXFLAGS = -g -Wall
-# linker flags such as additional libraries and link paths
-USERLDFLAGS =
-
-####
-#no changes necessary below this line
-####
-
-CPPFLAGS = -I$(IrrlichtHome)/include -I/usr/X11R6/include $(USERCPPFLAGS)
-CXXFLAGS = $(USERCXXFLAGS)
-LDFLAGS = $(USERLDFLAGS)
-
-#default target is Linux
-all: all_linux
-
-# target specific settings
-all_linux all_win32 static_win32: LDFLAGS += -L$(IrrlichtHome)/lib/$(SYSTEM) -lIrrlicht
-all_linux: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lXxf86vm -lXext -lX11 -lXcursor
-all_linux clean_linux: SYSTEM=Linux
-all_win32 clean_win32 static_win32: SYSTEM=Win32-gcc
-all_win32 clean_win32 static_win32: SUF=.exe
-static_win32: CPPFLAGS += -D_IRR_STATIC_LIB_
-all_win32: LDFLAGS += -lopengl32 -lm
-static_win32: LDFLAGS += -lgdi32 -lwinspool -lcomdlg32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32
-# name of the binary - only valid for targets which set SYSTEM
-DESTPATH = $(BinPath)/$(Target)$(SUF)
-
-all_linux all_win32 static_win32:
- $(warning Building...)
- $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
-
-clean: clean_linux clean_win32
- $(warning Cleaning...)
-
-clean_linux clean_win32:
- @$(RM) $(DESTPATH)
-
-.PHONY: all all_win32 static_win32 clean clean_linux clean_win32
-
-#multilib handling
-ifeq ($(HOSTTYPE), x86_64)
-LIBSELECT=64
-endif
-#solaris real-time features
-ifeq ($(HOSTTYPE), sun4)
-LDFLAGS += -lrt
-endif
-
+# Makefile for Irrlicht Examples
+# It's usually sufficient to change just the target name and source file list
+# and be sure that CXX is set to a valid compiler
+
+# Name of the executable created (.exe will be added automatically if necessary)
+Target := 24.CursorControl
+# List of source files, separated by spaces
+Sources := main.cpp
+# Path to Irrlicht directory, should contain include/ and lib/
+IrrlichtHome := ../..
+# Path for the executable. Note that Irrlicht.dll should usually also be there for win32 systems
+BinPath = ../../bin/$(SYSTEM)
+
+# general compiler settings (might need to be set when compiling the lib, too)
+# preprocessor flags, e.g. defines and include paths
+USERCPPFLAGS =
+# compiler flags such as optimization flags
+USERCXXFLAGS = -O3 -ffast-math
+#USERCXXFLAGS = -g -Wall
+# linker flags such as additional libraries and link paths
+USERLDFLAGS =
+
+####
+#no changes necessary below this line
+####
+
+CPPFLAGS = -I$(IrrlichtHome)/include -I/usr/X11R6/include $(USERCPPFLAGS)
+CXXFLAGS = $(USERCXXFLAGS)
+LDFLAGS = $(USERLDFLAGS)
+
+#default target is Linux
+all: all_linux
+
+# target specific settings
+all_linux all_win32 static_win32: LDFLAGS += -L$(IrrlichtHome)/lib/$(SYSTEM) -lIrrlicht
+all_linux: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lXxf86vm -lXext -lX11 -lXcursor
+all_linux clean_linux: SYSTEM=Linux
+all_win32 clean_win32 static_win32: SYSTEM=Win32-gcc
+all_win32 clean_win32 static_win32: SUF=.exe
+static_win32: CPPFLAGS += -D_IRR_STATIC_LIB_
+all_win32: LDFLAGS += -lopengl32 -lm
+static_win32: LDFLAGS += -lgdi32 -lwinspool -lcomdlg32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32
+# name of the binary - only valid for targets which set SYSTEM
+DESTPATH = $(BinPath)/$(Target)$(SUF)
+
+all_linux all_win32 static_win32:
+ $(warning Building...)
+ $(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
+
+clean: clean_linux clean_win32
+ $(warning Cleaning...)
+
+clean_linux clean_win32:
+ @$(RM) $(DESTPATH)
+
+.PHONY: all all_win32 static_win32 clean clean_linux clean_win32
+
+#multilib handling
+ifeq ($(HOSTTYPE), x86_64)
+LIBSELECT=64
+endif
+#solaris real-time features
+ifeq ($(HOSTTYPE), sun4)
+LDFLAGS += -lrt
+endif
+
diff --git a/libraries/irrlicht-1.8/examples/24.CursorControl/main.cpp b/libraries/irrlicht-1.8/examples/24.CursorControl/main.cpp
index ff7c16f..dd8f6a6 100644
--- a/libraries/irrlicht-1.8/examples/24.CursorControl/main.cpp
+++ b/libraries/irrlicht-1.8/examples/24.CursorControl/main.cpp
@@ -1,563 +1,563 @@
-/** Example 024 CursorControl
-
-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.
-*/
-
-#include
-#include "driverChoice.h"
-
-using namespace irr;
-using namespace core;
-using namespace scene;
-using namespace video;
-using namespace io;
-using namespace gui;
-
-#ifdef _IRR_WINDOWS_
-#pragma comment(lib, "Irrlicht.lib")
-#endif
-
-const int DELAY_TIME = 3000;
-
-enum ETimerAction
-{
- ETA_MOUSE_VISIBLE,
- ETA_MOUSE_INVISIBLE,
-};
-
-/*
- Structure to allow delayed execution of some actions.
-*/
-struct TimerAction
-{
- u32 TargetTime;
- ETimerAction Action;
-};
-
-/*
-*/
-struct SAppContext
-{
- SAppContext()
- : Device(0), InfoStatic(0), EventBox(0), CursorBox(0), SpriteBox(0)
- , ButtonSetVisible(0), ButtonSetInvisible(0), ButtonSimulateBadFps(0)
- , ButtonChangeIcon(0)
- , SimulateBadFps(false)
- {
- }
-
- void update()
- {
- if (!Device)
- return;
- u32 timeNow = Device->getTimer()->getTime();
- for ( u32 i=0; i < TimerActions.size(); ++i )
- {
- if ( timeNow >= TimerActions[i].TargetTime )
- {
- runTimerAction(TimerActions[i]);
- TimerActions.erase(i);
- }
- else
- {
- ++i;
- }
- }
- }
-
- void runTimerAction(const TimerAction& action)
- {
- if (ETA_MOUSE_VISIBLE == action.Action)
- {
- Device->getCursorControl()->setVisible(true);
- ButtonSetVisible->setEnabled(true);
- }
- else if ( ETA_MOUSE_INVISIBLE == action.Action)
- {
- Device->getCursorControl()->setVisible(false);
- ButtonSetInvisible->setEnabled(true);
- }
- }
-
- /*
- Add another icon which the user can click and select as cursor later on.
- */
- void addIcon(const stringw& name, const SCursorSprite &sprite, bool addCursor=true)
- {
- // Sprites are just icons - not yet cursors. They can be displayed by Irrlicht sprite functions and be used to create cursors.
- SpriteBox->addItem(name.c_str(), sprite.SpriteId);
- Sprites.push_back(sprite);
-
- // create the cursor together with the icon?
- if ( addCursor )
- {
- /* Here we create a hardware cursor from a sprite */
- Device->getCursorControl()->addIcon(sprite);
-
- // ... and add it to the cursors selection listbox to the other system cursors.
- CursorBox->addItem(name.c_str());
- }
- }
-
- IrrlichtDevice * Device;
- gui::IGUIStaticText * InfoStatic;
- gui::IGUIListBox * EventBox;
- gui::IGUIListBox * CursorBox;
- gui::IGUIListBox * SpriteBox;
- gui::IGUIButton * ButtonSetVisible;
- gui::IGUIButton * ButtonSetInvisible;
- gui::IGUIButton * ButtonSimulateBadFps;
- gui::IGUIButton * ButtonChangeIcon;
- array TimerActions;
- bool SimulateBadFps;
- array Sprites;
-};
-
-/*
- Helper function to print mouse event names into a stringw
-*/
-void PrintMouseEventName(const SEvent& event, stringw &result)
-{
- switch ( event.MouseInput.Event )
- {
- case EMIE_LMOUSE_PRESSED_DOWN: result += stringw(L"EMIE_LMOUSE_PRESSED_DOWN"); break;
- case EMIE_RMOUSE_PRESSED_DOWN: result += stringw(L"EMIE_RMOUSE_PRESSED_DOWN"); break;
- case EMIE_MMOUSE_PRESSED_DOWN: result += stringw(L"EMIE_MMOUSE_PRESSED_DOWN"); break;
- case EMIE_LMOUSE_LEFT_UP: result += stringw(L"EMIE_LMOUSE_LEFT_UP"); break;
- case EMIE_RMOUSE_LEFT_UP: result += stringw(L"EMIE_RMOUSE_LEFT_UP"); break;
- case EMIE_MMOUSE_LEFT_UP: result += stringw(L"EMIE_MMOUSE_LEFT_UP"); break;
- case EMIE_MOUSE_MOVED: result += stringw(L"EMIE_MOUSE_MOVED"); break;
- case EMIE_MOUSE_WHEEL: result += stringw(L"EMIE_MOUSE_WHEEL"); break;
- case EMIE_LMOUSE_DOUBLE_CLICK: result += stringw(L"EMIE_LMOUSE_DOUBLE_CLICK"); break;
- case EMIE_RMOUSE_DOUBLE_CLICK: result += stringw(L"EMIE_RMOUSE_DOUBLE_CLICK"); break;
- case EMIE_MMOUSE_DOUBLE_CLICK: result += stringw(L"EMIE_MMOUSE_DOUBLE_CLICK"); break;
- case EMIE_LMOUSE_TRIPLE_CLICK: result += stringw(L"EMIE_LMOUSE_TRIPLE_CLICK"); break;
- case EMIE_RMOUSE_TRIPLE_CLICK: result += stringw(L"EMIE_RMOUSE_TRIPLE_CLICK"); break;
- case EMIE_MMOUSE_TRIPLE_CLICK: result += stringw(L"EMIE_MMOUSE_TRIPLE_CLICK"); break;
- default:
- break;
- }
-}
-
-/*
- Helper function to print all the state information which get from a mouse-event into a stringw
-*/
-void PrintMouseState(const SEvent& event, stringw &result)
-{
- result += stringw(L"X: ");
- result += stringw(event.MouseInput.X);
- result += stringw(L"\n");
-
- result += stringw(L"Y: ");
- result += stringw(event.MouseInput.Y);
- result += stringw(L"\n");
-
-
- result += stringw(L"Wheel: ");
- result += stringw(event.MouseInput.Wheel);
- result += stringw(L"\n");
-
- result += stringw(L"Shift: ");
- if ( event.MouseInput.Shift )
- result += stringw(L"true\n");
- else
- result += stringw(L"false\n");
-
- result += stringw(L"Control: ");
- if ( event.MouseInput.Control )
- result += stringw(L"true\n");
- else
- result += stringw(L"false\n");
-
- result += stringw(L"ButtonStates: ");
- result += stringw(event.MouseInput.ButtonStates);
- result += stringw(L"\n");
-
- result += stringw(L"isLeftPressed: ");
- if ( event.MouseInput.isLeftPressed() )
- result += stringw(L"true\n");
- else
- result += stringw(L"false\n");
-
- result += stringw(L"isRightPressed: ");
- if ( event.MouseInput.isRightPressed() )
- result += stringw(L"true\n");
- else
- result += stringw(L"false\n");
-
- result += stringw(L"isMiddlePressed: ");
- if ( event.MouseInput.isMiddlePressed() )
- result += stringw(L"true\n");
- else
- result += stringw(L"false\n");
-
- result += stringw(L"Event: ");
-
- PrintMouseEventName(event, result);
-
- result += stringw(L"\n");
-}
-
-/*
- A typical event receiver.
-*/
-class MyEventReceiver : public IEventReceiver
-{
-public:
- MyEventReceiver(SAppContext & context) : Context(context) { }
-
- virtual bool OnEvent(const SEvent& event)
- {
- if (event.EventType == EET_GUI_EVENT )
- {
- switch ( event.GUIEvent.EventType )
- {
- case EGET_BUTTON_CLICKED:
- {
- u32 timeNow = Context.Device->getTimer()->getTime();
- TimerAction action;
- action.TargetTime = timeNow + DELAY_TIME;
- if ( event.GUIEvent.Caller == Context.ButtonSetVisible )
- {
- action.Action = ETA_MOUSE_VISIBLE;
- Context.TimerActions.push_back(action);
- Context.ButtonSetVisible->setEnabled(false);
- }
- else if ( event.GUIEvent.Caller == Context.ButtonSetInvisible )
- {
- action.Action = ETA_MOUSE_INVISIBLE;
- Context.TimerActions.push_back(action);
- Context.ButtonSetInvisible->setEnabled(false);
- }
- else if ( event.GUIEvent.Caller == Context.ButtonSimulateBadFps )
- {
- Context.SimulateBadFps = Context.ButtonSimulateBadFps->isPressed();
- }
- else if ( event.GUIEvent.Caller == Context.ButtonChangeIcon )
- {
- /*
- Replace an existing cursor icon by another icon.
- The user has to select both - the icon which should be replaced and the icon which will replace it.
- */
- s32 selectedCursor = Context.CursorBox->getSelected();
- s32 selectedSprite = Context.SpriteBox->getSelected();
- if ( selectedCursor >= 0 && selectedSprite >= 0 )
- {
- /*
- This does replace the icon.
- */
- Context.Device->getCursorControl()->changeIcon((ECURSOR_ICON)selectedCursor, Context.Sprites[selectedSprite] );
-
- /*
- Do also show the new icon.
- */
- Context.Device->getCursorControl()->setActiveIcon( ECURSOR_ICON(selectedCursor) );
- }
- }
- }
- break;
- case EGET_LISTBOX_CHANGED:
- case EGET_LISTBOX_SELECTED_AGAIN:
- {
- if ( event.GUIEvent.Caller == Context.CursorBox )
- {
- /*
- Find out which cursor the user selected
- */
- s32 selected = Context.CursorBox->getSelected();
- if ( selected >= 0 )
- {
- /*
- Here we set the new cursor icon which will now be used within our window.
- */
- Context.Device->getCursorControl()->setActiveIcon( ECURSOR_ICON(selected) );
- }
- }
- }
- break;
- default:
- break;
- }
- }
-
- if (event.EventType == EET_MOUSE_INPUT_EVENT)
- {
- stringw infoText;
- PrintMouseState(event, infoText);
- Context.InfoStatic->setText(infoText.c_str());
- if ( event.MouseInput.Event != EMIE_MOUSE_MOVED && event.MouseInput.Event != EMIE_MOUSE_WHEEL ) // no spam
- {
- infoText = L"";
- PrintMouseEventName(event, infoText);
- Context.EventBox->insertItem(0, infoText.c_str(), -1);
- }
- }
-
- return false;
- }
-
-private:
- SAppContext & Context;
-};
-
-/*
- Use several imagefiles as animation frames for a sprite which can be used as cursor icon.
- The images in those files all need to have the same size.
- Return sprite index on success or -1 on failure
-*/
-s32 AddAnimatedIconToSpriteBank( gui::IGUISpriteBank * spriteBank, video::IVideoDriver* driver, const array< io::path >& files, u32 frameTime )
-{
- if ( !spriteBank || !driver || !files.size() )
- return -1;
-
- video::ITexture * tex = driver->getTexture( files[0] );
- if ( tex )
- {
- array< rect >& spritePositions = spriteBank->getPositions();
- u32 idxRect = spritePositions.size();
- spritePositions.push_back( rect(0,0, tex->getSize().Width, tex->getSize().Height) );
-
- SGUISprite sprite;
- sprite.frameTime = frameTime;
-
- array< SGUISprite >& sprites = spriteBank->getSprites();
- u32 startIdx = spriteBank->getTextureCount();
- for ( u32 f=0; f < files.size(); ++f )
- {
- tex = driver->getTexture( files[f] );
- if ( tex )
- {
- spriteBank->addTexture( driver->getTexture(files[f]) );
- gui::SGUISpriteFrame frame;
- frame.rectNumber = idxRect;
- frame.textureNumber = startIdx+f;
- sprite.Frames.push_back( frame );
- }
- }
-
- sprites.push_back( sprite );
- return sprites.size()-1;
- }
-
- return -1;
-}
-
-/*
- Use several images within one imagefile as animation frames for a sprite which can be used as cursor icon
- The sizes of the icons within that file all need to have the same size
- Return sprite index on success or -1 on failure
-*/
-s32 AddAnimatedIconToSpriteBank( gui::IGUISpriteBank * spriteBank, video::IVideoDriver* driver, const io::path& file, const array< rect >& rects, u32 frameTime )
-{
- if ( !spriteBank || !driver || !rects.size() )
- return -1;
-
- video::ITexture * tex = driver->getTexture( file );
- if ( tex )
- {
- array< rect >& spritePositions = spriteBank->getPositions();
- u32 idxRect = spritePositions.size();
- u32 idxTex = spriteBank->getTextureCount();
- spriteBank->addTexture( tex );
-
- SGUISprite sprite;
- sprite.frameTime = frameTime;
-
- array< SGUISprite >& sprites = spriteBank->getSprites();
- for ( u32 i=0; i < rects.size(); ++i )
- {
- spritePositions.push_back( rects[i] );
-
- gui::SGUISpriteFrame frame;
- frame.rectNumber = idxRect+i;
- frame.textureNumber = idxTex;
- sprite.Frames.push_back( frame );
- }
-
- sprites.push_back( sprite );
- return sprites.size()-1;
- }
-
- return -1;
-}
-
-/*
- Create a non-animated icon from the given file and position and put it into the spritebank.
- We can use this icon later on in a cursor.
-*/
-s32 AddIconToSpriteBank( gui::IGUISpriteBank * spriteBank, video::IVideoDriver* driver, const io::path& file, const core::rect& rect )
-{
- if ( !spriteBank || !driver )
- return -1;
-
- video::ITexture * tex = driver->getTexture( file );
- if ( tex )
- {
- core::array< core::rect >& spritePositions = spriteBank->getPositions();
- spritePositions.push_back( rect );
- array< SGUISprite >& sprites = spriteBank->getSprites();
- spriteBank->addTexture( tex );
-
- gui::SGUISpriteFrame frame;
- frame.rectNumber = spritePositions.size()-1;
- frame.textureNumber = spriteBank->getTextureCount()-1;
-
- SGUISprite sprite;
- sprite.frameTime = 0;
- sprite.Frames.push_back( frame );
-
- sprites.push_back( sprite );
-
- return sprites.size()-1;
- }
-
- return -1;
-}
-
-int main()
-{
- video::E_DRIVER_TYPE driverType = driverChoiceConsole();
- if (driverType==video::EDT_COUNT)
- return 1;
-
- IrrlichtDevice * device = createDevice(driverType, dimension2d(640, 480));
- if (device == 0)
- return 1; // could not create selected driver.
-
- // It's sometimes of interest to know how the mouse behaves after a resize
- device->setResizable(true);
-
- device->setWindowCaption(L"Cursor control - Irrlicht engine tutorial");
- video::IVideoDriver* driver = device->getVideoDriver();
- IGUIEnvironment* env = device->getGUIEnvironment();
-
- gui::IGUISpriteBank * SpriteBankIcons;
-
- SAppContext context;
- context.Device = device;
-
- rect< s32 > rectInfoStatic(10,10, 200, 200);
- env->addStaticText (L"Cursor state information", rectInfoStatic, true, true);
- rectInfoStatic.UpperLeftCorner += dimension2di(0, 15);
- context.InfoStatic = env->addStaticText (L"", rectInfoStatic, true, true);
- rect< s32 > rectEventBox(10,210, 200, 400);
- env->addStaticText (L"click events (new on top)", rectEventBox, true, true);
- rectEventBox.UpperLeftCorner += dimension2di(0, 15);
- context.EventBox = env->addListBox(rectEventBox);
- rect< s32 > rectCursorBox(210,10, 400, 250);
- env->addStaticText (L"cursors, click to set the active one", rectCursorBox, true, true);
- rectCursorBox.UpperLeftCorner += dimension2di(0, 15);
- context.CursorBox = env->addListBox(rectCursorBox);
- rect< s32 > rectSpriteBox(210,260, 400, 400);
- env->addStaticText (L"sprites", rectSpriteBox, true, true);
- rectSpriteBox.UpperLeftCorner += dimension2di(0, 15);
- context.SpriteBox = env->addListBox(rectSpriteBox);
-
- context.ButtonSetVisible = env->addButton( rect( 410, 20, 560, 40 ), 0, -1, L"set visible (delayed)" );
- context.ButtonSetInvisible = env->addButton( rect( 410, 50, 560, 70 ), 0, -1, L"set invisible (delayed)" );
- context.ButtonSimulateBadFps = env->addButton( rect( 410, 80, 560, 100 ), 0, -1, L"simulate bad FPS" );
- context.ButtonSimulateBadFps->setIsPushButton(true);
- context.ButtonChangeIcon = env->addButton( rect( 410, 140, 560, 160 ), 0, -1, L"replace cursor icon\n(cursor+sprite must be selected)" );
-
- // set the names for all the system cursors
- for ( int i=0; i < (int)gui::ECI_COUNT; ++i )
- {
- context.CursorBox->addItem(stringw( GUICursorIconNames[i] ).c_str());
- }
-
- /*
- Create sprites which then can be used as cursor icons.
- */
- SpriteBankIcons = env->addEmptySpriteBank(io::path("cursor_icons"));
- context.SpriteBox->setSpriteBank(SpriteBankIcons);
-
- // create one animated icon from several files
- array< io::path > files;
- files.push_back( io::path("../../media/icon_crosshairs16x16bw1.png") );
- files.push_back( io::path("../../media/icon_crosshairs16x16bw2.png") );
- files.push_back( io::path("../../media/icon_crosshairs16x16bw3.png") );
- files.push_back( io::path("../../media/icon_crosshairs16x16bw3.png") );
- files.push_back( io::path("../../media/icon_crosshairs16x16bw2.png") );
- SCursorSprite spriteBw; // the sprite + some additional information needed for cursors
- spriteBw.SpriteId = AddAnimatedIconToSpriteBank( SpriteBankIcons, driver, files, 200 );
- spriteBw.SpriteBank = SpriteBankIcons;
- spriteBw.HotSpot = position2d(7,7);
- context.addIcon(L"crosshair_bw", spriteBw);
-
- // create one animated icon from one file
- array< rect > iconRects;
- iconRects.push_back( rect(0,0, 16, 16) );
- iconRects.push_back( rect(16,0, 32, 16) );
- iconRects.push_back( rect(0,16, 16, 32) );
- iconRects.push_back( rect(0,16, 16, 32) );
- iconRects.push_back( rect(16,0, 32, 16) );
- SCursorSprite spriteCol; // the sprite + some additional information needed for cursors
- spriteCol.SpriteId = AddAnimatedIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), iconRects, 200 );
- spriteCol.HotSpot = position2d(7,7);
- spriteCol.SpriteBank = SpriteBankIcons;
- context.addIcon(L"crosshair_colored", spriteCol);
-
- // Create some non-animated icons
- rect rectIcon;
- SCursorSprite spriteNonAnimated(SpriteBankIcons, 0, position2d(7,7));
-
- rectIcon = rect(0,0, 16, 16);
- spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), rectIcon );
- context.addIcon(L"crosshair_col1", spriteNonAnimated, false);
-
- rectIcon = rect(16,0, 32, 16);
- spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), rectIcon );
- context.addIcon(L"crosshair_col2", spriteNonAnimated, false);
-
- rectIcon = rect(0,16, 16, 32);
- spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), rectIcon );
- context.addIcon(L"crosshair_col3", spriteNonAnimated, false);
-
-
- MyEventReceiver receiver(context);
- device->setEventReceiver(&receiver);
-
- while(device->run() && driver)
- {
- // if (device->isWindowActive())
- {
- u32 realTimeNow = device->getTimer()->getRealTime();
-
- context.update();
-
- driver->beginScene(true, true, SColor(0,200,200,200));
-
- env->drawAll();
-
- // draw custom sprite with Irrlicht functions for comparison. It should usually look the same as the cursors.
- if ( context.SpriteBox )
- {
- s32 selectedSprite = context.SpriteBox->getSelected();
- if ( selectedSprite >= 0 && context.Sprites[selectedSprite].SpriteId >= 0 )
- {
- SpriteBankIcons->draw2DSprite(u32(context.Sprites[selectedSprite].SpriteId), position2di(580, 140), 0, video::SColor(255, 255, 255, 255), 0, realTimeNow);
- }
- }
-
- 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.
- if ( context.SimulateBadFps )
- {
- device->sleep(500); // 2 fps
- }
- else
- {
- device->sleep(10);
- }
- }
-
- device->drop();
-
- return 0;
-}
-
-/*
-**/
+/** Example 024 CursorControl
+
+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.
+*/
+
+#include
+#include "driverChoice.h"
+
+using namespace irr;
+using namespace core;
+using namespace scene;
+using namespace video;
+using namespace io;
+using namespace gui;
+
+#ifdef _IRR_WINDOWS_
+#pragma comment(lib, "Irrlicht.lib")
+#endif
+
+const int DELAY_TIME = 3000;
+
+enum ETimerAction
+{
+ ETA_MOUSE_VISIBLE,
+ ETA_MOUSE_INVISIBLE,
+};
+
+/*
+ Structure to allow delayed execution of some actions.
+*/
+struct TimerAction
+{
+ u32 TargetTime;
+ ETimerAction Action;
+};
+
+/*
+*/
+struct SAppContext
+{
+ SAppContext()
+ : Device(0), InfoStatic(0), EventBox(0), CursorBox(0), SpriteBox(0)
+ , ButtonSetVisible(0), ButtonSetInvisible(0), ButtonSimulateBadFps(0)
+ , ButtonChangeIcon(0)
+ , SimulateBadFps(false)
+ {
+ }
+
+ void update()
+ {
+ if (!Device)
+ return;
+ u32 timeNow = Device->getTimer()->getTime();
+ for ( u32 i=0; i < TimerActions.size(); ++i )
+ {
+ if ( timeNow >= TimerActions[i].TargetTime )
+ {
+ runTimerAction(TimerActions[i]);
+ TimerActions.erase(i);
+ }
+ else
+ {
+ ++i;
+ }
+ }
+ }
+
+ void runTimerAction(const TimerAction& action)
+ {
+ if (ETA_MOUSE_VISIBLE == action.Action)
+ {
+ Device->getCursorControl()->setVisible(true);
+ ButtonSetVisible->setEnabled(true);
+ }
+ else if ( ETA_MOUSE_INVISIBLE == action.Action)
+ {
+ Device->getCursorControl()->setVisible(false);
+ ButtonSetInvisible->setEnabled(true);
+ }
+ }
+
+ /*
+ Add another icon which the user can click and select as cursor later on.
+ */
+ void addIcon(const stringw& name, const SCursorSprite &sprite, bool addCursor=true)
+ {
+ // Sprites are just icons - not yet cursors. They can be displayed by Irrlicht sprite functions and be used to create cursors.
+ SpriteBox->addItem(name.c_str(), sprite.SpriteId);
+ Sprites.push_back(sprite);
+
+ // create the cursor together with the icon?
+ if ( addCursor )
+ {
+ /* Here we create a hardware cursor from a sprite */
+ Device->getCursorControl()->addIcon(sprite);
+
+ // ... and add it to the cursors selection listbox to the other system cursors.
+ CursorBox->addItem(name.c_str());
+ }
+ }
+
+ IrrlichtDevice * Device;
+ gui::IGUIStaticText * InfoStatic;
+ gui::IGUIListBox * EventBox;
+ gui::IGUIListBox * CursorBox;
+ gui::IGUIListBox * SpriteBox;
+ gui::IGUIButton * ButtonSetVisible;
+ gui::IGUIButton * ButtonSetInvisible;
+ gui::IGUIButton * ButtonSimulateBadFps;
+ gui::IGUIButton * ButtonChangeIcon;
+ array TimerActions;
+ bool SimulateBadFps;
+ array Sprites;
+};
+
+/*
+ Helper function to print mouse event names into a stringw
+*/
+void PrintMouseEventName(const SEvent& event, stringw &result)
+{
+ switch ( event.MouseInput.Event )
+ {
+ case EMIE_LMOUSE_PRESSED_DOWN: result += stringw(L"EMIE_LMOUSE_PRESSED_DOWN"); break;
+ case EMIE_RMOUSE_PRESSED_DOWN: result += stringw(L"EMIE_RMOUSE_PRESSED_DOWN"); break;
+ case EMIE_MMOUSE_PRESSED_DOWN: result += stringw(L"EMIE_MMOUSE_PRESSED_DOWN"); break;
+ case EMIE_LMOUSE_LEFT_UP: result += stringw(L"EMIE_LMOUSE_LEFT_UP"); break;
+ case EMIE_RMOUSE_LEFT_UP: result += stringw(L"EMIE_RMOUSE_LEFT_UP"); break;
+ case EMIE_MMOUSE_LEFT_UP: result += stringw(L"EMIE_MMOUSE_LEFT_UP"); break;
+ case EMIE_MOUSE_MOVED: result += stringw(L"EMIE_MOUSE_MOVED"); break;
+ case EMIE_MOUSE_WHEEL: result += stringw(L"EMIE_MOUSE_WHEEL"); break;
+ case EMIE_LMOUSE_DOUBLE_CLICK: result += stringw(L"EMIE_LMOUSE_DOUBLE_CLICK"); break;
+ case EMIE_RMOUSE_DOUBLE_CLICK: result += stringw(L"EMIE_RMOUSE_DOUBLE_CLICK"); break;
+ case EMIE_MMOUSE_DOUBLE_CLICK: result += stringw(L"EMIE_MMOUSE_DOUBLE_CLICK"); break;
+ case EMIE_LMOUSE_TRIPLE_CLICK: result += stringw(L"EMIE_LMOUSE_TRIPLE_CLICK"); break;
+ case EMIE_RMOUSE_TRIPLE_CLICK: result += stringw(L"EMIE_RMOUSE_TRIPLE_CLICK"); break;
+ case EMIE_MMOUSE_TRIPLE_CLICK: result += stringw(L"EMIE_MMOUSE_TRIPLE_CLICK"); break;
+ default:
+ break;
+ }
+}
+
+/*
+ Helper function to print all the state information which get from a mouse-event into a stringw
+*/
+void PrintMouseState(const SEvent& event, stringw &result)
+{
+ result += stringw(L"X: ");
+ result += stringw(event.MouseInput.X);
+ result += stringw(L"\n");
+
+ result += stringw(L"Y: ");
+ result += stringw(event.MouseInput.Y);
+ result += stringw(L"\n");
+
+
+ result += stringw(L"Wheel: ");
+ result += stringw(event.MouseInput.Wheel);
+ result += stringw(L"\n");
+
+ result += stringw(L"Shift: ");
+ if ( event.MouseInput.Shift )
+ result += stringw(L"true\n");
+ else
+ result += stringw(L"false\n");
+
+ result += stringw(L"Control: ");
+ if ( event.MouseInput.Control )
+ result += stringw(L"true\n");
+ else
+ result += stringw(L"false\n");
+
+ result += stringw(L"ButtonStates: ");
+ result += stringw(event.MouseInput.ButtonStates);
+ result += stringw(L"\n");
+
+ result += stringw(L"isLeftPressed: ");
+ if ( event.MouseInput.isLeftPressed() )
+ result += stringw(L"true\n");
+ else
+ result += stringw(L"false\n");
+
+ result += stringw(L"isRightPressed: ");
+ if ( event.MouseInput.isRightPressed() )
+ result += stringw(L"true\n");
+ else
+ result += stringw(L"false\n");
+
+ result += stringw(L"isMiddlePressed: ");
+ if ( event.MouseInput.isMiddlePressed() )
+ result += stringw(L"true\n");
+ else
+ result += stringw(L"false\n");
+
+ result += stringw(L"Event: ");
+
+ PrintMouseEventName(event, result);
+
+ result += stringw(L"\n");
+}
+
+/*
+ A typical event receiver.
+*/
+class MyEventReceiver : public IEventReceiver
+{
+public:
+ MyEventReceiver(SAppContext & context) : Context(context) { }
+
+ virtual bool OnEvent(const SEvent& event)
+ {
+ if (event.EventType == EET_GUI_EVENT )
+ {
+ switch ( event.GUIEvent.EventType )
+ {
+ case EGET_BUTTON_CLICKED:
+ {
+ u32 timeNow = Context.Device->getTimer()->getTime();
+ TimerAction action;
+ action.TargetTime = timeNow + DELAY_TIME;
+ if ( event.GUIEvent.Caller == Context.ButtonSetVisible )
+ {
+ action.Action = ETA_MOUSE_VISIBLE;
+ Context.TimerActions.push_back(action);
+ Context.ButtonSetVisible->setEnabled(false);
+ }
+ else if ( event.GUIEvent.Caller == Context.ButtonSetInvisible )
+ {
+ action.Action = ETA_MOUSE_INVISIBLE;
+ Context.TimerActions.push_back(action);
+ Context.ButtonSetInvisible->setEnabled(false);
+ }
+ else if ( event.GUIEvent.Caller == Context.ButtonSimulateBadFps )
+ {
+ Context.SimulateBadFps = Context.ButtonSimulateBadFps->isPressed();
+ }
+ else if ( event.GUIEvent.Caller == Context.ButtonChangeIcon )
+ {
+ /*
+ Replace an existing cursor icon by another icon.
+ The user has to select both - the icon which should be replaced and the icon which will replace it.
+ */
+ s32 selectedCursor = Context.CursorBox->getSelected();
+ s32 selectedSprite = Context.SpriteBox->getSelected();
+ if ( selectedCursor >= 0 && selectedSprite >= 0 )
+ {
+ /*
+ This does replace the icon.
+ */
+ Context.Device->getCursorControl()->changeIcon((ECURSOR_ICON)selectedCursor, Context.Sprites[selectedSprite] );
+
+ /*
+ Do also show the new icon.
+ */
+ Context.Device->getCursorControl()->setActiveIcon( ECURSOR_ICON(selectedCursor) );
+ }
+ }
+ }
+ break;
+ case EGET_LISTBOX_CHANGED:
+ case EGET_LISTBOX_SELECTED_AGAIN:
+ {
+ if ( event.GUIEvent.Caller == Context.CursorBox )
+ {
+ /*
+ Find out which cursor the user selected
+ */
+ s32 selected = Context.CursorBox->getSelected();
+ if ( selected >= 0 )
+ {
+ /*
+ Here we set the new cursor icon which will now be used within our window.
+ */
+ Context.Device->getCursorControl()->setActiveIcon( ECURSOR_ICON(selected) );
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ if (event.EventType == EET_MOUSE_INPUT_EVENT)
+ {
+ stringw infoText;
+ PrintMouseState(event, infoText);
+ Context.InfoStatic->setText(infoText.c_str());
+ if ( event.MouseInput.Event != EMIE_MOUSE_MOVED && event.MouseInput.Event != EMIE_MOUSE_WHEEL ) // no spam
+ {
+ infoText = L"";
+ PrintMouseEventName(event, infoText);
+ Context.EventBox->insertItem(0, infoText.c_str(), -1);
+ }
+ }
+
+ return false;
+ }
+
+private:
+ SAppContext & Context;
+};
+
+/*
+ Use several imagefiles as animation frames for a sprite which can be used as cursor icon.
+ The images in those files all need to have the same size.
+ Return sprite index on success or -1 on failure
+*/
+s32 AddAnimatedIconToSpriteBank( gui::IGUISpriteBank * spriteBank, video::IVideoDriver* driver, const array< io::path >& files, u32 frameTime )
+{
+ if ( !spriteBank || !driver || !files.size() )
+ return -1;
+
+ video::ITexture * tex = driver->getTexture( files[0] );
+ if ( tex )
+ {
+ array< rect >& spritePositions = spriteBank->getPositions();
+ u32 idxRect = spritePositions.size();
+ spritePositions.push_back( rect(0,0, tex->getSize().Width, tex->getSize().Height) );
+
+ SGUISprite sprite;
+ sprite.frameTime = frameTime;
+
+ array< SGUISprite >& sprites = spriteBank->getSprites();
+ u32 startIdx = spriteBank->getTextureCount();
+ for ( u32 f=0; f < files.size(); ++f )
+ {
+ tex = driver->getTexture( files[f] );
+ if ( tex )
+ {
+ spriteBank->addTexture( driver->getTexture(files[f]) );
+ gui::SGUISpriteFrame frame;
+ frame.rectNumber = idxRect;
+ frame.textureNumber = startIdx+f;
+ sprite.Frames.push_back( frame );
+ }
+ }
+
+ sprites.push_back( sprite );
+ return sprites.size()-1;
+ }
+
+ return -1;
+}
+
+/*
+ Use several images within one imagefile as animation frames for a sprite which can be used as cursor icon
+ The sizes of the icons within that file all need to have the same size
+ Return sprite index on success or -1 on failure
+*/
+s32 AddAnimatedIconToSpriteBank( gui::IGUISpriteBank * spriteBank, video::IVideoDriver* driver, const io::path& file, const array< rect >& rects, u32 frameTime )
+{
+ if ( !spriteBank || !driver || !rects.size() )
+ return -1;
+
+ video::ITexture * tex = driver->getTexture( file );
+ if ( tex )
+ {
+ array< rect >& spritePositions = spriteBank->getPositions();
+ u32 idxRect = spritePositions.size();
+ u32 idxTex = spriteBank->getTextureCount();
+ spriteBank->addTexture( tex );
+
+ SGUISprite sprite;
+ sprite.frameTime = frameTime;
+
+ array< SGUISprite >& sprites = spriteBank->getSprites();
+ for ( u32 i=0; i < rects.size(); ++i )
+ {
+ spritePositions.push_back( rects[i] );
+
+ gui::SGUISpriteFrame frame;
+ frame.rectNumber = idxRect+i;
+ frame.textureNumber = idxTex;
+ sprite.Frames.push_back( frame );
+ }
+
+ sprites.push_back( sprite );
+ return sprites.size()-1;
+ }
+
+ return -1;
+}
+
+/*
+ Create a non-animated icon from the given file and position and put it into the spritebank.
+ We can use this icon later on in a cursor.
+*/
+s32 AddIconToSpriteBank( gui::IGUISpriteBank * spriteBank, video::IVideoDriver* driver, const io::path& file, const core::rect& rect )
+{
+ if ( !spriteBank || !driver )
+ return -1;
+
+ video::ITexture * tex = driver->getTexture( file );
+ if ( tex )
+ {
+ core::array< core::rect >& spritePositions = spriteBank->getPositions();
+ spritePositions.push_back( rect );
+ array< SGUISprite >& sprites = spriteBank->getSprites();
+ spriteBank->addTexture( tex );
+
+ gui::SGUISpriteFrame frame;
+ frame.rectNumber = spritePositions.size()-1;
+ frame.textureNumber = spriteBank->getTextureCount()-1;
+
+ SGUISprite sprite;
+ sprite.frameTime = 0;
+ sprite.Frames.push_back( frame );
+
+ sprites.push_back( sprite );
+
+ return sprites.size()-1;
+ }
+
+ return -1;
+}
+
+int main()
+{
+ video::E_DRIVER_TYPE driverType = driverChoiceConsole();
+ if (driverType==video::EDT_COUNT)
+ return 1;
+
+ IrrlichtDevice * device = createDevice(driverType, dimension2d(640, 480));
+ if (device == 0)
+ return 1; // could not create selected driver.
+
+ // It's sometimes of interest to know how the mouse behaves after a resize
+ device->setResizable(true);
+
+ device->setWindowCaption(L"Cursor control - Irrlicht engine tutorial");
+ video::IVideoDriver* driver = device->getVideoDriver();
+ IGUIEnvironment* env = device->getGUIEnvironment();
+
+ gui::IGUISpriteBank * SpriteBankIcons;
+
+ SAppContext context;
+ context.Device = device;
+
+ rect< s32 > rectInfoStatic(10,10, 200, 200);
+ env->addStaticText (L"Cursor state information", rectInfoStatic, true, true);
+ rectInfoStatic.UpperLeftCorner += dimension2di(0, 15);
+ context.InfoStatic = env->addStaticText (L"", rectInfoStatic, true, true);
+ rect< s32 > rectEventBox(10,210, 200, 400);
+ env->addStaticText (L"click events (new on top)", rectEventBox, true, true);
+ rectEventBox.UpperLeftCorner += dimension2di(0, 15);
+ context.EventBox = env->addListBox(rectEventBox);
+ rect< s32 > rectCursorBox(210,10, 400, 250);
+ env->addStaticText (L"cursors, click to set the active one", rectCursorBox, true, true);
+ rectCursorBox.UpperLeftCorner += dimension2di(0, 15);
+ context.CursorBox = env->addListBox(rectCursorBox);
+ rect< s32 > rectSpriteBox(210,260, 400, 400);
+ env->addStaticText (L"sprites", rectSpriteBox, true, true);
+ rectSpriteBox.UpperLeftCorner += dimension2di(0, 15);
+ context.SpriteBox = env->addListBox(rectSpriteBox);
+
+ context.ButtonSetVisible = env->addButton( rect( 410, 20, 560, 40 ), 0, -1, L"set visible (delayed)" );
+ context.ButtonSetInvisible = env->addButton( rect( 410, 50, 560, 70 ), 0, -1, L"set invisible (delayed)" );
+ context.ButtonSimulateBadFps = env->addButton( rect( 410, 80, 560, 100 ), 0, -1, L"simulate bad FPS" );
+ context.ButtonSimulateBadFps->setIsPushButton(true);
+ context.ButtonChangeIcon = env->addButton( rect( 410, 140, 560, 160 ), 0, -1, L"replace cursor icon\n(cursor+sprite must be selected)" );
+
+ // set the names for all the system cursors
+ for ( int i=0; i < (int)gui::ECI_COUNT; ++i )
+ {
+ context.CursorBox->addItem(stringw( GUICursorIconNames[i] ).c_str());
+ }
+
+ /*
+ Create sprites which then can be used as cursor icons.
+ */
+ SpriteBankIcons = env->addEmptySpriteBank(io::path("cursor_icons"));
+ context.SpriteBox->setSpriteBank(SpriteBankIcons);
+
+ // create one animated icon from several files
+ array< io::path > files;
+ files.push_back( io::path("../../media/icon_crosshairs16x16bw1.png") );
+ files.push_back( io::path("../../media/icon_crosshairs16x16bw2.png") );
+ files.push_back( io::path("../../media/icon_crosshairs16x16bw3.png") );
+ files.push_back( io::path("../../media/icon_crosshairs16x16bw3.png") );
+ files.push_back( io::path("../../media/icon_crosshairs16x16bw2.png") );
+ SCursorSprite spriteBw; // the sprite + some additional information needed for cursors
+ spriteBw.SpriteId = AddAnimatedIconToSpriteBank( SpriteBankIcons, driver, files, 200 );
+ spriteBw.SpriteBank = SpriteBankIcons;
+ spriteBw.HotSpot = position2d(7,7);
+ context.addIcon(L"crosshair_bw", spriteBw);
+
+ // create one animated icon from one file
+ array< rect > iconRects;
+ iconRects.push_back( rect(0,0, 16, 16) );
+ iconRects.push_back( rect(16,0, 32, 16) );
+ iconRects.push_back( rect(0,16, 16, 32) );
+ iconRects.push_back( rect(0,16, 16, 32) );
+ iconRects.push_back( rect(16,0, 32, 16) );
+ SCursorSprite spriteCol; // the sprite + some additional information needed for cursors
+ spriteCol.SpriteId = AddAnimatedIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), iconRects, 200 );
+ spriteCol.HotSpot = position2d(7,7);
+ spriteCol.SpriteBank = SpriteBankIcons;
+ context.addIcon(L"crosshair_colored", spriteCol);
+
+ // Create some non-animated icons
+ rect rectIcon;
+ SCursorSprite spriteNonAnimated(SpriteBankIcons, 0, position2d(7,7));
+
+ rectIcon = rect(0,0, 16, 16);
+ spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), rectIcon );
+ context.addIcon(L"crosshair_col1", spriteNonAnimated, false);
+
+ rectIcon = rect(16,0, 32, 16);
+ spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), rectIcon );
+ context.addIcon(L"crosshair_col2", spriteNonAnimated, false);
+
+ rectIcon = rect(0,16, 16, 32);
+ spriteNonAnimated.SpriteId = AddIconToSpriteBank( SpriteBankIcons, driver, io::path("../../media/icon_crosshairs16x16col.png"), rectIcon );
+ context.addIcon(L"crosshair_col3", spriteNonAnimated, false);
+
+
+ MyEventReceiver receiver(context);
+ device->setEventReceiver(&receiver);
+
+ while(device->run() && driver)
+ {
+ // if (device->isWindowActive())
+ {
+ u32 realTimeNow = device->getTimer()->getRealTime();
+
+ context.update();
+
+ driver->beginScene(true, true, SColor(0,200,200,200));
+
+ env->drawAll();
+
+ // draw custom sprite with Irrlicht functions for comparison. It should usually look the same as the cursors.
+ if ( context.SpriteBox )
+ {
+ s32 selectedSprite = context.SpriteBox->getSelected();
+ if ( selectedSprite >= 0 && context.Sprites[selectedSprite].SpriteId >= 0 )
+ {
+ SpriteBankIcons->draw2DSprite(u32(context.Sprites[selectedSprite].SpriteId), position2di(580, 140), 0, video::SColor(255, 255, 255, 255), 0, realTimeNow);
+ }
+ }
+
+ 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.
+ if ( context.SimulateBadFps )
+ {
+ device->sleep(500); // 2 fps
+ }
+ else
+ {
+ device->sleep(10);
+ }
+ }
+
+ device->drop();
+
+ return 0;
+}
+
+/*
+**/
--
cgit v1.1