diff options
Diffstat (limited to '')
-rw-r--r-- | screen_ui.h | 223 |
1 files changed, 123 insertions, 100 deletions
diff --git a/screen_ui.h b/screen_ui.h index a2322c36c..8231a2ba0 100644 --- a/screen_ui.h +++ b/screen_ui.h @@ -21,6 +21,7 @@ #include <stdio.h> #include <string> +#include <vector> #include "ui.h" @@ -30,144 +31,166 @@ struct GRSurface; // Implementation of RecoveryUI appropriate for devices with a screen // (shows an icon + a progress bar, text logging, menu, etc.) class ScreenRecoveryUI : public RecoveryUI { - public: - ScreenRecoveryUI(); + public: + ScreenRecoveryUI(); - bool Init(const std::string& locale) override; + bool Init(const std::string& locale) override; - // overall recovery state ("background image") - void SetBackground(Icon icon); - void SetSystemUpdateText(bool security_update); + // overall recovery state ("background image") + void SetBackground(Icon icon) override; + void SetSystemUpdateText(bool security_update) override; - // progress indicator - void SetProgressType(ProgressType type) override; - void ShowProgress(float portion, float seconds) override; - void SetProgress(float fraction) override; + // progress indicator + void SetProgressType(ProgressType type) override; + void ShowProgress(float portion, float seconds) override; + void SetProgress(float fraction) override; - void SetStage(int current, int max) override; + void SetStage(int current, int max) override; - // text log - void ShowText(bool visible) override; - bool IsTextVisible() override; - bool WasTextEverVisible() override; + // text log + void ShowText(bool visible) override; + bool IsTextVisible() override; + bool WasTextEverVisible() override; - // printing messages - void Print(const char* fmt, ...) __printflike(2, 3); - void PrintOnScreenOnly(const char* fmt, ...) __printflike(2, 3); - void ShowFile(const char* filename); + // printing messages + void Print(const char* fmt, ...) override __printflike(2, 3); + void PrintOnScreenOnly(const char* fmt, ...) override __printflike(2, 3); + void ShowFile(const char* filename) override; - // menu display - void StartMenu(const char* const * headers, const char* const * items, - int initial_selection); - int SelectMenu(int sel); - void EndMenu(); + // menu display + void StartMenu(const char* const* headers, const char* const* items, + int initial_selection) override; + int SelectMenu(int sel) override; + void EndMenu() override; - void KeyLongPress(int); + void KeyLongPress(int) override; - void Redraw(); + void Redraw(); - enum UIElement { - HEADER, MENU, MENU_SEL_BG, MENU_SEL_BG_ACTIVE, MENU_SEL_FG, LOG, TEXT_FILL, INFO - }; - void SetColor(UIElement e); + enum UIElement { + HEADER, + MENU, + MENU_SEL_BG, + MENU_SEL_BG_ACTIVE, + MENU_SEL_FG, + LOG, + TEXT_FILL, + INFO + }; + void SetColor(UIElement e) const; - protected: - Icon currentIcon; + protected: + // The margin that we don't want to use for showing texts (e.g. round screen, or screen with + // rounded corners). + const int kMarginWidth; + const int kMarginHeight; - // The scale factor from dp to pixels. 1.0 for mdpi, 4.0 for xxxhdpi. - float density_; - // The layout to use. - int layout_; + // Number of frames per sec (default: 30) for both parts of the animation. + const int kAnimationFps; - GRSurface* error_icon; + // The scale factor from dp to pixels. 1.0 for mdpi, 4.0 for xxxhdpi. + const float density_; - GRSurface* erasing_text; - GRSurface* error_text; - GRSurface* installing_text; - GRSurface* no_command_text; + Icon currentIcon; - GRSurface** introFrames; - GRSurface** loopFrames; + // The layout to use. + int layout_; - GRSurface* progressBarEmpty; - GRSurface* progressBarFill; - GRSurface* stageMarkerEmpty; - GRSurface* stageMarkerFill; + GRSurface* error_icon; - ProgressType progressBarType; + GRSurface* erasing_text; + GRSurface* error_text; + GRSurface* installing_text; + GRSurface* no_command_text; - float progressScopeStart, progressScopeSize, progress; - double progressScopeTime, progressScopeDuration; + GRSurface** introFrames; + GRSurface** loopFrames; - // true when both graphics pages are the same (except for the progress bar). - bool pagesIdentical; + GRSurface* progressBarEmpty; + GRSurface* progressBarFill; + GRSurface* stageMarkerEmpty; + GRSurface* stageMarkerFill; - size_t text_cols_, text_rows_; + ProgressType progressBarType; - // Log text overlay, displayed when a magic key is pressed. - char** text_; - size_t text_col_, text_row_, text_top_; + float progressScopeStart, progressScopeSize, progress; + double progressScopeTime, progressScopeDuration; - bool show_text; - bool show_text_ever; // has show_text ever been true? + // true when both graphics pages are the same (except for the progress bar). + bool pagesIdentical; - char** menu_; - const char* const* menu_headers_; - bool show_menu; - int menu_items, menu_sel; + size_t text_cols_, text_rows_; - // An alternate text screen, swapped with 'text_' when we're viewing a log file. - char** file_viewer_text_; + // Log text overlay, displayed when a magic key is pressed. + char** text_; + size_t text_col_, text_row_, text_top_; - pthread_t progress_thread_; + bool show_text; + bool show_text_ever; // has show_text ever been true? - // Number of intro frames and loop frames in the animation. - size_t intro_frames; - size_t loop_frames; + std::vector<std::string> menu_; + const char* const* menu_headers_; + bool show_menu; + int menu_items, menu_sel; - size_t current_frame; - bool intro_done; + // An alternate text screen, swapped with 'text_' when we're viewing a log file. + char** file_viewer_text_; - // Number of frames per sec (default: 30) for both parts of the animation. - int animation_fps; + pthread_t progress_thread_; - int stage, max_stage; + // Number of intro frames and loop frames in the animation. + size_t intro_frames; + size_t loop_frames; - int char_width_; - int char_height_; - pthread_mutex_t updateMutex; + size_t current_frame; + bool intro_done; - virtual bool InitTextParams(); + int stage, max_stage; - virtual void draw_background_locked(); - virtual void draw_foreground_locked(); - virtual void draw_screen_locked(); - virtual void update_screen_locked(); - virtual void update_progress_locked(); + int char_width_; + int char_height_; - GRSurface* GetCurrentFrame(); - GRSurface* GetCurrentText(); + pthread_mutex_t updateMutex; - static void* ProgressThreadStartRoutine(void* data); - void ProgressThreadLoop(); + virtual bool InitTextParams(); - virtual void ShowFile(FILE*); - virtual void PrintV(const char*, bool, va_list); - void PutChar(char); - void ClearText(); + virtual void draw_background_locked(); + virtual void draw_foreground_locked(); + virtual void draw_screen_locked(); + virtual void update_screen_locked(); + virtual void update_progress_locked(); - void LoadAnimation(); - void LoadBitmap(const char* filename, GRSurface** surface); - void LoadLocalizedBitmap(const char* filename, GRSurface** surface); + GRSurface* GetCurrentFrame() const; + GRSurface* GetCurrentText() const; - int PixelsFromDp(int dp) const; - virtual int GetAnimationBaseline(); - virtual int GetProgressBaseline(); - virtual int GetTextBaseline(); + static void* ProgressThreadStartRoutine(void* data); + void ProgressThreadLoop(); - void DrawHorizontalRule(int* y); - void DrawTextLine(int x, int* y, const char* line, bool bold) const; - void DrawTextLines(int x, int* y, const char* const* lines) const; + virtual void ShowFile(FILE*); + virtual void PrintV(const char*, bool, va_list); + void PutChar(char); + void ClearText(); + + void LoadAnimation(); + void LoadBitmap(const char* filename, GRSurface** surface); + void LoadLocalizedBitmap(const char* filename, GRSurface** surface); + + int PixelsFromDp(int dp) const; + virtual int GetAnimationBaseline() const; + virtual int GetProgressBaseline() const; + virtual int GetTextBaseline() const; + + // Draws a highlight bar at (x, y) - (x + width, y + height). + virtual void DrawHighlightBar(int x, int y, int width, int height) const; + // Draws a horizontal rule at Y. Returns the offset it should be moving along Y-axis. + virtual int DrawHorizontalRule(int y) const; + // Draws a line of text. Returns the offset it should be moving along Y-axis. + virtual int DrawTextLine(int x, int y, const char* line, bool bold) const; + // Draws multiple text lines. Returns the offset it should be moving along Y-axis. + int DrawTextLines(int x, int y, const char* const* lines) const; + // Similar to DrawTextLines() to draw multiple text lines, but additionally wraps long lines. + // Returns the offset it should be moving along Y-axis. + int DrawWrappedTextLines(int x, int y, const char* const* lines) const; }; #endif // RECOVERY_UI_H |