blob: 84eac8c58fcd0bc7eac23b7f768fbeab5f0abb77 [file] [log] [blame]
Matt Mowere04eee72016-12-31 00:38:57 -06001/*
2 Copyright 2017 TeamWin
3 This file is part of TWRP/TeamWin Recovery Project.
4
5 TWRP is free software: you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation, either version 3 of the License, or
8 (at your option) any later version.
9
10 TWRP is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with TWRP. If not, see <http://www.gnu.org/licenses/>.
17*/
18
Dees_Troy51a0e822012-09-05 15:24:24 -040019// image.cpp - GUIImage object
20
21#include <stdarg.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25#include <fcntl.h>
26#include <sys/reboot.h>
27#include <sys/stat.h>
28#include <sys/time.h>
29#include <sys/mman.h>
30#include <sys/types.h>
31#include <sys/ioctl.h>
32#include <time.h>
33#include <unistd.h>
34#include <stdlib.h>
35
36#include <string>
37
38extern "C" {
Dees_Troy2673cec2013-04-02 20:22:16 +000039#include "../twcommon.h"
Dees_Troy51a0e822012-09-05 15:24:24 -040040}
bigbiffd81833a2021-01-17 11:06:57 -050041#include "minuitwrp/minui.h"
Dees_Troy51a0e822012-09-05 15:24:24 -040042
43#include "rapidxml.hpp"
44#include "objects.hpp"
45
Vojtech Bocekede51c52014-02-07 23:58:09 +010046GUIImage::GUIImage(xml_node<>* node) : GUIObject(node)
Dees_Troy51a0e822012-09-05 15:24:24 -040047{
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020048 mImage = NULL;
Dees_Troy4d12f962012-10-19 13:13:15 -040049 mHighlightImage = NULL;
50 isHighlighted = false;
Dees_Troy51a0e822012-09-05 15:24:24 -040051
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020052 if (!node)
53 return;
Dees_Troy51a0e822012-09-05 15:24:24 -040054
Ethan Yonker21ff02a2015-02-18 14:35:00 -060055 mImage = LoadAttrImage(FindNode(node, "image"), "resource");
56 mHighlightImage = LoadAttrImage(FindNode(node, "image"), "highlightresource");
Dees_Troy51a0e822012-09-05 15:24:24 -040057
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020058 // Load the placement
Ethan Yonker21ff02a2015-02-18 14:35:00 -060059 LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, NULL, NULL, &mPlacement);
Dees_Troy51a0e822012-09-05 15:24:24 -040060
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020061 if (mImage && mImage->GetResource())
62 {
thatf6ed8fc2015-02-14 20:23:16 +010063 mRenderW = mImage->GetWidth();
64 mRenderH = mImage->GetHeight();
Dees_Troy51a0e822012-09-05 15:24:24 -040065
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020066 // Adjust for placement
67 if (mPlacement != TOP_LEFT && mPlacement != BOTTOM_LEFT)
68 {
69 if (mPlacement == CENTER)
70 mRenderX -= (mRenderW / 2);
71 else
72 mRenderX -= mRenderW;
73 }
74 if (mPlacement != TOP_LEFT && mPlacement != TOP_RIGHT)
75 {
76 if (mPlacement == CENTER)
77 mRenderY -= (mRenderH / 2);
78 else
79 mRenderY -= mRenderH;
80 }
81 SetPlacement(TOP_LEFT);
82 }
Dees_Troy51a0e822012-09-05 15:24:24 -040083}
84
85int GUIImage::Render(void)
86{
Vojtech Bocek6041a782013-10-11 14:40:01 +020087 if (!isConditionTrue())
88 return 0;
89
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020090 if (isHighlighted && mHighlightImage && mHighlightImage->GetResource()) {
Dees_Troy4d12f962012-10-19 13:13:15 -040091 gr_blit(mHighlightImage->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY);
92 return 0;
Vojtech Bocekfafb0c52013-07-25 22:53:02 +020093 }
94 else if (!mImage || !mImage->GetResource())
95 return -1;
96
97 gr_blit(mImage->GetResource(), 0, 0, mRenderW, mRenderH, mRenderX, mRenderY);
98 return 0;
Dees_Troy51a0e822012-09-05 15:24:24 -040099}
100
101int GUIImage::SetRenderPos(int x, int y, int w, int h)
102{
Vojtech Bocekfafb0c52013-07-25 22:53:02 +0200103 if (w || h)
104 return -1;
105
106 mRenderX = x;
107 mRenderY = y;
108 return 0;
Dees_Troy51a0e822012-09-05 15:24:24 -0400109}
110