forked from Mirrorlandia_minetest/minetest
GUIInventoryList: Keep item size while moving (#12896)
This commit is contained in:
parent
02c293ec63
commit
16266397ed
@ -3515,10 +3515,10 @@ GUIInventoryList::ItemSpec GUIFormSpecMenu::getItemAtPos(v2s32 p) const
|
|||||||
s32 item_index = e->getItemIndexAtPos(p);
|
s32 item_index = e->getItemIndexAtPos(p);
|
||||||
if (item_index != -1)
|
if (item_index != -1)
|
||||||
return GUIInventoryList::ItemSpec(e->getInventoryloc(), e->getListname(),
|
return GUIInventoryList::ItemSpec(e->getInventoryloc(), e->getListname(),
|
||||||
item_index);
|
item_index, e->getSlotSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
return GUIInventoryList::ItemSpec(InventoryLocation(), "", -1);
|
return GUIInventoryList::ItemSpec(InventoryLocation(), "", -1, {0,0});
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUIFormSpecMenu::drawSelectedItem()
|
void GUIFormSpecMenu::drawSelectedItem()
|
||||||
@ -3540,7 +3540,8 @@ void GUIFormSpecMenu::drawSelectedItem()
|
|||||||
ItemStack stack = list->getItem(m_selected_item->i);
|
ItemStack stack = list->getItem(m_selected_item->i);
|
||||||
stack.count = m_selected_amount;
|
stack.count = m_selected_amount;
|
||||||
|
|
||||||
core::rect<s32> imgrect(0,0,imgsize.X,imgsize.Y);
|
v2s32 slotsize = m_selected_item->slotsize;
|
||||||
|
core::rect<s32> imgrect(0, 0, slotsize.X, slotsize.Y);
|
||||||
core::rect<s32> rect = imgrect + (m_pointer - imgrect.getCenter());
|
core::rect<s32> rect = imgrect + (m_pointer - imgrect.getCenter());
|
||||||
rect.constrainTo(driver->getViewPort());
|
rect.constrainTo(driver->getViewPort());
|
||||||
drawItemStack(driver, m_font, stack, rect, NULL, m_client, IT_ROT_DRAGGED);
|
drawItemStack(driver, m_font, stack, rect, NULL, m_client, IT_ROT_DRAGGED);
|
||||||
@ -3791,6 +3792,7 @@ void GUIFormSpecMenu::updateSelectedItem()
|
|||||||
m_selected_item->inventoryloc = e->getInventoryloc();
|
m_selected_item->inventoryloc = e->getInventoryloc();
|
||||||
m_selected_item->listname = "craftresult";
|
m_selected_item->listname = "craftresult";
|
||||||
m_selected_item->i = 0;
|
m_selected_item->i = 0;
|
||||||
|
m_selected_item->slotsize = e->getSlotSize();
|
||||||
m_selected_amount = item.count;
|
m_selected_amount = item.count;
|
||||||
m_selected_dragging = false;
|
m_selected_dragging = false;
|
||||||
break;
|
break;
|
||||||
|
@ -34,10 +34,12 @@ public:
|
|||||||
|
|
||||||
ItemSpec(const InventoryLocation &a_inventoryloc,
|
ItemSpec(const InventoryLocation &a_inventoryloc,
|
||||||
const std::string &a_listname,
|
const std::string &a_listname,
|
||||||
s32 a_i) :
|
s32 a_i,
|
||||||
|
const v2s32 slotsize) :
|
||||||
inventoryloc(a_inventoryloc),
|
inventoryloc(a_inventoryloc),
|
||||||
listname(a_listname),
|
listname(a_listname),
|
||||||
i(a_i)
|
i(a_i),
|
||||||
|
slotsize(slotsize)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,6 +48,7 @@ public:
|
|||||||
InventoryLocation inventoryloc;
|
InventoryLocation inventoryloc;
|
||||||
std::string listname;
|
std::string listname;
|
||||||
s32 i = -1;
|
s32 i = -1;
|
||||||
|
v2s32 slotsize;
|
||||||
};
|
};
|
||||||
|
|
||||||
// options for inventorylists that are setable with the lua api
|
// options for inventorylists that are setable with the lua api
|
||||||
@ -99,6 +102,11 @@ public:
|
|||||||
m_options.slotbordercolor = slotbordercolor;
|
m_options.slotbordercolor = slotbordercolor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const v2s32 getSlotSize() const noexcept
|
||||||
|
{
|
||||||
|
return m_slot_size;
|
||||||
|
}
|
||||||
|
|
||||||
// returns -1 if not item is at pos p
|
// returns -1 if not item is at pos p
|
||||||
s32 getItemIndexAtPos(v2s32 p) const;
|
s32 getItemIndexAtPos(v2s32 p) const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user