1 /*
2  * Copyright (C) 2017 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef HEALTHD_DRAW_H
18 #define HEALTHD_DRAW_H
19 
20 #include <linux/input.h>
21 #include <minui/minui.h>
22 
23 #include "animation.h"
24 
25 using namespace android;
26 
27 class HealthdDraw {
28  public:
29   // Configures font using given animation.
30   HealthdDraw(animation* anim);
31   virtual ~HealthdDraw();
32 
33   // Redraws screen.
34   void redraw_screen(const animation* batt_anim, GRSurface* surf_unknown);
35 
36   // Blanks screen if true, unblanks if false.
37   virtual void blank_screen(bool blank);
38 
39  protected:
40   virtual void clear_screen();
41 
42   // returns the last y-offset of where the surface ends.
43   virtual int draw_surface_centered(GRSurface* surface);
44   // Negative x or y coordinates center text.
45   virtual int draw_text(const GRFont* font, int x, int y, const char* str);
46 
47   // Negative x or y coordinates position the text away from the opposite edge
48   // that positive ones do.
49   virtual void determine_xy(const animation::text_field& field,
50                             const int length, int* x, int* y);
51 
52   // Draws battery animation, if it exists.
53   virtual void draw_battery(const animation* anim);
54   // Draws clock text, if animation contains text_field data.
55   virtual void draw_clock(const animation* anim);
56   // Draws battery percentage text if animation contains text_field data.
57   virtual void draw_percent(const animation* anim);
58   // Draws charger->surf_unknown or basic text.
59   virtual void draw_unknown(GRSurface* surf_unknown);
60 
61   // Pixel sizes of characters for default font.
62   int char_width_;
63   int char_height_;
64 
65   // Width and height of screen in pixels.
66   int screen_width_;
67   int screen_height_;
68 
69   // Device screen is split vertically.
70   const bool kSplitScreen;
71   // Pixels to offset graphics towards center split.
72   const int kSplitOffset;
73 
74   // system text font, may be nullptr
75   const GRFont* sys_font;
76 
77   // true if minui init'ed OK, false if minui init failed
78   bool graphics_available;
79 };
80 
81 #endif  // HEALTHD_DRAW_H
82