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/Meter.cpp
 | 
				
			||||||
        displayapp/screens/Gauge.cpp
 | 
					        displayapp/screens/Gauge.cpp
 | 
				
			||||||
        displayapp/screens/InfiniPaint.cpp
 | 
					        displayapp/screens/InfiniPaint.cpp
 | 
				
			||||||
 | 
					        displayapp/screens/Paddle.cpp
 | 
				
			||||||
        displayapp/screens/DropDownDemo.cpp
 | 
					        displayapp/screens/DropDownDemo.cpp
 | 
				
			||||||
        displayapp/screens/Modal.cpp
 | 
					        displayapp/screens/Modal.cpp
 | 
				
			||||||
        displayapp/screens/BatteryIcon.cpp
 | 
					        displayapp/screens/BatteryIcon.cpp
 | 
				
			||||||
@ -414,6 +415,7 @@ set(INCLUDE_FILES
 | 
				
			|||||||
        displayapp/screens/Meter.h
 | 
					        displayapp/screens/Meter.h
 | 
				
			||||||
        displayapp/screens/Gauge.h
 | 
					        displayapp/screens/Gauge.h
 | 
				
			||||||
        displayapp/screens/InfiniPaint.h
 | 
					        displayapp/screens/InfiniPaint.h
 | 
				
			||||||
 | 
					        displayapp/screens/Paddle.h
 | 
				
			||||||
        displayapp/screens/DropDownDemo.h
 | 
					        displayapp/screens/DropDownDemo.h
 | 
				
			||||||
        displayapp/screens/Modal.h
 | 
					        displayapp/screens/Modal.h
 | 
				
			||||||
        displayapp/screens/BatteryIcon.h
 | 
					        displayapp/screens/BatteryIcon.h
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace Pinetime {
 | 
					namespace Pinetime {
 | 
				
			||||||
  namespace Applications {
 | 
					  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/FirmwareValidation.h"
 | 
				
			||||||
#include "displayapp/screens/Gauge.h"
 | 
					#include "displayapp/screens/Gauge.h"
 | 
				
			||||||
#include "displayapp/screens/InfiniPaint.h"
 | 
					#include "displayapp/screens/InfiniPaint.h"
 | 
				
			||||||
 | 
					#include "displayapp/screens/Paddle.h"
 | 
				
			||||||
#include "displayapp/screens/Meter.h"
 | 
					#include "displayapp/screens/Meter.h"
 | 
				
			||||||
#include "displayapp/screens/Music.h"
 | 
					#include "displayapp/screens/Music.h"
 | 
				
			||||||
#include "displayapp/screens/Notifications.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::Meter: currentScreen.reset(new Screens::Meter(this)); break;
 | 
				
			||||||
      case Apps::Gauge: currentScreen.reset(new Screens::Gauge(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::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::Brightness : currentScreen.reset(new Screens::Brightness(this, brightnessController)); break;
 | 
				
			||||||
      case Apps::Music : currentScreen.reset(new Screens::Music(this, systemTask.nimble().music())); 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;
 | 
					      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) {
 | 
					void DisplayApp::SetTouchMode(DisplayApp::TouchModes mode) {
 | 
				
			||||||
  touchMode = mode;
 | 
					  touchMode = mode;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@
 | 
				
			|||||||
 * Bpp : 1 bit-per-pixel
 | 
					 * Bpp : 1 bit-per-pixel
 | 
				
			||||||
 * Do not enable font compression and horizontal subpixel hinting
 | 
					 * Do not enable font compression and horizontal subpixel hinting
 | 
				
			||||||
 * Load the file `JetBrainsMono-Bold.woff` and specify the following range : `0x20-0x7f, 0x410-0x44f`
 | 
					 * 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`
 | 
					 * Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts`
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
Add new symbols:
 | 
					Add new symbols:
 | 
				
			||||||
@ -21,3 +21,4 @@ Add new symbols:
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
static constex char* newSymbol = "\xEF\x86\x85";
 | 
					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,
 | 
					    0xdf, 0xe0, 0xff, 0x3f, 0xff, 0xfe, 0x3f, 0xff,
 | 
				
			||||||
    0xf8,
 | 
					    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 "" */
 | 
					    /* U+F54B "" */
 | 
				
			||||||
    0x0, 0xf, 0xf8, 0x1, 0xdf, 0xff, 0x1, 0xef,
 | 
					    0x0, 0xf, 0xf8, 0x1, 0xdf, 0xff, 0x1, 0xef,
 | 
				
			||||||
    0xff, 0xc0, 0xf7, 0xff, 0xf0, 0x7b, 0xff, 0xf8,
 | 
					    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 = 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 = 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 = 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 = 3201, .adv_w = 320, .box_w = 20, .box_h = 20, .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 = 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[] = {
 | 
					static const uint16_t unicode_list_2[] = {
 | 
				
			||||||
    0x0, 0x16, 0x39, 0x68, 0x128, 0x184, 0x1e5, 0x1fb,
 | 
					    0x0, 0x16, 0x39, 0x68, 0x128, 0x184, 0x1e5, 0x1fb,
 | 
				
			||||||
    0x21d, 0x23f, 0x240, 0x241, 0x242, 0x243, 0x292, 0x293,
 | 
					    0x21d, 0x23f, 0x240, 0x241, 0x242, 0x243, 0x292, 0x293,
 | 
				
			||||||
    0x3fc, 0x54a, 0x55f
 | 
					    0x3fc, 0x45c, 0x54a, 0x55f
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*Collect the unicode lists and glyph_id offsets*/
 | 
					/*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,
 | 
					        .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*/
 | 
					#endif /*#if JETBRAINS_MONO_BOLD_20*/
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -60,7 +60,7 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen2() {
 | 
				
			|||||||
           {Symbols::asterisk, Apps::Meter},
 | 
					           {Symbols::asterisk, Apps::Meter},
 | 
				
			||||||
           {Symbols::paintbrush, Apps::Paint},
 | 
					           {Symbols::paintbrush, Apps::Paint},
 | 
				
			||||||
                  {Symbols::info, Apps::Notifications},
 | 
					                  {Symbols::info, Apps::Notifications},
 | 
				
			||||||
                  {Symbols::none, Apps::None},
 | 
					                  {Symbols::paddle, Apps::Paddle},
 | 
				
			||||||
                  {Symbols::none, Apps::None}
 | 
					                  {Symbols::none, Apps::None}
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
@ -81,3 +81,4 @@ std::unique_ptr<Screen> ApplicationList::CreateScreen3() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  return std::unique_ptr<Screen>(new Screens::Tile(app, applications));
 | 
					  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* tachometer = "\xEF\x8F\xBD";
 | 
				
			||||||
        static constexpr const char* asterisk = "\xEF\x81\xA9";
 | 
					        static constexpr const char* asterisk = "\xEF\x81\xA9";
 | 
				
			||||||
        static constexpr const char* paintbrush = "\xEF\x87\xBC";
 | 
					        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