From 96007521ba20250db0ed05e4d6117077690637db Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sat, 1 Dec 2012 20:29:04 +0300 Subject: add batch draw to equipment window. --- src/gui/equipmentwindow.cpp | 49 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 10 deletions(-) (limited to 'src/gui/equipmentwindow.cpp') diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp index e05e1cc50..ef22dc4c5 100644 --- a/src/gui/equipmentwindow.cpp +++ b/src/gui/equipmentwindow.cpp @@ -23,6 +23,7 @@ #include "gui/equipmentwindow.h" #include "being.h" +#include "graphicsvertexes.h" #include "inventory.h" #include "item.h" #include "localplayer.h" @@ -64,6 +65,7 @@ EquipmentWindow::EquipmentWindow(Equipment *const equipment, mHighlightColor(getThemeColor(Theme::HIGHLIGHT)), mBorderColor(getThemeColor(Theme::BORDER)), mLabelsColor(getThemeColor(Theme::LABEL)), + mVertexes(new ImageCollection), mItemPadding(getOption("itemPadding")), mBoxSize(getOption("boxSize")), mMinX(180), @@ -145,21 +147,48 @@ void EquipmentWindow::draw(gcn::Graphics *graphics) // Draw window graphics Window::draw(graphics); Graphics *const g = static_cast(graphics); - Window::drawChildren(graphics); int i = 0; const int fontHeight = getFont()->getHeight(); - for (std::vector::const_iterator it = mBoxes.begin(), - it_end = mBoxes.end(); it != it_end; ++ it, ++ i) + if (openGLMode != 2) { - const EquipmentBox *const box = *it; - if (!box) - continue; - if (i == mSelected) - g->drawImage(mSlotHighlightedBackground, box->x, box->y); - else - g->drawImage(mSlotBackground, box->x, box->y); + if (mLastRedraw) + { + mVertexes->clear(); + for (std::vector::const_iterator + it = mBoxes.begin(), it_end = mBoxes.end(); + it != it_end; ++ it, ++ i) + { + const EquipmentBox *const box = *it; + if (!box) + continue; + if (i == mSelected) + { + g->calcTile(mVertexes, mSlotHighlightedBackground, + box->x, box->y); + } + else + { + g->calcTile(mVertexes, mSlotBackground, box->x, box->y); + } + } + } + g->drawTile(mVertexes); + } + else + { + for (std::vector::const_iterator it = mBoxes.begin(), + it_end = mBoxes.end(); it != it_end; ++ it, ++ i) + { + const EquipmentBox *const box = *it; + if (!box) + continue; + if (i == mSelected) + g->drawImage(mSlotHighlightedBackground, box->x, box->y); + else + g->drawImage(mSlotBackground, box->x, box->y); + } } if (!mEquipment) -- cgit v1.2.3-70-g09d2