From 51a0e82eb29a6dfc79f93479883383fbdbf8bcc2 Mon Sep 17 00:00:00 2001 From: Dees_Troy Date: Wed, 5 Sep 2012 15:24:24 -0400 Subject: TWRP-ify AOSP code Pull in most TWRP sources Stub out partition management code Make it compile -- probably will not boot Kind of a mess but have to start somewhere --- gui/slider.cpp | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 gui/slider.cpp (limited to 'gui/slider.cpp') diff --git a/gui/slider.cpp b/gui/slider.cpp new file mode 100644 index 000000000..95962c09b --- /dev/null +++ b/gui/slider.cpp @@ -0,0 +1,171 @@ +// slider.cpp - GUISlider object +// Pulled & ported from https://raw.github.com/agrabren/RecoverWin/master/gui/slider.cpp + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +extern "C" { +#include "../common.h" +#include "../minuitwrp/minui.h" +#include "../recovery_ui.h" +} + +#include "rapidxml.hpp" +#include "objects.hpp" + +GUISlider::GUISlider(xml_node<>* node) +{ + xml_attribute<>* attr; + xml_node<>* child; + + sAction = NULL; + sSlider = NULL; + sSliderUsed = NULL; + sTouch = NULL; + sTouchW = 20; + + if (!node) + { + LOGE("GUISlider created without XML node\n"); + return; + } + + child = node->first_node("resource"); + if (child) + { + attr = child->first_attribute("base"); + if (attr) + sSlider = PageManager::FindResource(attr->value()); + + attr = child->first_attribute("used"); + if (attr) + sSliderUsed = PageManager::FindResource(attr->value()); + + attr = child->first_attribute("touch"); + if (attr) + sTouch = PageManager::FindResource(attr->value()); + } + + // Load the placement + LoadPlacement(node->first_node("placement"), &mRenderX, &mRenderY); + + if (sSlider && sSlider->GetResource()) + { + mRenderW = gr_get_width(sSlider->GetResource()); + mRenderH = gr_get_height(sSlider->GetResource()); + } + if (sTouch && sTouch->GetResource()) + { + sTouchW = gr_get_width(sTouch->GetResource()); // Width of the "touch image" that follows the touch (arrow) + sTouchH = gr_get_height(sTouch->GetResource()); // Height of the "touch image" that follows the touch (arrow) + } + + //LOGI("mRenderW: %i mTouchW: %i\n", mRenderW, mTouchW); + mActionX = mRenderX; + mActionY = mRenderY; + mActionW = mRenderW; + mActionH = mRenderH; + + sAction = new GUIAction(node); + + sCurTouchX = mRenderX; + sUpdate = 1; + + return; +} + +GUISlider::~GUISlider() +{ + delete sAction; +} + +int GUISlider::Render(void) +{ + if (!sSlider || !sSlider->GetResource()) return -1; + + // Draw the slider + gr_blit(sSlider->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY); + + // Draw the used + if (sSliderUsed && sSliderUsed->GetResource() && sCurTouchX > mRenderX) + { + gr_blit(sSliderUsed->GetResource(), 0, 0, sCurTouchX - mRenderX, mRenderH, mRenderX, mRenderY); + } + + // Draw the touch icon + if (sTouch && sTouch->GetResource()) + { + gr_blit(sTouch->GetResource(), 0, 0, sTouchW, sTouchH, sCurTouchX, (mRenderY + ((mRenderH - sTouchH) / 2))); + } + + sUpdate = 0; + return 0; +} + +int GUISlider::Update(void) +{ + if (sUpdate) return 2; + return 0; +} + +int GUISlider::NotifyTouch(TOUCH_STATE state, int x, int y) +{ + static bool dragging = false; + + switch (state) + { + case TOUCH_START: + if (x >= mRenderX && x <= mRenderX + sTouchW && + y >= mRenderY && y <= mRenderY + mRenderH) + { + sCurTouchX = x - (sTouchW / 2); + if (sCurTouchX < mRenderX) sCurTouchX = mRenderX; + dragging = true; + } + break; + + case TOUCH_DRAG: + if (!dragging) return 0; + if (y < mRenderY - sTouchH || y > mRenderY + (sTouchH * 2)) + { + sCurTouchX = mRenderX; + dragging = false; + sUpdate = 1; + break; + } + sCurTouchX = x - (sTouchW / 2); + if (sCurTouchX < mRenderX) sCurTouchX = mRenderX; + if (sCurTouchX > mRenderX + mRenderW - sTouchW) sCurTouchX = mRenderX + mRenderW - sTouchW; + sUpdate = 1; + break; + + case TOUCH_RELEASE: + if (!dragging) return 0; + if (sCurTouchX >= mRenderX + mRenderW - sTouchW) + { + sAction->doActions(); + } + sCurTouchX = mRenderX; + dragging = false; + sUpdate = 1; + case TOUCH_REPEAT: + case TOUCH_HOLD: + break; + } + return 0; +} + -- cgit v1.2.3