// image.cpp - GUIImage object #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern "C" { #include "../twcommon.h" #include "../minuitwrp/minui.h" } #include "rapidxml.hpp" #include "objects.hpp" GUIImage::GUIImage(xml_node<>* node) : GUIObject(node) { xml_attribute<>* attr; xml_node<>* child; mImage = NULL; mHighlightImage = NULL; isHighlighted = false; if (!node) return; child = node->first_node("image"); if (child) { attr = child->first_attribute("resource"); if (attr) mImage = PageManager::FindResource(attr->value()); attr = child->first_attribute("highlightresource"); if (attr) mHighlightImage = PageManager::FindResource(attr->value()); } // Load the placement LoadPlacement(node->first_node("placement"), &mRenderX, &mRenderY, NULL, NULL, &mPlacement); if (mImage && mImage->GetResource()) { mRenderW = gr_get_width(mImage->GetResource()); mRenderH = gr_get_height(mImage->GetResource()); // Adjust for placement if (mPlacement != TOP_LEFT && mPlacement != BOTTOM_LEFT) { if (mPlacement == CENTER) mRenderX -= (mRenderW / 2); else mRenderX -= mRenderW; } if (mPlacement != TOP_LEFT && mPlacement != TOP_RIGHT) { if (mPlacement == CENTER) mRenderY -= (mRenderH / 2); else mRenderY -= mRenderH; } SetPlacement(TOP_LEFT); } return; } int GUIImage::Render(void) { if (!isConditionTrue()) return 0; if (isHighlighted && mHighlightImage && mHighlightImage->GetResource()) { gr_blit(mHighlightImage->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); return 0; } else if (!mImage || !mImage->GetResource()) return -1; gr_blit(mImage->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); return 0; } int GUIImage::SetRenderPos(int x, int y, int w, int h) { if (w || h) return -1; mRenderX = x; mRenderY = y; return 0; }