diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..4971431 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,50 @@ +Development +=========== + +All the boiler plate needed to show screens has been written. To develop your +own custom screens, however, you will need to know some SDL2. There is no real +drawing api, to allow you to have as much control over the display as possible. + +dashboard uses a few objects for displaying things to the screen however, to +interact with the memory management. + +First off, the default configuration is similar to web development "Carousels". +A series of **panels** are shown to the user by cycling through one by one. + +A **board** is a singleton, and represents the physical display board. +There is only one per instance of the program, and its has several **panels** + +A **panel** is an object representing a slide on screen. This is a page with +weather, a news feed, etc. It is one of the scrolling pages shown to the user. +This is what you will need to write. + +Each **panel** has a `draw()` function that you must implement. This will draw +everything to the screen using SDL2's API. If you want functions for getting +data, several threads, etc, **it is the panel's responsibility to implement +this**. The **board** provides a memory API, however you do not have to use +it. + +The provided memory api stores textures (SDL_Texture), fonts (TTF_Font), and +strings (SDL_Texture). Both static values can be added that will exist for the +lifetime of the program, as well as dynamic versions that will be stored in a +cache (As of writing, only dynamically cached strings are implemented). All +functions related to looking up memory stored in these containers is performed +in O(1) time. + +The SDL_Window and SDL_Renderer are provided as static globals, accessible via +the **board** object. + +Each **panel** is also recommended to add its own config.hpp file for +configuring possible settings. All static files that it needs should be placed +in the main config.hpp file + +Things you need to implement as a panel creator +----------------------------------------------- + +- `void mypanel::draw()` +- `mypanel::mypanel()` +- `mypanel::~mypanel()` +- `size_t mypanel::_time_on_screen` +- `const_resources` + +And be sure to inheret from dashboard::panel ! diff --git a/Makefile b/Makefile index 91d9750..3d31304 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ FLAGS = -pipe CFLAGS = -Wall CFLAGS += -Ofast -CFLAGS += -std=c++20 +CFLAGS += -std=c++17 #CFLAGS += -g #CFLAGS += -pg diff --git a/README.md b/README.md index 8d758a4..cbac9d3 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,13 @@ compile the test.cpp file provided in ./tests . There should be output on the screen as flashing. Feel free to change the desired graphics driver in the raspberry pi config +Developing your own pannels +=========================== + +Refer to the +[development] +(DEVELOPMENT.md) +documentation Usage ===== diff --git a/font/.gitkeep b/font/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/font/elianto-normal.ttf b/font/elianto-normal.ttf new file mode 100644 index 0000000..2dbbc96 Binary files /dev/null and b/font/elianto-normal.ttf differ diff --git a/img/.gitkeep b/img/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/img/bmp_24.png b/img/bmp_24.png new file mode 100644 index 0000000..215c311 Binary files /dev/null and b/img/bmp_24.png differ