prevent refresh after drag is no movement happened
This commit is contained in:
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include "../lv_hal/lv_hal_tick.h"
|
#include "../lv_hal/lv_hal_tick.h"
|
||||||
#include "../lv_core/lv_group.h"
|
#include "../lv_core/lv_group.h"
|
||||||
|
#include "../lv_core/lv_refr.h"
|
||||||
#include "../lv_misc/lv_task.h"
|
#include "../lv_misc/lv_task.h"
|
||||||
#include "../lv_misc/lv_math.h"
|
#include "../lv_misc/lv_math.h"
|
||||||
#include "../lv_draw/lv_draw_rbasic.h"
|
#include "../lv_draw/lv_draw_rbasic.h"
|
||||||
@@ -646,9 +647,10 @@ static void indev_drag(lv_indev_proc_t * state)
|
|||||||
/*Set new position if the vector is not zero*/
|
/*Set new position if the vector is not zero*/
|
||||||
if(state->vect.x != 0 ||
|
if(state->vect.x != 0 ||
|
||||||
state->vect.y != 0) {
|
state->vect.y != 0) {
|
||||||
/*Get the coordinates of the object end modify them*/
|
/*Get the coordinates of the object and modify them*/
|
||||||
lv_coord_t act_x = lv_obj_get_x(drag_obj);
|
lv_coord_t act_x = lv_obj_get_x(drag_obj);
|
||||||
lv_coord_t act_y = lv_obj_get_y(drag_obj);
|
lv_coord_t act_y = lv_obj_get_y(drag_obj);
|
||||||
|
uint16_t inv_buf_size = lv_refr_get_buf_size(); /*Get the number of currently invalidated areas*/
|
||||||
|
|
||||||
lv_obj_set_pos(drag_obj, act_x + state->vect.x, act_y + state->vect.y);
|
lv_obj_set_pos(drag_obj, act_x + state->vect.x, act_y + state->vect.y);
|
||||||
|
|
||||||
@@ -660,7 +662,11 @@ static void indev_drag(lv_indev_proc_t * state)
|
|||||||
}
|
}
|
||||||
state->drag_in_prog = 1;
|
state->drag_in_prog = 1;
|
||||||
}
|
}
|
||||||
|
/*If the object didn't moved then clear the invalidated areas*/
|
||||||
|
else {
|
||||||
|
uint16_t new_inv_buf_size = lv_refr_get_buf_size();
|
||||||
|
lv_refr_pop_from_buf(new_inv_buf_size - inv_buf_size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -139,6 +139,25 @@ void lv_refr_set_round_cd(void(*cb)(lv_area_t*))
|
|||||||
round_cb = cb;
|
round_cb = cb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of areas in the buffer
|
||||||
|
* @return number of invalid areas
|
||||||
|
*/
|
||||||
|
uint16_t lv_refr_get_buf_size(void)
|
||||||
|
{
|
||||||
|
return inv_buf_p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pop (delete) the last 'num' invalidated areas from the buffer
|
||||||
|
* @param num number of areas to delete
|
||||||
|
*/
|
||||||
|
void lv_refr_pop_from_buf(uint16_t num)
|
||||||
|
{
|
||||||
|
if(inv_buf_p < num) inv_buf_p = 0;
|
||||||
|
else inv_buf_p -= num;
|
||||||
|
}
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* STATIC FUNCTIONS
|
* STATIC FUNCTIONS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -65,6 +65,17 @@ void lv_refr_set_monitor_cb(void (*cb)(uint32_t, uint32_t));
|
|||||||
*/
|
*/
|
||||||
void lv_refr_set_round_cd(void(*cb)(lv_area_t*));
|
void lv_refr_set_round_cd(void(*cb)(lv_area_t*));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of areas in the buffer
|
||||||
|
* @return number of invalid areas
|
||||||
|
*/
|
||||||
|
uint16_t lv_refr_get_buf_size(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pop (delete) the last 'num' invalidated areas from the buffer
|
||||||
|
* @param num number of areas to delete
|
||||||
|
*/
|
||||||
|
void lv_refr_pop_from_buf(uint16_t num);
|
||||||
/**********************
|
/**********************
|
||||||
* STATIC FUNCTIONS
|
* STATIC FUNCTIONS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
Reference in New Issue
Block a user