[Solved]Relative mouse input?

mrmclovin

08-11-2009 18:47:40

Hi,

I'm doing some camera controllment. When I press mouse button I want the mouse pointer to hide and when I release the button I want to make the pointer visible again from _the position_ it was hidden at!

How can I do it? I tried to use the PointerManager to setPosition() when mouse is released but I get an error:
19:50:13 | Core | Critical | instance PointerManager is exsist | d:\development\sdk\mygui\source\myguiengine\src\mygui_pointermanager.cpp | 41

----------------------------------------------------------------------------------------------------------------------------------
loging report for : 11/08/2009 19:50:06
----------------------------------------------------------------------------------------------------------------------------------

19:50:06 | Platform | Info | * Initialise: OgreRenderManager | d:\development\sdk\mygui\source\platforms\ogre\ogreplatform\src\mygui_ogrerendermanager.cpp | 40
19:50:06 | Platform | Info | OgreRenderManager successfully initialized | d:\development\sdk\mygui\source\platforms\ogre\ogreplatform\src\mygui_ogrerendermanager.cpp | 118
19:50:06 | Platform | Info | * Initialise: OgreTextureManager | d:\development\sdk\mygui\source\platforms\ogre\ogreplatform\src\mygui_ogretexturemanager.cpp | 37
19:50:06 | Platform | Info | OgreTextureManager successfully initialized | d:\development\sdk\mygui\source\platforms\ogre\ogreplatform\src\mygui_ogretexturemanager.cpp | 39
19:50:06 | Platform | Info | * Initialise: OgreDataManager | d:\development\sdk\mygui\source\platforms\ogre\ogreplatform\src\mygui_ogredatamanager.cpp | 60
19:50:06 | Platform | Info | OgreDataManager successfully initialized | d:\development\sdk\mygui\source\platforms\ogre\ogreplatform\src\mygui_ogredatamanager.cpp | 64
19:50:06 | Core | Info | * Initialise: Gui | d:\development\sdk\mygui\source\myguiengine\src\mygui_gui.cpp | 83
19:50:06 | Core | Info | * MyGUI version 3.0.0 | d:\development\sdk\mygui\source\myguiengine\src\mygui_gui.cpp | 87
19:50:06 | Core | Info | * Initialise: ResourceManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 43
19:50:06 | Core | Info | ResourceManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 54
19:50:06 | Core | Info | * Initialise: LayerManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_layermanager.cpp | 45
19:50:06 | Core | Info | LayerManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_layermanager.cpp | 54
19:50:06 | Core | Info | * Initialise: WidgetManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_widgetmanager.cpp | 67
19:50:06 | Core | Info | WidgetManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_widgetmanager.cpp | 100
19:50:06 | Core | Info | * Initialise: InputManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_inputmanager.cpp | 56
19:50:06 | Core | Info | InputManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_inputmanager.cpp | 79
19:50:06 | Core | Info | * Initialise: SubWidgetManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_subwidgetmanager.cpp | 44
19:50:06 | Core | Info | SubWidgetManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_subwidgetmanager.cpp | 64
19:50:06 | Core | Info | * Initialise: SkinManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_skinmanager.cpp | 45
19:50:06 | Core | Info | SkinManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_skinmanager.cpp | 52
19:50:06 | Core | Info | * Initialise: FontManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_fontmanager.cpp | 41
19:50:06 | Core | Info | FontManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_fontmanager.cpp | 48
19:50:06 | Core | Info | * Initialise: ControllerManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_controllermanager.cpp | 42
19:50:06 | Core | Info | ControllerManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_controllermanager.cpp | 52
19:50:06 | Core | Info | * Initialise: PointerManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_pointermanager.cpp | 46
19:50:06 | Core | Info | PointerManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_pointermanager.cpp | 61
19:50:06 | Core | Info | * Initialise: ClipboardManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_clipboardmanager.cpp | 82
19:50:06 | Core | Info | ClipboardManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_clipboardmanager.cpp | 96
19:50:06 | Core | Info | * Initialise: LayoutManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 42
19:50:06 | Core | Info | LayoutManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 48
19:50:06 | Core | Info | * Initialise: DynLibManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_dynlibmanager.cpp | 35
19:50:06 | Core | Info | DynLibManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_dynlibmanager.cpp | 37
19:50:06 | Core | Info | * Initialise: PluginManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_pluginmanager.cpp | 37
19:50:06 | Core | Info | PluginManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_pluginmanager.cpp | 41
19:50:06 | Core | Info | * Initialise: DelegateManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_delegatemanager.cpp | 34
19:50:06 | Core | Info | DelegateManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_delegatemanager.cpp | 38
19:50:06 | Core | Info | * Initialise: LanguageManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_languagemanager.cpp | 39
19:50:06 | Core | Info | LanguageManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_languagemanager.cpp | 46
19:50:06 | Core | Info | * Initialise: FactoryManager | d:\development\sdk\mygui\source\myguiengine\src\mygui_factorymanager.cpp | 34
19:50:06 | Core | Info | FactoryManager successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_factorymanager.cpp | 37
19:50:06 | Core | Info | Load ini file 'core_keyboard.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:06 | Core | Info | Load ini file 'core_language.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:06 | Core | Info | Load ini file 'core_layer.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:06 | Core | Info | Load ini file 'core_font.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:06 | Core | Info | TrueTypeFont 'Default' using texture size 512 x 256 | d:\development\sdk\mygui\source\myguiengine\src\mygui_truetypefont.cpp | 177
19:50:06 | Core | Info | TrueTypeFont 'Default' using real height 17 pixels | d:\development\sdk\mygui\source\myguiengine\src\mygui_truetypefont.cpp | 178
19:50:06 | Core | Info | TrueTypeFont 'DejaVuSans.17' using texture size 256 x 256 | d:\development\sdk\mygui\source\myguiengine\src\mygui_truetypefont.cpp | 177
19:50:06 | Core | Info | TrueTypeFont 'DejaVuSans.17' using real height 17 pixels | d:\development\sdk\mygui\source\myguiengine\src\mygui_truetypefont.cpp | 178
19:50:06 | Core | Info | TrueTypeFont 'DejaVuSans.14' using texture size 256 x 256 | d:\development\sdk\mygui\source\myguiengine\src\mygui_truetypefont.cpp | 177
19:50:06 | Core | Info | TrueTypeFont 'DejaVuSans.14' using real height 14 pixels | d:\development\sdk\mygui\source\myguiengine\src\mygui_truetypefont.cpp | 178
19:50:06 | Core | Info | Load ini file 'core_theme_black_orange.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:06 | Core | Info | Load ini file 'core_resource.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:06 | Core | Info | Load ini file 'core_skin.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:07 | Core | Info | Register value : 'HCenter' = 0 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 187
19:50:07 | Core | Info | Register value : 'VCenter' = 0 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 188
19:50:07 | Core | Info | Register value : 'Center' = 0 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 189
19:50:07 | Core | Info | Register value : 'Left' = 2 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 190
19:50:07 | Core | Info | Register value : 'Right' = 4 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 191
19:50:07 | Core | Info | Register value : 'HStretch' = 6 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 192
19:50:07 | Core | Info | Register value : 'Top' = 8 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 193
19:50:07 | Core | Info | Register value : 'Bottom' = 16 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 194
19:50:07 | Core | Info | Register value : 'VStretch' = 24 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 195
19:50:07 | Core | Info | Register value : 'Stretch' = 30 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 196
19:50:07 | Core | Info | Register value : 'Default' = 10 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 197
19:50:07 | Core | Info | Register value : 'HRelative' = 32 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 198
19:50:07 | Core | Info | Register value : 'VRelative' = 64 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 199
19:50:07 | Core | Info | Register value : 'Relative' = 96 | d:\development\sdk\mygui\source\myguiengine\include\mygui_align.h | 200
19:50:07 | Core | Info | Load ini file 'core_pointer.xml' | d:\development\sdk\mygui\source\myguiengine\src\mygui_resourcemanager.cpp | 166
19:50:07 | Core | Info | Gui successfully initialized | d:\development\sdk\mygui\source\myguiengine\src\mygui_gui.cpp | 132
19:50:07 | Core | Info | load layout 'Editor.layout' | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 73
19:50:07 | Core | Info | load layout 'transform_panel.layout' | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 73
19:50:07 | Core | Info | load layout 'mesh_panel.layout' | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 73
19:50:07 | Core | Info | load layout 'body_panel.layout' | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 73
19:50:07 | Core | Info | load layout 'boxshape_panel.layout' | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 73
19:50:07 | Core | Info | load layout 'GameObjectEditor.layout' | d:\development\sdk\mygui\source\myguiengine\src\mygui_layoutmanager.cpp | 73
19:50:13 | Core | Critical | instance PointerManager is exsist | d:\development\sdk\mygui\source\myguiengine\src\mygui_pointermanager.cpp | 41

my.name

08-11-2009 22:16:51

show code

MyGUI::PointerManager::getInstance().setPointer() << ok

MyGUI::PointerManager().setPointer() << error, create new instance PointerManager

mrmclovin

09-11-2009 21:17:27

MyGUI::PointerManager().setPointer() << error, create new instance PointerManager

Yup that was the error ... How could I have missed that :)

However my main issue remains. Even If I setPosition() I will still inject absolute pointer position. I know you had the option to inject relative position in earlier version of mygui. How come you removed that feature? Coz I can't come up with anything that could solve this problem easily?

my.name

10-11-2009 00:26:13

//in your input manager
int mCurrentX;
int mCurrentY;

// in inject method
mCurrentX += rel_x;
mCurrentY += rel_y;
injectMouseMove(mCurrentX, mCurrentY);

// in any plase (an example move to center)
mCurentX = width / 2;
mCurrentY = height / 2;

mrmclovin

11-11-2009 09:38:33

//in your input manager
int mCurrentX;
int mCurrentY;

// in inject method
mCurrentX += rel_x;
mCurrentY += rel_y;
injectMouseMove(mCurrentX, mCurrentY);

// in any plase (an example move to center)
mCurentX = width / 2;
mCurrentY = height / 2;

Thanks, that should probably do it!

mrmclovin

11-11-2009 11:46:16

I'm getting some strange results. I can't find any error in my code.

When I press the mouse, I tell mygui to stop recieve mousemove which is fine, the pointer isn't moving. When I release the mouse button, my pointer disappears completely or it will appear somewhere else on the screen until I move the pointer again and it'll go to the position where it was when I pressed the button.

I was wondering; in Gui::InjectMouseReleased() you take the OIS::MouseEvent as param. That function should not touch pointer position, right? Or what else could mess things up?

MouseMoved:
if(mInjectGuiMouseMove)
{
mRelMousePosX += arg.state.X.rel;
mRelMousePosY += arg.state.Y.rel;
mGui->injectMouseMove(mRelMousePosX, mRelMousePosY, 0);
}

MousePressed:
if(mInjectGuiMouseButton)
mGui->injectMouseRelease(arg, id);


onMouseClickedInRenderBox:
if(mouseDown)
mInjectGuiMouseMove = false; // don't move gui pointer, only receive movemove from OIS to move camera

if(mouseUp)
mInjectGuiMouseMove = true; // move gui pointer from the position we stopped it

my.name

11-11-2009 12:37:39


if(mInjectGuiMouseButton)
mGui->injectMouseRelease(arg, id);// arg - absolute


if (mInjectGuiMouseButton)
mGui->injectMouseRelease(mRelMousePosX, mRelMousePosY, id);

if (mInjectGuiMouseButton)
mGui->injectMousePressed(mRelMousePosX, mRelMousePosY, id);


dont use arg anywhere

mrmclovin

12-11-2009 21:06:20

Seems to work, thanks!