def draw_event_cb(e): obj = e.get_target() cont_a = lv.area_t() obj.get_coords(cont_a) #Add the faded area before the lines are drawn dsc = e.get_draw_part_dsc() if dsc.part == lv.PART.ITEMS: if not dsc.p1 or not dsc.p2: return # Add a line mask that keeps the area below the line line_mask_param = lv.draw_mask_line_param_t() line_mask_param.points_init(dsc.p1.x, dsc.p1.y, dsc.p2.x, dsc.p2.y, lv.DRAW_MASK_LINE_SIDE.BOTTOM) line_mask_id = lv.draw_mask_add(line_mask_param, None) #Draw a rectangle that will be affected by the mask draw_rect_dsc = lv.draw_rect_dsc_t() draw_rect_dsc.init() draw_rect_dsc.bg_opa = lv.OPA.COVER draw_rect_dsc.bg_color = dsc.line_dsc.color a = lv.area_t() a.x1 = dsc.p1.x a.x2 = dsc.p2.x a.y1 = min(dsc.p1.y, dsc.p2.y) a.y2 = cont_a.y2 - 13 # -13 cuts off where the rectangle draws over the chart margin. Without this an area of 0 doesn't look like 0 dsc.draw_ctx.rect(draw_rect_dsc, a) # Remove the mask lv.draw_mask_free_param(line_mask_param) lv.draw_mask_remove_id(line_mask_id)
def draw_event_cb(e): obj = lv.obj.__cast__(e.get_target()) # Add the faded area before the lines are drawn dsc = lv.obj_draw_part_dsc_t.cast(e.get_param()) if dsc.part != lv.PART.ITEMS: return if not dsc.p1 or not dsc.p2: return # Add a line mask that keeps the area below the line line_mask_param = lv.draw_mask_line_param_t() line_mask_param.points_init(dsc.p1.x, dsc.p1.y, dsc.p2.x, dsc.p2.y, lv.DRAW_MASK_LINE_SIDE.BOTTOM) # line_mask_id = line_mask_param.draw_mask_add(None) line_mask_id = lv.draw_mask_add(line_mask_param, None) # Add a fade effect: transparent bottom covering top h = obj.get_height() fade_mask_param = lv.draw_mask_fade_param_t() coords = lv.area_t() obj.get_coords(coords) fade_mask_param.init(coords, lv.OPA.COVER, coords.y1 + h // 8, lv.OPA.TRANSP, coords.y2) fade_mask_id = lv.draw_mask_add(fade_mask_param, None) # Draw a rectangle that will be affected by the mask draw_rect_dsc = lv.draw_rect_dsc_t() draw_rect_dsc.init() draw_rect_dsc.bg_opa = lv.OPA._20 draw_rect_dsc.bg_color = dsc.line_dsc.color a = lv.area_t() a.x1 = dsc.p1.x a.x2 = dsc.p2.x - 1 a.y1 = min(dsc.p1.y, dsc.p2.y) coords = lv.area_t() obj.get_coords(coords) a.y2 = coords.y2 lv.draw_rect(a, dsc.clip_area, draw_rect_dsc) # Remove the masks lv.draw_mask_remove_id(line_mask_id) lv.draw_mask_remove_id(fade_mask_id)
def mask_event_cb(self, e): code = e.get_code() obj = e.get_target() if code == lv.EVENT.COVER_CHECK: e.set_cover_res(lv.COVER_RES.MASKED) elif code == lv.EVENT.DRAW_MAIN_BEGIN: # add mask font = obj.get_style_text_font(lv.PART.MAIN) line_space = obj.get_style_text_line_space(lv.PART.MAIN) font_h = font.get_line_height() roller_coords = lv.area_t() obj.get_coords(roller_coords) rect_area = lv.area_t() rect_area.x1 = roller_coords.x1 rect_area.x2 = roller_coords.x2 rect_area.y1 = roller_coords.y1 rect_area.y2 = roller_coords.y1 + (obj.get_height() - font_h - line_space) // 2 fade_mask_top = lv.draw_mask_fade_param_t() fade_mask_top.init(rect_area, lv.OPA.TRANSP, rect_area.y1, lv.OPA.COVER, rect_area.y2) self.mask_top_id = lv.draw_mask_add(fade_mask_top, None) rect_area.y1 = rect_area.y2 + font_h + line_space - 1 rect_area.y2 = roller_coords.y2 fade_mask_bottom = lv.draw_mask_fade_param_t() fade_mask_bottom.init(rect_area, lv.OPA.COVER, rect_area.y1, lv.OPA.TRANSP, rect_area.y2) self.mask_bottom_id = lv.draw_mask_add(fade_mask_bottom, None) elif code == lv.EVENT.DRAW_POST_END: fade_mask_top = lv.draw_mask_remove_id(self.mask_top_id) fade_mask_bottom = lv.draw_mask_remove_id(self.mask_bottom_id) # Remove the masks lv.draw_mask_remove_id(self.mask_top_id) lv.draw_mask_remove_id(self.mask_bottom_id) self.mask_top_id = -1 self.mask_bottom_id = -1