1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */ 2 3 #ifndef __UI_PICTURE_H__ 4 #define __UI_PICTURE_H__ 5 6 #include <pobl/bl_types.h> /* u_int16_t */ 7 #include <vt_term.h> 8 9 #include "ui.h" /* XA_PIXMAP */ 10 #include "ui_window.h" 11 12 typedef struct ui_picture_modifier { 13 u_int16_t brightness; /* 0 - 65535 */ 14 u_int16_t contrast; /* 0 - 65535 */ 15 u_int16_t gamma; /* 0 - 65535 */ 16 17 u_int8_t alpha; /* 0 - 255 */ 18 u_int8_t blend_red; 19 u_int8_t blend_green; 20 u_int8_t blend_blue; 21 22 } ui_picture_modifier_t; 23 24 typedef struct ui_picture { 25 Display *display; 26 ui_picture_modifier_t *mod; 27 char *file_path; 28 u_int width; 29 u_int height; 30 31 Pixmap pixmap; 32 33 u_int ref_count; 34 35 } ui_picture_t; 36 37 typedef struct ui_icon_picture { 38 ui_display_t *disp; 39 char *file_path; 40 41 Pixmap pixmap; 42 PixmapMask mask; 43 u_int32_t *cardinal; 44 45 u_int ref_count; 46 47 } ui_icon_picture_t; 48 49 typedef struct ui_inline_picture { 50 Pixmap pixmap; 51 PixmapMask mask; 52 char *file_path; 53 u_int width; 54 u_int height; 55 ui_display_t *disp; 56 vt_term_t *term; 57 u_int8_t col_width; 58 u_int8_t line_height; 59 60 int16_t next_frame; 61 62 } ui_inline_picture_t; 63 64 #define MAX_INLINE_PICTURES (1 << PICTURE_ID_BITS) 65 #define MAKE_INLINEPIC_POS(col, row, num_rows) ((col) * (num_rows) + (row)) 66 #define INLINEPIC_AVAIL_ROW -MAX_INLINE_PICTURES 67 68 #ifdef NO_IMAGE 69 70 #define ui_picture_display_opened(display) (0) 71 #define ui_picture_display_closed(display) (0) 72 #define ui_picture_modifiers_equal(a, b) (0) 73 #define ui_acquire_bg_picture(win, mod, file_path) (NULL) 74 #define ui_release_picture(pic) (0) 75 #define ui_acquire_icon_picture(disp, file_path) (NULL) 76 #define ui_release_icon_picture(pic) (0) 77 #define ui_load_inline_picture(disp, file_path, width, height, col_width, line_height, \ 78 keep_aspect, term) (-1) 79 #define ui_get_inline_picture(idx) (NULL) 80 81 #else 82 83 /* defined in c_sixel.c */ 84 u_int32_t *ui_set_custom_sixel_palette(u_int32_t *palette); 85 86 void ui_picture_display_opened(Display *display); 87 88 void ui_picture_display_closed(Display *display); 89 90 int ui_picture_modifiers_equal(ui_picture_modifier_t *a, ui_picture_modifier_t *b); 91 92 ui_picture_t *ui_acquire_bg_picture(ui_window_t *win, ui_picture_modifier_t *mod, char *file_path); 93 94 void ui_release_picture(ui_picture_t *pic); 95 96 ui_icon_picture_t *ui_acquire_icon_picture(ui_display_t *disp, char *file_path); 97 98 void ui_release_icon_picture(ui_icon_picture_t *pic); 99 100 int ui_load_inline_picture(ui_display_t *disp, char *file_path, u_int *width, u_int *height, 101 u_int col_width, u_int line_height, int keep_aspect, vt_term_t *term); 102 103 ui_inline_picture_t *ui_get_inline_picture(int idx); 104 105 int ui_add_frame_to_animation(int prev_idx, int next_idx); 106 107 int ui_animate_inline_pictures(vt_term_t *term); 108 109 int ui_load_tmp_picture(ui_display_t *disp, char *file_path, Pixmap *pixmap, PixmapMask *mask, 110 u_int *width, u_int *height); 111 112 void ui_destroy_tmp_picture(ui_display_t *disp, Pixmap pixmap, PixmapMask mask); 113 114 #endif 115 116 #define ui_picture_modifier_is_normal(pic_mod) (ui_picture_modifiers_equal((pic_mod), NULL)) 117 118 #endif 119