Add top/bottom bars
This commit is contained in:
parent
282edfc7aa
commit
ad7478cb31
@ -395,6 +395,9 @@ void board::start(){
|
|||||||
//call draw on the current panel
|
//call draw on the current panel
|
||||||
PANELS[i]->draw();
|
PANELS[i]->draw();
|
||||||
|
|
||||||
|
//draw the overlay panel
|
||||||
|
OVERLAY->draw();
|
||||||
|
|
||||||
if(fcount % 10 == 0)
|
if(fcount % 10 == 0)
|
||||||
std::cerr << "Frame : " << fcount << "\n";
|
std::cerr << "Frame : " << fcount << "\n";
|
||||||
|
|
||||||
|
@ -13,6 +13,10 @@ dashboard::panel::panel* PANELS[] = {
|
|||||||
};
|
};
|
||||||
size_t PANELS_LENGTH = sizeof(PANELS)/sizeof(PANELS[0]);
|
size_t PANELS_LENGTH = sizeof(PANELS)/sizeof(PANELS[0]);
|
||||||
|
|
||||||
|
// OVERLAY
|
||||||
|
// This is a special panel that is overlayed on top of all other panels
|
||||||
|
dashboard::panel::panel* OVERLAY = new dashboard::panel::def_overlay();
|
||||||
|
|
||||||
// IMAGE_LOCATIONS
|
// IMAGE_LOCATIONS
|
||||||
// Locations of all static images used
|
// Locations of all static images used
|
||||||
const char* IMAGE_LOCATIONS[] = {
|
const char* IMAGE_LOCATIONS[] = {
|
||||||
|
@ -76,9 +76,14 @@ constexpr int IMG_FLAGS = 0
|
|||||||
// Be sure to include the panel definition below, then add it to the system
|
// Be sure to include the panel definition below, then add it to the system
|
||||||
#include "panel/panel.hpp"
|
#include "panel/panel.hpp"
|
||||||
#include "panel/weather.hpp"
|
#include "panel/weather.hpp"
|
||||||
|
#include "panel/def_overlay.hpp"
|
||||||
extern dashboard::panel::panel* PANELS[];
|
extern dashboard::panel::panel* PANELS[];
|
||||||
extern size_t PANELS_LENGTH;
|
extern size_t PANELS_LENGTH;
|
||||||
|
|
||||||
|
// OVERLAY
|
||||||
|
// This is a special panel that is overlayed on top of all other panels
|
||||||
|
extern dashboard::panel::panel* OVERLAY;
|
||||||
|
|
||||||
// DATA_DIR
|
// DATA_DIR
|
||||||
// Where all resources will be
|
// Where all resources will be
|
||||||
// Keep this as DATA to use the install dir set in the makefile
|
// Keep this as DATA to use the install dir set in the makefile
|
||||||
|
137
src/panel/def_overlay.cpp
Normal file
137
src/panel/def_overlay.cpp
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Tyler Perkins
|
||||||
|
// 20-12-21
|
||||||
|
// def_overlay implementation
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "def_overlay.hpp"
|
||||||
|
#include "def_overlay_config.hpp"
|
||||||
|
|
||||||
|
using namespace dashboard::panel;
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Constructors ///////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
def_overlay::def_overlay(){
|
||||||
|
std::cerr << "DEF_OVERLAY CONSTRUCTOR\n";
|
||||||
|
//dont init time on screen, its always on screen
|
||||||
|
_time_on_screen = 0;
|
||||||
|
_update_interval = std::chrono::milliseconds{DEF_OVERLAY_UPDATE_INTERVAL};
|
||||||
|
_texture = nullptr;
|
||||||
|
//let set to default, will make it so it updates the texture ASAP
|
||||||
|
//_last_update;
|
||||||
|
}
|
||||||
|
|
||||||
|
def_overlay::~def_overlay(){
|
||||||
|
std::cerr << "DEF_OVERLAY DECONSTRUCTOR\n";
|
||||||
|
if(_texture != nullptr){
|
||||||
|
SDL_DestroyTexture(_texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Draw function //////////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void def_overlay::draw(){
|
||||||
|
//create the texture if this is the first time running draw
|
||||||
|
if(_texture == nullptr){
|
||||||
|
std::cerr << "IN FIRST SETUP\n";
|
||||||
|
initTexture();
|
||||||
|
update();
|
||||||
|
update_texture();
|
||||||
|
}
|
||||||
|
|
||||||
|
//check if its time to update
|
||||||
|
if((std::chrono::high_resolution_clock::now() - _last_update)
|
||||||
|
> _update_interval){
|
||||||
|
update();
|
||||||
|
|
||||||
|
update_texture();
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_RenderCopy(board::getRenderer(), _texture, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Helper functions ///////////////////////////////////////////////////////////
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////
|
||||||
|
// Update the information of the obj
|
||||||
|
// This DOES NOT update the display
|
||||||
|
void def_overlay::update() {
|
||||||
|
std::cerr << "DEF_OVERLAY::UPDATE\n";
|
||||||
|
_last_update = std::chrono::high_resolution_clock::now();
|
||||||
|
|
||||||
|
//get current date and time
|
||||||
|
std::time_t curr_time = std::chrono::system_clock::to_time_t(
|
||||||
|
std::chrono::system_clock::now());
|
||||||
|
date_time = std::ctime(&curr_time);
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////
|
||||||
|
// Update the texture that is being
|
||||||
|
// displayed, based on system data
|
||||||
|
void def_overlay::update_texture() {
|
||||||
|
std::cerr << "DEF_OVERLAY::UPDATE_TEXTURE\n";
|
||||||
|
uint8_t o_red, o_green, o_blue, o_alpha;
|
||||||
|
SDL_Rect tgt;
|
||||||
|
|
||||||
|
//save the old colors
|
||||||
|
SDL_GetRenderDrawColor(board::getRenderer(), &o_red,
|
||||||
|
&o_green, &o_blue, &o_alpha);
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(board::getRenderer(), _texture);
|
||||||
|
|
||||||
|
//clear the texture as pure alpha
|
||||||
|
SDL_SetRenderDrawColor(board::getRenderer(),
|
||||||
|
0x00, 0x00, 0x00, 0x00);
|
||||||
|
|
||||||
|
//set the new color
|
||||||
|
SDL_SetRenderDrawColor(board::getRenderer(),
|
||||||
|
DEF_OVERLAY_BAR_RED, DEF_OVERLAY_BAR_GREEN,
|
||||||
|
DEF_OVERLAY_BAR_BLUE, DEF_OVERLAY_BAR_ALPHA);
|
||||||
|
|
||||||
|
//draw the top rectangle
|
||||||
|
tgt.x = 0; tgt.y = 0;
|
||||||
|
tgt.w = SCREEN_WIDTH;
|
||||||
|
tgt.h = DEF_OVERLAY_BAR_HEIGHT;
|
||||||
|
SDL_RenderFillRect(board::getRenderer(), &tgt);
|
||||||
|
|
||||||
|
//draw the bottom rectangle
|
||||||
|
tgt.x = 0; tgt.y = SCREEN_HEIGHT - DEF_OVERLAY_BAR_HEIGHT;
|
||||||
|
tgt.w = SCREEN_WIDTH;
|
||||||
|
tgt.h = DEF_OVERLAY_BAR_HEIGHT;
|
||||||
|
SDL_RenderFillRect(board::getRenderer(), &tgt);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SDL_SetRenderTarget(board::getRenderer(), NULL);
|
||||||
|
|
||||||
|
//reset back to the old render color
|
||||||
|
SDL_SetRenderDrawColor(board::getRenderer(),
|
||||||
|
o_red, o_green, o_blue, o_alpha);
|
||||||
|
|
||||||
|
std::cerr << "Leaving overlay texture\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////
|
||||||
|
// Lazy load the texture object
|
||||||
|
// This is to make sure that all of SDL
|
||||||
|
// is init before we attempt to draw anything
|
||||||
|
void def_overlay::initTexture(){
|
||||||
|
if(_texture == nullptr){
|
||||||
|
_texture = SDL_CreateTexture(board::getRenderer(),
|
||||||
|
SDL_PIXELFORMAT_RGBA8888,
|
||||||
|
SDL_TEXTUREACCESS_TARGET,
|
||||||
|
SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||||
|
|
||||||
|
SDL_SetTextureBlendMode(_texture, SDL_BLENDMODE_BLEND);
|
||||||
|
}
|
||||||
|
}
|
40
src/panel/def_overlay.hpp
Normal file
40
src/panel/def_overlay.hpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Tyler Perkins
|
||||||
|
// 20-12-21
|
||||||
|
// def_overlay definition
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "panel.hpp"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <chrono>
|
||||||
|
#include <ctime>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
#include <SDL2/SDL_image.h>
|
||||||
|
#include <SDL2/SDL_ttf.h>
|
||||||
|
|
||||||
|
namespace dashboard::panel {
|
||||||
|
class def_overlay : public panel {
|
||||||
|
public:
|
||||||
|
def_overlay();
|
||||||
|
~def_overlay();
|
||||||
|
|
||||||
|
void draw();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void update();
|
||||||
|
void update_texture();
|
||||||
|
void initTexture();
|
||||||
|
|
||||||
|
std::string date_time;
|
||||||
|
|
||||||
|
std::chrono::time_point<std::chrono::high_resolution_clock> _last_update;
|
||||||
|
std::chrono::milliseconds _update_interval;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "../board.hpp"
|
29
src/panel/def_overlay_config.hpp
Normal file
29
src/panel/def_overlay_config.hpp
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Tyler Perkins
|
||||||
|
// 20-12-21
|
||||||
|
// def overlay configuration
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
|
||||||
|
namespace dashboard::panel {
|
||||||
|
//How long should we wait between updates? in ms
|
||||||
|
//Default 10 s
|
||||||
|
constexpr size_t DEF_OVERLAY_UPDATE_INTERVAL = 10000;
|
||||||
|
|
||||||
|
//Height of the bar on the top and bottom, in pixels
|
||||||
|
constexpr size_t DEF_OVERLAY_BAR_HEIGHT = 45;
|
||||||
|
|
||||||
|
//Text color
|
||||||
|
constexpr uint8_t DEF_OVERLAY_TEXT_RED = 0xCC;
|
||||||
|
constexpr uint8_t DEF_OVERLAY_TEXT_GREEN = 0xCC;
|
||||||
|
constexpr uint8_t DEF_OVERLAY_TEXT_BLUE = 0xCC;
|
||||||
|
constexpr uint8_t DEF_OVERLAY_TEXT_ALPHA = 0xFF;
|
||||||
|
|
||||||
|
constexpr uint8_t DEF_OVERLAY_BAR_RED = 0xAA;
|
||||||
|
constexpr uint8_t DEF_OVERLAY_BAR_GREEN = 0xAA;
|
||||||
|
constexpr uint8_t DEF_OVERLAY_BAR_BLUE = 0xAA;
|
||||||
|
constexpr uint8_t DEF_OVERLAY_BAR_ALPHA = 0xFF;
|
||||||
|
}
|
@ -16,7 +16,7 @@ using namespace dashboard::panel;
|
|||||||
weather::weather(){
|
weather::weather(){
|
||||||
std::cerr << "WEATHER CONSTRUCTOR\n";
|
std::cerr << "WEATHER CONSTRUCTOR\n";
|
||||||
_time_on_screen = WEATHER_DEFAULT_ON_SCREEN_TIME;
|
_time_on_screen = WEATHER_DEFAULT_ON_SCREEN_TIME;
|
||||||
_update_interval = std::chrono::milliseconds{UPDATE_INTERVAL};
|
_update_interval = std::chrono::milliseconds{WEATHER_UPDATE_INTERVAL};
|
||||||
//let set to default, will make it so it updates the texture ASAP
|
//let set to default, will make it so it updates the texture ASAP
|
||||||
//_last_update;
|
//_last_update;
|
||||||
_rss = rss_utils::rss(WEATHER_URL_SOURCE);
|
_rss = rss_utils::rss(WEATHER_URL_SOURCE);
|
||||||
@ -86,6 +86,7 @@ void weather::update_texture(){
|
|||||||
SDL_Rect tgt;
|
SDL_Rect tgt;
|
||||||
|
|
||||||
SDL_SetRenderTarget(board::getRenderer(), _texture);
|
SDL_SetRenderTarget(board::getRenderer(), _texture);
|
||||||
|
SDL_RenderClear(board::getRenderer());
|
||||||
|
|
||||||
//title
|
//title
|
||||||
tgt.x = 50;
|
tgt.x = 50;
|
||||||
|
@ -16,5 +16,5 @@ namespace dashboard::panel {
|
|||||||
|
|
||||||
//How long should we wait between updates? in ms
|
//How long should we wait between updates? in ms
|
||||||
//Default 1 hour
|
//Default 1 hour
|
||||||
constexpr size_t UPDATE_INTERVAL = 3600000;
|
constexpr size_t WEATHER_UPDATE_INTERVAL = 3600000;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user