Merge remote-tracking branch 'kahrl/dissector'
[oweals/minetest.git] / src / guiInventoryMenu.cpp
index f90a2e95982e48eff57bdcafee53883b0abc2b39..bf955a43ed55154d88887c0b48673d2dfc42ff15 100644 (file)
@@ -41,7 +41,7 @@ void drawInventoryItem(video::IVideoDriver *driver,
                driver->draw2DImage(texture, rect,
                        core::rect<s32>(core::position2d<s32>(0,0),
                        core::dimension2di(texture->getOriginalSize())),
-                       clip, colors, false);
+                       clip, colors, true);
        }
        else
        {
@@ -241,22 +241,31 @@ void GUIInventoryMenu::drawList(const ListDrawSpec &s)
                if(m_selected_item != NULL && m_selected_item->listname == s.listname
                                && m_selected_item->i == i)
                {
+                       /*s32 border = imgsize.X/12;
+                       driver->draw2DRectangle(video::SColor(255,192,192,192),
+                                       core::rect<s32>(rect.UpperLeftCorner - v2s32(1,1)*border,
+                                                       rect.LowerRightCorner + v2s32(1,1)*border),
+                                       NULL);
+                       driver->draw2DRectangle(video::SColor(255,0,0,0),
+                                       core::rect<s32>(rect.UpperLeftCorner - v2s32(1,1)*((border+1)/2),
+                                                       rect.LowerRightCorner + v2s32(1,1)*((border+1)/2)),
+                                       NULL);*/
+                       s32 border = 2;
                        driver->draw2DRectangle(video::SColor(255,255,0,0),
-                                       core::rect<s32>(rect.UpperLeftCorner - v2s32(2,2),
-                                                       rect.LowerRightCorner + v2s32(2,2)),
+                                       core::rect<s32>(rect.UpperLeftCorner - v2s32(1,1)*border,
+                                                       rect.LowerRightCorner + v2s32(1,1)*border),
                                        &AbsoluteClippingRect);
                }
 
+               video::SColor bgcolor(255,128,128,128);
+               driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect);
+
                if(item)
                {
                        drawInventoryItem(driver, font, item,
                                        rect, &AbsoluteClippingRect);
                }
-               else
-               {
-                       video::SColor bgcolor(255,128,128,128);
-                       driver->draw2DRectangle(bgcolor, rect, &AbsoluteClippingRect);
-               }
+
        }
 }
 
@@ -300,10 +309,17 @@ bool GUIInventoryMenu::OnEvent(const SEvent& event)
        }
        if(event.EventType==EET_MOUSE_INPUT_EVENT)
        {
-               if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN
-                               || event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN)
+               char amount = -1;
+               
+               if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
+                       amount = 0;
+               else if(event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN)
+                       amount = 1;
+               else if(event.MouseInput.Event == EMIE_MMOUSE_PRESSED_DOWN)
+                       amount = 10;
+               
+               if(amount >= 0)
                {
-                       bool right = (event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN);
                        v2s32 p(event.MouseInput.X, event.MouseInput.Y);
                        //dstream<<"Mouse down at p=("<<p.X<<","<<p.Y<<")"<<std::endl;
                        ItemSpec s = getItemAtPos(p);
@@ -334,7 +350,7 @@ bool GUIInventoryMenu::OnEvent(const SEvent& event)
                                        {
                                                dstream<<"Handing IACTION_MOVE to manager"<<std::endl;
                                                IMoveAction *a = new IMoveAction();
-                                               a->count = right ? 1 : 0;
+                                               a->count = amount;
                                                a->from_inv = m_selected_item->inventoryname;
                                                a->from_list = m_selected_item->listname;
                                                a->from_i = m_selected_item->i;
@@ -349,7 +365,7 @@ bool GUIInventoryMenu::OnEvent(const SEvent& event)
                                        }
                                        // Remove selection if target was left-clicked or source
                                        // slot was emptied
-                                       if(right == false || source_empties)
+                                       if(amount == 0 || source_empties)
                                        {
                                                delete m_selected_item;
                                                m_selected_item = NULL;