Make dragged itemstack following the mouse cursor much smoother

by using the cursor coordinates directly, instead of updating them only when a mouse event is seen.
This commit is contained in:
Jürgen Doser 2012-11-28 18:39:58 +01:00 committed by Perttu Ahola
parent 6cf87e1d23
commit c1d8eeb70a
3 changed files with 10 additions and 15 deletions

@ -1513,7 +1513,7 @@ void the_game(
<<"Launching inventory"<<std::endl; <<"Launching inventory"<<std::endl;
GUIFormSpecMenu *menu = GUIFormSpecMenu *menu =
new GUIFormSpecMenu(guienv, guiroot, -1, new GUIFormSpecMenu(device, guiroot, -1,
&g_menumgr, &g_menumgr,
&client, gamedef); &client, gamedef);
@ -2296,7 +2296,7 @@ void the_game(
/* Create menu */ /* Create menu */
GUIFormSpecMenu *menu = GUIFormSpecMenu *menu =
new GUIFormSpecMenu(guienv, guiroot, -1, new GUIFormSpecMenu(device, guiroot, -1,
&g_menumgr, &g_menumgr,
&client, gamedef); &client, gamedef);
menu->setFormSpec(meta->getString("formspec"), menu->setFormSpec(meta->getString("formspec"),

@ -125,13 +125,14 @@ void drawItemStack(video::IVideoDriver *driver,
GUIFormSpecMenu GUIFormSpecMenu
*/ */
GUIFormSpecMenu::GUIFormSpecMenu(gui::IGUIEnvironment* env, GUIFormSpecMenu::GUIFormSpecMenu(irr::IrrlichtDevice* dev,
gui::IGUIElement* parent, s32 id, gui::IGUIElement* parent, s32 id,
IMenuManager *menumgr, IMenuManager *menumgr,
InventoryManager *invmgr, InventoryManager *invmgr,
IGameDef *gamedef IGameDef *gamedef
): ):
GUIModalMenu(env, parent, id, menumgr), GUIModalMenu(dev->getGUIEnvironment(), parent, id, menumgr),
m_device(dev),
m_invmgr(invmgr), m_invmgr(invmgr),
m_gamedef(gamedef), m_gamedef(gamedef),
m_form_src(NULL), m_form_src(NULL),
@ -698,6 +699,8 @@ void GUIFormSpecMenu::drawMenu()
} }
} }
m_pointer = m_device->getCursorControl()->getPosition();
updateSelectedItem(); updateSelectedItem();
gui::IGUISkin* skin = Environment->getSkin(); gui::IGUISkin* skin = Environment->getSkin();
@ -937,24 +940,15 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
return true; return true;
} }
} }
if(event.EventType==EET_MOUSE_INPUT_EVENT
&& event.MouseInput.Event == EMIE_MOUSE_MOVED)
{
// Mouse moved
m_pointer = v2s32(event.MouseInput.X, event.MouseInput.Y);
}
if(event.EventType==EET_MOUSE_INPUT_EVENT if(event.EventType==EET_MOUSE_INPUT_EVENT
&& event.MouseInput.Event != EMIE_MOUSE_MOVED) && event.MouseInput.Event != EMIE_MOUSE_MOVED)
{ {
// Mouse event other than movement // Mouse event other than movement
v2s32 p(event.MouseInput.X, event.MouseInput.Y);
m_pointer = p;
// Get selected item and hovered/clicked item (s) // Get selected item and hovered/clicked item (s)
updateSelectedItem(); updateSelectedItem();
ItemSpec s = getItemAtPos(p); ItemSpec s = getItemAtPos(m_pointer);
Inventory *inv_selected = NULL; Inventory *inv_selected = NULL;
Inventory *inv_s = NULL; Inventory *inv_s = NULL;

@ -144,7 +144,7 @@ class GUIFormSpecMenu : public GUIModalMenu
}; };
public: public:
GUIFormSpecMenu(gui::IGUIEnvironment* env, GUIFormSpecMenu(irr::IrrlichtDevice* dev,
gui::IGUIElement* parent, s32 id, gui::IGUIElement* parent, s32 id,
IMenuManager *menumgr, IMenuManager *menumgr,
InventoryManager *invmgr, InventoryManager *invmgr,
@ -197,6 +197,7 @@ protected:
v2s32 spacing; v2s32 spacing;
v2s32 imgsize; v2s32 imgsize;
irr::IrrlichtDevice* m_device;
InventoryManager *m_invmgr; InventoryManager *m_invmgr;
IGameDef *m_gamedef; IGameDef *m_gamedef;