1 /** 2 * @file lv_disp.c 3 * 4 */ 5 6 /********************* 7 * INCLUDES 8 *********************/ 9 #include "lv_disp.h" 10 #include "../lv_misc/lv_math.h" 11 12 /********************* 13 * DEFINES 14 *********************/ 15 16 /********************** 17 * TYPEDEFS 18 **********************/ 19 20 /********************** 21 * STATIC PROTOTYPES 22 **********************/ 23 24 /********************** 25 * STATIC VARIABLES 26 **********************/ 27 28 /********************** 29 * MACROS 30 **********************/ 31 32 /********************** 33 * GLOBAL FUNCTIONS 34 **********************/ 35 36 /** 37 * Return with a pointer to the active screen 38 * @param disp pointer to display which active screen should be get. (NULL to use the default 39 * screen) 40 * @return pointer to the active screen object (loaded by 'lv_scr_load()') 41 */ lv_disp_get_scr_act(lv_disp_t * disp)42lv_obj_t * lv_disp_get_scr_act(lv_disp_t * disp) 43 { 44 if(!disp) disp = lv_disp_get_default(); 45 if(!disp) { 46 LV_LOG_WARN("lv_scr_act: no display registered to get its top layer"); 47 return NULL; 48 } 49 50 return disp->act_scr; 51 } 52 53 /** 54 * Make a screen active 55 * @param scr pointer to a screen 56 */ lv_disp_load_scr(lv_obj_t * scr)57void lv_disp_load_scr(lv_obj_t * scr) 58 { 59 lv_disp_t * d = lv_obj_get_disp(scr); 60 61 d->act_scr = scr; 62 63 lv_obj_invalidate(scr); 64 } 65 66 /** 67 * Return with the top layer. (Same on every screen and it is above the normal screen layer) 68 * @param disp pointer to display which top layer should be get. (NULL to use the default screen) 69 * @return pointer to the top layer object (transparent screen sized lv_obj) 70 */ lv_disp_get_layer_top(lv_disp_t * disp)71lv_obj_t * lv_disp_get_layer_top(lv_disp_t * disp) 72 { 73 if(!disp) disp = lv_disp_get_default(); 74 if(!disp) { 75 LV_LOG_WARN("lv_layer_top: no display registered to get its top layer"); 76 return NULL; 77 } 78 79 return disp->top_layer; 80 } 81 82 /** 83 * Return with the sys. layer. (Same on every screen and it is above the normal screen and the top 84 * layer) 85 * @param disp pointer to display which sys. layer should be get. (NULL to use the default screen) 86 * @return pointer to the sys layer object (transparent screen sized lv_obj) 87 */ lv_disp_get_layer_sys(lv_disp_t * disp)88lv_obj_t * lv_disp_get_layer_sys(lv_disp_t * disp) 89 { 90 if(!disp) disp = lv_disp_get_default(); 91 if(!disp) { 92 LV_LOG_WARN("lv_layer_sys: no display registered to get its top layer"); 93 return NULL; 94 } 95 96 return disp->sys_layer; 97 } 98 99 /** 100 * Assign a screen to a display. 101 * @param disp pointer to a display where to assign the screen 102 * @param scr pointer to a screen object to assign 103 */ lv_disp_assign_screen(lv_disp_t * disp,lv_obj_t * scr)104void lv_disp_assign_screen(lv_disp_t * disp, lv_obj_t * scr) 105 { 106 if(lv_obj_get_parent(scr) != NULL) { 107 LV_LOG_WARN("lv_disp_assign_screen: try to assign a non-screen object"); 108 return; 109 } 110 111 lv_disp_t * old_disp = lv_obj_get_disp(scr); 112 113 if(old_disp == disp) return; 114 115 lv_ll_chg_list(&old_disp->scr_ll, &disp->scr_ll, scr, true); 116 } 117 118 /** 119 * Get a pointer to the screen refresher task to 120 * modify its parameters with `lv_task_...` functions. 121 * @param disp pointer to a display 122 * @return pointer to the display refresher task. (NULL on error) 123 */ lv_disp_get_refr_task(lv_disp_t * disp)124lv_task_t * lv_disp_get_refr_task(lv_disp_t * disp) 125 { 126 if(!disp) disp = lv_disp_get_default(); 127 if(!disp) { 128 LV_LOG_WARN("lv_disp_get_refr_task: no display registered"); 129 return NULL; 130 } 131 132 return disp->refr_task; 133 } 134 135 /** 136 * Get elapsed time since last user activity on a display (e.g. click) 137 * @param disp pointer to an display (NULL to get the overall smallest inactivity) 138 * @return elapsed ticks (milliseconds) since the last activity 139 */ lv_disp_get_inactive_time(const lv_disp_t * disp)140uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp) 141 { 142 if(!disp) disp = lv_disp_get_default(); 143 if(!disp) { 144 LV_LOG_WARN("lv_disp_get_inactive_time: no display registered"); 145 return 0; 146 } 147 148 if(disp) return lv_tick_elaps(disp->last_activity_time); 149 150 lv_disp_t * d; 151 uint32_t t = UINT32_MAX; 152 d = lv_disp_get_next(NULL); 153 while(d) { 154 t = LV_MATH_MIN(t, lv_tick_elaps(d->last_activity_time)); 155 d = lv_disp_get_next(d); 156 } 157 158 return t; 159 } 160 161 /** 162 * Manually trigger an activity on a display 163 * @param disp pointer to an display (NULL to use the default display) 164 */ lv_disp_trig_activity(lv_disp_t * disp)165void lv_disp_trig_activity(lv_disp_t * disp) 166 { 167 if(!disp) disp = lv_disp_get_default(); 168 if(!disp) { 169 LV_LOG_WARN("lv_disp_trig_activity: no display registered"); 170 return; 171 } 172 173 disp->last_activity_time = lv_tick_get(); 174 } 175 176 /********************** 177 * STATIC FUNCTIONS 178 **********************/ 179