+ drawItemStack(driver, g_fontengine->getFont(), item, rect, NULL,
+ client, selected ? IT_ROT_SELECTED : IT_ROT_NONE);
+ }
+
+//NOTE: selectitem = 0 -> no selected; selectitem 1-based
+void Hud::drawItems(v2s32 upperleftpos, v2s32 screen_offset, s32 itemcount,
+ s32 inv_offset, InventoryList *mainlist, u16 selectitem, u16 direction)
+{
+#ifdef HAVE_TOUCHSCREENGUI
+ if (g_touchscreengui && inv_offset == 0)
+ g_touchscreengui->resetHud();
+#endif
+
+ s32 height = m_hotbar_imagesize + m_padding * 2;
+ s32 width = (itemcount - inv_offset) * (m_hotbar_imagesize + m_padding * 2);
+
+ if (direction == HUD_DIR_TOP_BOTTOM || direction == HUD_DIR_BOTTOM_TOP) {
+ s32 tmp = height;
+ height = width;
+ width = tmp;
+ }
+
+ // Position of upper left corner of bar
+ v2s32 pos = screen_offset;
+ pos.X *= m_hud_scaling * porting::getDisplayDensity();
+ pos.Y *= m_hud_scaling * porting::getDisplayDensity();
+ pos += upperleftpos;
+
+ // Store hotbar_image in member variable, used by drawItem()
+ if (hotbar_image != player->hotbar_image) {
+ hotbar_image = player->hotbar_image;
+ if (hotbar_image != "")
+ use_hotbar_image = tsrc->isKnownSourceImage(hotbar_image);
+ else
+ use_hotbar_image = false;
+ }
+
+ // Store hotbar_selected_image in member variable, used by drawItem()
+ if (hotbar_selected_image != player->hotbar_selected_image) {
+ hotbar_selected_image = player->hotbar_selected_image;
+ if (hotbar_selected_image != "")
+ use_hotbar_selected_image = tsrc->isKnownSourceImage(hotbar_selected_image);
+ else
+ use_hotbar_selected_image = false;
+ }
+
+ // draw customized item background
+ if (use_hotbar_image) {
+ core::rect<s32> imgrect2(-m_padding/2, -m_padding/2,
+ width+m_padding/2, height+m_padding/2);
+ core::rect<s32> rect2 = imgrect2 + pos;
+ video::ITexture *texture = tsrc->getTexture(hotbar_image);
+ core::dimension2di imgsize(texture->getOriginalSize());
+ draw2DImageFilterScaled(driver, texture, rect2,
+ core::rect<s32>(core::position2d<s32>(0,0), imgsize),
+ NULL, hbar_colors, true);
+ }
+
+ // Draw items
+ core::rect<s32> imgrect(0, 0, m_hotbar_imagesize, m_hotbar_imagesize);
+ for (s32 i = inv_offset; i < itemcount && (size_t)i < mainlist->getSize(); i++) {
+ s32 fullimglen = m_hotbar_imagesize + m_padding * 2;
+
+ v2s32 steppos;
+ switch (direction) {
+ case HUD_DIR_RIGHT_LEFT:
+ steppos = v2s32(-(m_padding + (i - inv_offset) * fullimglen), m_padding);
+ break;
+ case HUD_DIR_TOP_BOTTOM:
+ steppos = v2s32(m_padding, m_padding + (i - inv_offset) * fullimglen);
+ break;
+ case HUD_DIR_BOTTOM_TOP:
+ steppos = v2s32(m_padding, -(m_padding + (i - inv_offset) * fullimglen));
+ break;
+ default:
+ steppos = v2s32(m_padding + (i - inv_offset) * fullimglen, m_padding);
+ break;
+ }
+
+ drawItem(mainlist->getItem(i), (imgrect + pos + steppos), (i + 1) == selectitem);
+
+#ifdef HAVE_TOUCHSCREENGUI
+ if (g_touchscreengui)
+ g_touchscreengui->registerHudItem(i, (imgrect + pos + steppos));
+#endif