@ -4,98 +4,31 @@
using namespace Pinetime : : Applications : : Screens ;
using namespace Pinetime : : Applications : : Screens ;
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 } {
Paddle : : Paddle ( Pinetime : : Applications : : DisplayApp * app , Pinetime : : Components : : LittleVgl & lvgl ) : Screen ( app ) , lvgl { lvgl } {
app - > SetTouchMode ( DisplayApp : : TouchModes : : Polling ) ;
app - > SetTouchMode ( DisplayApp : : TouchModes : : Polling ) ;
background = lv_obj_create ( lv_scr_act ( ) , nullptr ) ;
lv_obj_set_size ( background , LV_HOR_RES + 1 , LV_VER_RES ) ;
lv_obj_set_pos ( background , - 1 , 0 ) ;
lv_obj_set_style_local_radius ( background , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , 0 ) ;
lv_obj_set_style_local_bg_color ( background , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , LV_COLOR_BLACK ) ;
lv_obj_set_style_local_border_color ( background , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , LV_COLOR_WHITE ) ;
lv_obj_set_style_local_border_width ( background , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , 1 ) ;
points = lv_label_create ( lv_scr_act ( ) , nullptr ) ;
points = lv_label_create ( lv_scr_act ( ) , nullptr ) ;
lv_obj_set_style_local_text_font ( points , LV_LABEL_PART_MAIN , LV_STATE_DEFAULT , & jetbrains_mono_42 ) ;
lv_label_set_text ( points , " 0000 " ) ;
lv_label_set_text ( points , " 0000 " ) ;
lv_obj_set_style_local_text_color ( points , LV_LABEL_PART_MAIN , LV_STATE_DEFAULT , lv_color_hex ( 0x444444 ) ) ;
lv_obj_align ( points , lv_scr_act ( ) , LV_ALIGN_IN_TOP_MID , 0 , 10 ) ;
lv_obj_align ( points , lv_scr_act ( ) , LV_ALIGN_IN_TOP_MID , 0 , 0 ) ;
paddle . header . always_zero = 0 ;
paddle = lv_obj_create ( lv_scr_act ( ) , nullptr ) ;
paddle . header . w = 4 ;
lv_obj_set_style_local_bg_color ( paddle , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , LV_COLOR_WHITE ) ;
paddle . header . h = 60 ;
lv_obj_set_style_local_radius ( paddle , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , 0 ) ;
paddle . data_size = 68 ;
lv_obj_set_size ( paddle , 4 , 60 ) ;
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 = lv_obj_create ( lv_scr_act ( ) , nullptr ) ;
ball . header . w = 24 ;
lv_obj_set_style_local_bg_color ( ball , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , LV_COLOR_WHITE ) ;
ball . header . h = 24 ;
lv_obj_set_style_local_radius ( ball , LV_BTN_PART_MAIN , LV_STATE_DEFAULT , LV_RADIUS_CIRCLE ) ;
ball . data_size = 24 * 24 * LV_COLOR_SIZE / 8 ;
lv_obj_set_size ( ball , ballSize , ballSize ) ;
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 ( ) {
Paddle : : ~ Paddle ( ) {
@ -105,41 +38,37 @@ Paddle::~Paddle() {
}
}
bool Paddle : : Refresh ( ) {
bool Paddle : : Refresh ( ) {
if ( ( counter + + % 5 ) = = 0 ) {
counter = 0 ;
ballX + = dx ;
ballX + = dx ;
ballY + = dy ;
ballY + = dy ;
lv_obj_set_pos ( ball _image , ballX , ballY ) ;
lv_obj_set_pos ( ball , ballX , ballY ) ;
// checks if it has touched the sides (floor and ceiling)
// checks if it has touched the sides (floor and ceiling)
if ( ballY < = 0 | | ballY > = 2 15 ) {
if ( ballY < = 1 | | ballY > = LV_VER_RES - ballSize - 2 ) {
dy * = - 1 ;
dy * = - 1 ;
}
}
// checks if it has touched the side (left side)
// checks if it has touched the side (left side)
if ( ballX > = 2 15 ) {
if ( ballX > = LV_VER_RES - ballSize - 1) {
dx * = - 1 ;
dx * = - 1 ;
}
}
// checks if it is in the position of the paddle
// checks if it is in the position of the paddle
if ( ballY < = ( paddleBottomY + 16 ) & & ballY > = ( paddleTopY - 8 ) ) {
if ( dx < 0 & & ballX < = 4 ) {
if ( ballX > = 0 & & ballX < 4 ) {
if ( ballX > = - ballSize / 4 ) {
lv_obj_set_pos ( ball_image , 5 , ballY ) ;
if ( ballY < = ( paddlePos + 30 - ballSize / 4 ) & & ballY > = ( paddlePos - 30 - ballSize + ballSize / 4 ) ) {
dx * = - 1 ;
dx * = - 1 ;
score + + ;
score + + ;
}
}
}
}
// checks if it has gone behind the paddle
// checks if it has gone behind the paddle
else if ( ballX < = - 40 ) {
else if ( ballX < = - ballSize * 2 ) {
ballX = 107 ;
ballX = ( LV_HOR_RES - ballSize ) / 2 ;
ballY = 107 ;
ballY = ( LV_VER_RES - ballSize ) / 2 ;
score = 0 ;
score = 0 ;
}
}
lv_label_set_text_fmt ( points , " %04d " , score ) ;
}
}
lv_label_set_text_fmt ( points , " %04d " , score ) ;
return running ;
return running ;
}
}
@ -148,11 +77,8 @@ bool Paddle::OnTouchEvent(Pinetime::Applications::TouchEvents event) {
}
}
bool Paddle : : OnTouchEvent ( uint16_t x , uint16_t y ) {
bool Paddle : : OnTouchEvent ( uint16_t x , uint16_t y ) {
lv_obj_set_pos (
// sets the center paddle pos. (30px offset) with the the y_coordinate of the finger
paddle_image ,
lv_obj_set_pos ( paddle , 0 , y - 30 ) ;
0 ,
paddlePos = y ;
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 ;
return true ;
}
}