diff options
author | JF <jf@codingfield.com> | 2020-08-21 11:55:59 +0200 |
---|---|---|
committer | JF <jf@codingfield.com> | 2020-08-21 11:55:59 +0200 |
commit | a664dec07f894c88105c356816b49cac244ad319 (patch) | |
tree | 89be9d38577becd3670b679f4a478f09b56d36b8 /src/DisplayApp/Screens | |
parent | 7d3af600bd056e0f4be7d31122cc2dbb352cef70 (diff) |
Add paint application.
Diffstat (limited to 'src/DisplayApp/Screens')
-rw-r--r-- | src/DisplayApp/Screens/ApplicationList.cpp | 2 | ||||
-rw-r--r-- | src/DisplayApp/Screens/InfiniPaint.cpp | 44 | ||||
-rw-r--r-- | src/DisplayApp/Screens/InfiniPaint.h | 35 | ||||
-rw-r--r-- | src/DisplayApp/Screens/Screen.h | 3 | ||||
-rw-r--r-- | src/DisplayApp/Screens/Symbols.h | 1 |
5 files changed, 84 insertions, 1 deletions
diff --git a/src/DisplayApp/Screens/ApplicationList.cpp b/src/DisplayApp/Screens/ApplicationList.cpp index 575426f0..eb85be4f 100644 --- a/src/DisplayApp/Screens/ApplicationList.cpp +++ b/src/DisplayApp/Screens/ApplicationList.cpp @@ -57,7 +57,7 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen2() { std::array<Screens::Tile::Applications, 6> applications { {{Symbols::tachometer, Apps::Gauge}, {Symbols::asterisk, Apps::Meter}, - {Symbols::none, Apps::None}, + {Symbols::paintbrush, Apps::Paint}, {Symbols::none, Apps::None}, {Symbols::none, Apps::None}, {Symbols::none, Apps::None} diff --git a/src/DisplayApp/Screens/InfiniPaint.cpp b/src/DisplayApp/Screens/InfiniPaint.cpp new file mode 100644 index 00000000..b340f5d8 --- /dev/null +++ b/src/DisplayApp/Screens/InfiniPaint.cpp @@ -0,0 +1,44 @@ +#include <libs/lvgl/lvgl.h> +#include <libraries/log/nrf_log.h> +#include "InfiniPaint.h" +#include "../DisplayApp.h" + +using namespace Pinetime::Applications::Screens; +extern lv_font_t jetbrains_mono_extrabold_compressed; +extern lv_font_t jetbrains_mono_bold_20; + +InfiniPaint::InfiniPaint(Pinetime::Applications::DisplayApp *app, Pinetime::Components::LittleVgl& lvgl) : Screen(app), lvgl{lvgl} { + app->SetTouchMode(DisplayApp::TouchModes::Polling); + std::fill(b, b+bufferSize, LV_COLOR_WHITE); +} + +InfiniPaint::~InfiniPaint() { + // Reset the touchmode + app->SetTouchMode(DisplayApp::TouchModes::Gestures); + lv_obj_clean(lv_scr_act()); +} + +bool InfiniPaint::Refresh() { + return running; +} + +bool InfiniPaint::OnButtonPushed() { + running = false; + return true; +} + +bool InfiniPaint::OnTouchEvent(Pinetime::Applications::TouchEvents event) { + return true; +} + +bool InfiniPaint::OnTouchEvent(uint16_t x, uint16_t y) { + lv_area_t area; + area.x1 = x-(width/2); + area.y1 = y-(height/2); + area.x2 = x+(width/2)-1; + area.y2 = y+(height/2)-1; + lvgl.SetFullRefresh(Components::LittleVgl::FullRefreshDirections::None); + lvgl.FlushDisplay(&area, b); + return true; +} + diff --git a/src/DisplayApp/Screens/InfiniPaint.h b/src/DisplayApp/Screens/InfiniPaint.h new file mode 100644 index 00000000..a1592f97 --- /dev/null +++ b/src/DisplayApp/Screens/InfiniPaint.h @@ -0,0 +1,35 @@ +#pragma once + +#include <cstdint> +#include "Screen.h" +#include <bits/unique_ptr.h> +#include <libs/lvgl/src/lv_core/lv_style.h> +#include <libs/lvgl/src/lv_core/lv_obj.h> +#include <drivers/St7789.h> +#include <DisplayApp/LittleVgl.h> + +namespace Pinetime { + namespace Applications { + namespace Screens { + + class InfiniPaint : public Screen{ + public: + InfiniPaint(DisplayApp* app, Pinetime::Components::LittleVgl& lvgl); + ~InfiniPaint() override; + + bool Refresh() override; + bool OnButtonPushed() override; + bool OnTouchEvent(TouchEvents event) override; + bool OnTouchEvent(uint16_t x, uint16_t y) override; + + private: + Pinetime::Components::LittleVgl& lvgl; + static constexpr uint16_t width = 10; + static constexpr uint16_t height = 10; + static constexpr uint16_t bufferSize = width*height; + lv_color_t b[bufferSize]; + bool running = true; + }; + } + } +} diff --git a/src/DisplayApp/Screens/Screen.h b/src/DisplayApp/Screens/Screen.h index d8902317..dbf81a44 100644 --- a/src/DisplayApp/Screens/Screen.h +++ b/src/DisplayApp/Screens/Screen.h @@ -1,4 +1,6 @@ #pragma once + +#include <cstdint> #include "../TouchEvents.h" namespace Pinetime { @@ -18,6 +20,7 @@ namespace Pinetime { // Return false if the event hasn't been handled by the app, true if it has been handled virtual bool OnTouchEvent(TouchEvents event) { return false; } + virtual bool OnTouchEvent(uint16_t x, uint16_t y) { return false; } protected: DisplayApp* app; diff --git a/src/DisplayApp/Screens/Symbols.h b/src/DisplayApp/Screens/Symbols.h index 69078c8a..aeea3243 100644 --- a/src/DisplayApp/Screens/Symbols.h +++ b/src/DisplayApp/Screens/Symbols.h @@ -23,6 +23,7 @@ namespace Pinetime { static constexpr const char* music = "\xEF\x80\x81"; static constexpr const char* tachometer = "\xEF\x8F\xBD"; static constexpr const char* asterisk = "\xEF\x81\xA9"; + static constexpr const char* paintbrush = "\xEF\x87\xBC"; } } } |