From 6bb7f326f02f9e911533159d10b2611753f22ba5 Mon Sep 17 00:00:00 2001 From: "fix94.1" Date: Sun, 15 Sep 2013 21:22:19 +0000 Subject: [PATCH] -wiiflow will now slightly fadeout to black after one minute of no activity --- source/gui/video.cpp | 18 +++++++++++++++++- source/gui/video.hpp | 2 ++ source/menu/menu.cpp | 6 +++++- source/menu/menu.hpp | 2 ++ source/menu/menu_input.cpp | 23 +++++++++++++++++++++++ 5 files changed, 49 insertions(+), 2 deletions(-) diff --git a/source/gui/video.cpp b/source/gui/video.cpp index b817d5a2..4b38c982 100644 --- a/source/gui/video.cpp +++ b/source/gui/video.cpp @@ -86,7 +86,8 @@ CVideo::CVideo(void) : m_rmode(NULL), m_frameBuf(), m_curFB(0), m_fifo(NULL), m_yScale(0.0f), m_xfbHeight(0), m_wide(false), m_width2D(640), m_height2D(480), m_x2D(0), m_y2D(0), m_aa(0), m_aaAlpha(false), - m_aaWidth(0), m_aaHeight(0), m_showWaitMessage(false), m_showingWaitMessages(false) + m_aaWidth(0), m_aaHeight(0), m_screensaver_alpha(0), m_showWaitMessage(false), + m_showingWaitMessages(false) { memset(m_frameBuf, 0, sizeof m_frameBuf); } @@ -724,3 +725,18 @@ void DrawRectangle(f32 x, f32 y, f32 width, f32 height, GXColor color) GX_End(); GX_SetTevOp(GX_TEVSTAGE0, GX_MODULATE); } + +void CVideo::screensaver(u32 no_input) +{ + if(no_input == 0) + { + m_screensaver_alpha = 0; + return; + } + if(no_input > 60) + { + DrawRectangle(0, 0, 640, 480, (GXColor){0,0,0,m_screensaver_alpha}); + if(m_screensaver_alpha < 150) + m_screensaver_alpha+=2; + } +} diff --git a/source/gui/video.hpp b/source/gui/video.hpp index 21fd3c4c..8a9d4491 100644 --- a/source/gui/video.hpp +++ b/source/gui/video.hpp @@ -54,6 +54,7 @@ public: void renderToTexture(TexData &tex, bool clear); void cleanup(void); void setup2DProjection(bool setViewPort = true, bool noScale = false); + void screensaver(u32 no_input); u32 width(void) const { return m_rmode->fbWidth; } u32 height(void) const { return m_rmode->efbHeight; } GXRModeObj *vid_mode(void) const { return m_rmode; } @@ -93,6 +94,7 @@ private: int m_aaHeight; u8 *m_aaBuffer[8]; u32 m_aaBufferSize[8]; + u8 m_screensaver_alpha; float m_vpX; float m_vpY; float m_vpW; diff --git a/source/menu/menu.cpp b/source/menu/menu.cpp index d0f69036..68c1ea08 100644 --- a/source/menu/menu.cpp +++ b/source/menu/menu.cpp @@ -154,6 +154,8 @@ CMenu::CMenu() /* ftp stuff */ m_ftp_inited = false; m_init_ftp = false; + /* screensaver */ + no_input_time = 0; } void CMenu::init() @@ -1879,8 +1881,10 @@ void CMenu::_mainLoopCommon(bool withCF, bool adjusting) m_btnMgr.draw(); ScanInput(); if(!m_vid.showingWaitMessage()) + { + m_vid.screensaver(NoInputTime()); m_vid.render(); - + } if(Sys_Exiting()) exitHandler(BUTTON_CALLBACK); diff --git a/source/menu/menu.hpp b/source/menu/menu.hpp index 00987778..47d0fdf4 100644 --- a/source/menu/menu.hpp +++ b/source/menu/menu.hpp @@ -631,11 +631,13 @@ private: s32 right_stick_skip[WPAD_MAX_WIIMOTES]; s32 wmote_roll_skip[WPAD_MAX_WIIMOTES]; bool enable_wmote_roll; + time_t no_input_time; bool m_cfNeedsUpdate; void SetupInput(bool reset_pos = false); void ScanInput(void); + u32 NoInputTime(void); void ButtonsPressed(void); void ButtonsHeld(void); diff --git a/source/menu/menu_input.cpp b/source/menu/menu_input.cpp index 33561c78..b08c6314 100644 --- a/source/menu/menu_input.cpp +++ b/source/menu/menu_input.cpp @@ -584,3 +584,26 @@ void CMenu::ShowGameZone() { ShowZone(m_gameButtonsZone, m_show_zone_game); } + +u32 CMenu::NoInputTime() +{ + bool input_found = false; + if(gc_btnsPressed != 0) + input_found = true; + else + { + for(int chan = WPAD_MAX_WIIMOTES-1; chan >= 0; chan--) + { + if(wii_btnsPressed[chan] != 0 || wii_btnsHeld[chan] != 0 || m_show_pointer[chan] == true) + input_found = true; + } + } + if(input_found == false) + { + if(no_input_time == 0) + no_input_time = time(NULL); + return time(NULL) - no_input_time; + } + no_input_time = 0; + return 0; +}