Merge pull request #147 from ZephyrLabs/Paddle-app
Paddle-app (updated)
This commit is contained in:
		
						commit
						276c8aa308
					
				@ -333,6 +333,7 @@ list(APPEND SOURCE_FILES
 | 
			
		||||
        displayapp/screens/Meter.cpp
 | 
			
		||||
        displayapp/screens/Gauge.cpp
 | 
			
		||||
        displayapp/screens/InfiniPaint.cpp
 | 
			
		||||
        displayapp/screens/Paddle.cpp
 | 
			
		||||
        displayapp/screens/DropDownDemo.cpp
 | 
			
		||||
        displayapp/screens/Modal.cpp
 | 
			
		||||
        displayapp/screens/BatteryIcon.cpp
 | 
			
		||||
@ -414,6 +415,7 @@ set(INCLUDE_FILES
 | 
			
		||||
        displayapp/screens/Meter.h
 | 
			
		||||
        displayapp/screens/Gauge.h
 | 
			
		||||
        displayapp/screens/InfiniPaint.h
 | 
			
		||||
        displayapp/screens/Paddle.h
 | 
			
		||||
        displayapp/screens/DropDownDemo.h
 | 
			
		||||
        displayapp/screens/Modal.h
 | 
			
		||||
        displayapp/screens/BatteryIcon.h
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Pinetime {
 | 
			
		||||
  namespace Applications {
 | 
			
		||||
    enum class Apps {None, Launcher, Clock, SysInfo, Meter, Gauge, Brightness, Music, FirmwareValidation, Paint, Notifications};
 | 
			
		||||
    enum class Apps {None, Launcher, Clock, SysInfo, Meter, Gauge, Brightness, Music, FirmwareValidation, Paint, Paddle, Notifications};
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -11,6 +11,7 @@
 | 
			
		||||
#include "displayapp/screens/FirmwareValidation.h"
 | 
			
		||||
#include "displayapp/screens/Gauge.h"
 | 
			
		||||
#include "displayapp/screens/InfiniPaint.h"
 | 
			
		||||
#include "displayapp/screens/Paddle.h"
 | 
			
		||||
#include "displayapp/screens/Meter.h"
 | 
			
		||||
#include "displayapp/screens/Music.h"
 | 
			
		||||
#include "displayapp/screens/Notifications.h"
 | 
			
		||||
@ -203,6 +204,7 @@ void DisplayApp::RunningState() {
 | 
			
		||||
      case Apps::Meter: currentScreen.reset(new Screens::Meter(this)); break;
 | 
			
		||||
      case Apps::Gauge: currentScreen.reset(new Screens::Gauge(this)); break;
 | 
			
		||||
      case Apps::Paint: currentScreen.reset(new Screens::InfiniPaint(this, lvgl)); break;
 | 
			
		||||
      case Apps::Paddle: currentScreen.reset(new Screens::Paddle(this, lvgl)); break;
 | 
			
		||||
      case Apps::Brightness : currentScreen.reset(new Screens::Brightness(this, brightnessController)); break;
 | 
			
		||||
      case Apps::Music : currentScreen.reset(new Screens::Music(this, systemTask.nimble().music())); break;
 | 
			
		||||
      case Apps::FirmwareValidation: currentScreen.reset(new Screens::FirmwareValidation(this, validator)); break;
 | 
			
		||||
@ -275,3 +277,4 @@ void DisplayApp::SetFullRefresh(DisplayApp::FullRefreshDirections direction) {
 | 
			
		||||
void DisplayApp::SetTouchMode(DisplayApp::TouchModes mode) {
 | 
			
		||||
  touchMode = mode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@
 | 
			
		||||
 * Bpp : 1 bit-per-pixel
 | 
			
		||||
 * Do not enable font compression and horizontal subpixel hinting
 | 
			
		||||
 * Load the file `JetBrainsMono-Bold.woff` and specify the following range : `0x20-0x7f, 0x410-0x44f`
 | 
			
		||||
 * Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc`
 | 
			
		||||
 * Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d`
 | 
			
		||||
 * Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts`
 | 
			
		||||
  
 | 
			
		||||
Add new symbols:
 | 
			
		||||
@ -21,3 +21,4 @@ Add new symbols:
 | 
			
		||||
```
 | 
			
		||||
static constex char* newSymbol = "\xEF\x86\x85";
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -847,6 +847,15 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
 | 
			
		||||
    0xdf, 0xe0, 0xff, 0x3f, 0xff, 0xfe, 0x3f, 0xff,
 | 
			
		||||
    0xf8,
 | 
			
		||||
 | 
			
		||||
    /* U+F45D "" */
 | 
			
		||||
    0x0, 0x10, 0x0, 0xf, 0xe0, 0x3, 0xff, 0x80,
 | 
			
		||||
    0x7f, 0xfc, 0xf, 0xff, 0xe0, 0xff, 0xfe, 0x7,
 | 
			
		||||
    0xff, 0xe2, 0x3f, 0xff, 0x31, 0xff, 0xf3, 0x8f,
 | 
			
		||||
    0xff, 0x3e, 0x7f, 0xf3, 0xf3, 0xc2, 0x1f, 0x90,
 | 
			
		||||
    0x0, 0xfc, 0x3c, 0x1f, 0xe7, 0xe3, 0xfe, 0xff,
 | 
			
		||||
    0x7e, 0xef, 0xff, 0xc6, 0xff, 0x78, 0x7, 0xe3,
 | 
			
		||||
    0x0, 0x3c,
 | 
			
		||||
 | 
			
		||||
    /* U+F54B "" */
 | 
			
		||||
    0x0, 0xf, 0xf8, 0x1, 0xdf, 0xff, 0x1, 0xef,
 | 
			
		||||
    0xff, 0xc0, 0xf7, 0xff, 0xf0, 0x7b, 0xff, 0xf8,
 | 
			
		||||
@ -1050,8 +1059,9 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
 | 
			
		||||
    {.bitmap_index = 3085, .adv_w = 280, .box_w = 15, .box_h = 20, .ofs_x = 1, .ofs_y = -3},
 | 
			
		||||
    {.bitmap_index = 3123, .adv_w = 200, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = -3},
 | 
			
		||||
    {.bitmap_index = 3152, .adv_w = 360, .box_w = 23, .box_h = 17, .ofs_x = 0, .ofs_y = -1},
 | 
			
		||||
    {.bitmap_index = 3201, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
 | 
			
		||||
    {.bitmap_index = 3261, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}
 | 
			
		||||
    {.bitmap_index = 3201, .adv_w = 320, .box_w = 20, .box_h = 20, .ofs_x = 0, .ofs_y = -2},
 | 
			
		||||
    {.bitmap_index = 3251, .adv_w = 400, .box_w = 25, .box_h = 19, .ofs_x = 0, .ofs_y = -2},
 | 
			
		||||
    {.bitmap_index = 3311, .adv_w = 320, .box_w = 20, .box_h = 21, .ofs_x = 0, .ofs_y = -3}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*---------------------
 | 
			
		||||
@ -1061,7 +1071,7 @@ static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
 | 
			
		||||
static const uint16_t unicode_list_2[] = {
 | 
			
		||||
    0x0, 0x16, 0x39, 0x68, 0x128, 0x184, 0x1e5, 0x1fb,
 | 
			
		||||
    0x21d, 0x23f, 0x240, 0x241, 0x242, 0x243, 0x292, 0x293,
 | 
			
		||||
    0x3fc, 0x54a, 0x55f
 | 
			
		||||
    0x3fc, 0x45c, 0x54a, 0x55f
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/*Collect the unicode lists and glyph_id offsets*/
 | 
			
		||||
@ -1077,7 +1087,7 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        .range_start = 61441, .range_length = 1376, .glyph_id_start = 160,
 | 
			
		||||
        .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 19, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
 | 
			
		||||
        .unicode_list = unicode_list_2, .glyph_id_ofs_list = NULL, .list_length = 20, .type = LV_FONT_FMT_TXT_CMAP_SPARSE_TINY
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@ -1124,4 +1134,3 @@ lv_font_t jetbrains_mono_bold_20 = {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /*#if JETBRAINS_MONO_BOLD_20*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -60,7 +60,7 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen2() {
 | 
			
		||||
           {Symbols::asterisk, Apps::Meter},
 | 
			
		||||
           {Symbols::paintbrush, Apps::Paint},
 | 
			
		||||
                  {Symbols::info, Apps::Notifications},
 | 
			
		||||
                  {Symbols::none, Apps::None},
 | 
			
		||||
                  {Symbols::paddle, Apps::Paddle},
 | 
			
		||||
                  {Symbols::none, Apps::None}
 | 
			
		||||
          }
 | 
			
		||||
  };
 | 
			
		||||
@ -81,3 +81,4 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen3() {
 | 
			
		||||
 | 
			
		||||
  return std::unique_ptr<Screen>(new Screens::Tile(app, applications));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										190
									
								
								src/displayapp/screens/Paddle.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								src/displayapp/screens/Paddle.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,190 @@
 | 
			
		||||
#include "Paddle.h"
 | 
			
		||||
#include "../DisplayApp.h"
 | 
			
		||||
#include "../LittleVgl.h"
 | 
			
		||||
 | 
			
		||||
using namespace Pinetime::Applications::Screens;
 | 
			
		||||
extern lv_font_t jetbrains_mono_extrabold_compressed;
 | 
			
		||||
extern lv_font_t jetbrains_mono_bold_20;
 | 
			
		||||
 | 
			
		||||
namespace{
 | 
			
		||||
const uint8_t paddle_map[] = {
 | 
			
		||||
  0xfc, 0xfe, 0xfc, 0xff, 	/*Color of index 0*/
 | 
			
		||||
  0xff, 0xff, 0xff, 0xff, 	/*Color of index 1*/
 | 
			
		||||
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
  0x00, 
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const uint8_t ball_map[] = {
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 
 | 
			
		||||
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
  0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
  0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
  0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 0x6f, 0xed, 
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Paddle::Paddle(Pinetime::Applications::DisplayApp* app, Pinetime::Components::LittleVgl& lvgl) : Screen(app), lvgl{lvgl} {
 | 
			
		||||
  app->SetTouchMode(DisplayApp::TouchModes::Polling);
 | 
			
		||||
	
 | 
			
		||||
  points = lv_label_create(lv_scr_act(), nullptr);
 | 
			
		||||
  lv_label_set_text(points, "0");	
 | 
			
		||||
  lv_obj_align(points, lv_scr_act(), LV_ALIGN_IN_TOP_MID, 0, 0);
 | 
			
		||||
	
 | 
			
		||||
  paddle.header.always_zero = 0;
 | 
			
		||||
  paddle.header.w = 4;
 | 
			
		||||
  paddle.header.h = 60;
 | 
			
		||||
  paddle.data_size = 68;
 | 
			
		||||
  paddle.header.cf = LV_IMG_CF_INDEXED_1BIT;
 | 
			
		||||
  paddle.data = paddle_map;  
 | 
			
		||||
  paddle_image = lv_img_create(lv_scr_act(), nullptr);
 | 
			
		||||
  lv_img_set_src(paddle_image, &paddle);
 | 
			
		||||
  
 | 
			
		||||
  ball.header.always_zero = 0;
 | 
			
		||||
  ball.header.w = 24;
 | 
			
		||||
  ball.header.h = 24;
 | 
			
		||||
  ball.data_size = 24 * 24 * LV_COLOR_SIZE / 8;
 | 
			
		||||
  ball.header.cf = LV_IMG_CF_TRUE_COLOR_CHROMA_KEYED;
 | 
			
		||||
  ball.data = ball_map;  
 | 
			
		||||
  ball_image = lv_img_create(lv_scr_act(), nullptr);
 | 
			
		||||
  lv_img_set_src(ball_image, &ball);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Paddle::~Paddle() {
 | 
			
		||||
  // Reset the touchmode
 | 
			
		||||
  app->SetTouchMode(DisplayApp::TouchModes::Gestures);
 | 
			
		||||
  lv_obj_clean(lv_scr_act());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Paddle::Refresh() {
 | 
			
		||||
  if((counter++ % 5) == 0){
 | 
			
		||||
    counter = 0;	
 | 
			
		||||
    
 | 
			
		||||
    ballX += dx;
 | 
			
		||||
    ballY += dy;	    
 | 
			
		||||
	  
 | 
			
		||||
    lv_obj_set_pos(ball_image, ballX, ballY);
 | 
			
		||||
  
 | 
			
		||||
    //checks if it has touched the sides (floor and ceiling)	  
 | 
			
		||||
    if(ballY <= 0 || ballY >= 215){
 | 
			
		||||
      dy *= -1;
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    //checks if it has touched the side (left side)  
 | 
			
		||||
    if(ballX >= 215){
 | 
			
		||||
      dx *= -1; 
 | 
			
		||||
    }
 | 
			
		||||
  
 | 
			
		||||
    //checks if it is in the position of the paddle	  
 | 
			
		||||
    if(ballY <= (paddleBottomY + 16) && ballY >= (paddleTopY - 8)){ 
 | 
			
		||||
      if(ballX >= 0 && ballX < 4){    
 | 
			
		||||
          lv_obj_set_pos(ball_image, 5, ballY);
 | 
			
		||||
          dx *= -1;   
 | 
			
		||||
          score++;
 | 
			
		||||
        } 
 | 
			
		||||
    }	
 | 
			
		||||
	  
 | 
			
		||||
    //checks if it has gone behind the paddle
 | 
			
		||||
    else if(ballX <= -40){
 | 
			
		||||
      ballX = 107;
 | 
			
		||||
      ballY = 107; 
 | 
			
		||||
      score = 0;	    
 | 
			
		||||
    } 
 | 
			
		||||
    sprintf(scoreStr, "%d", score);	
 | 
			
		||||
    lv_label_set_text(points, scoreStr);	  
 | 
			
		||||
  }      
 | 
			
		||||
  return running;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Paddle::OnButtonPushed() {
 | 
			
		||||
  running = false;
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Paddle::OnTouchEvent(Pinetime::Applications::TouchEvents event) { 
 | 
			
		||||
  return true; 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool Paddle::OnTouchEvent(uint16_t x, uint16_t y) {
 | 
			
		||||
  lv_obj_set_pos(paddle_image, 0, y - 30);		// sets the center paddle pos. (30px offset) with the the y_coordinate of the finger and defaults the x_coordinate to 0
 | 
			
		||||
  paddleTopY = y - 30;					// refreshes the upper extreme of the paddle
 | 
			
		||||
  paddleBottomY = y + 30;					// refreshes the lower extreme of the paddle
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								src/displayapp/screens/Paddle.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/displayapp/screens/Paddle.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <lvgl/lvgl.h>
 | 
			
		||||
#include <cstdint>
 | 
			
		||||
#include "Screen.h"
 | 
			
		||||
 | 
			
		||||
namespace Pinetime {
 | 
			
		||||
  namespace Components {
 | 
			
		||||
    class LittleVgl;
 | 
			
		||||
  }
 | 
			
		||||
  namespace Applications {
 | 
			
		||||
    namespace Screens {
 | 
			
		||||
 | 
			
		||||
      class Paddle : public Screen{
 | 
			
		||||
        public:
 | 
			
		||||
          Paddle(DisplayApp* app, Pinetime::Components::LittleVgl& lvgl);
 | 
			
		||||
          ~Paddle() 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;
 | 
			
		||||
        
 | 
			
		||||
          int paddleBottomY = 90;            // bottom extreme of the paddle
 | 
			
		||||
          int paddleTopY = 150;		        //top extreme of the paddle
 | 
			
		||||
 | 
			
		||||
          int ballX = 107;	            // Initial x_coordinate for the ball (12px offset from the center to counteract the ball's 24px size)
 | 
			
		||||
          int ballY = 107;	            // Initial y_coordinate for the ball
 | 
			
		||||
 | 
			
		||||
          int dx = 2;		            // Velocity of the ball in the x_coordinate
 | 
			
		||||
          int dy = 3;		            // Velocity of the ball in the y_coordinate
 | 
			
		||||
 | 
			
		||||
          int counter = 0;	            // init Frame refresh limit counter
 | 
			
		||||
          int score = 0;   
 | 
			
		||||
 | 
			
		||||
          char scoreStr[10];
 | 
			
		||||
 | 
			
		||||
          lv_img_dsc_t paddle; 
 | 
			
		||||
          lv_img_dsc_t ball;
 | 
			
		||||
 | 
			
		||||
          lv_obj_t* points;
 | 
			
		||||
          lv_obj_t* paddle_image;		// pointer to paddle image
 | 
			
		||||
          lv_obj_t* ball_image;		// pointer to ball image
 | 
			
		||||
 | 
			
		||||
          bool running = true;
 | 
			
		||||
      };
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@ -24,7 +24,9 @@ namespace Pinetime {
 | 
			
		||||
        static constexpr const char* tachometer = "\xEF\x8F\xBD";
 | 
			
		||||
        static constexpr const char* asterisk = "\xEF\x81\xA9";
 | 
			
		||||
        static constexpr const char* paintbrush = "\xEF\x87\xBC";
 | 
			
		||||
        static constexpr const char* paddle = "\xEF\x91\x9D";
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user