28char*
_utf8cpy(
char* dst,
const char* src,
size_t sizeDest ) {
30 size_t sizeSrc = strlen(src);
31 while( sizeSrc >= sizeDest ){
32 const char* lastByte = src + sizeSrc;
33 while( lastByte-- > src )
34 if((*lastByte & 0xC0) != 0x80)
36 sizeSrc = lastByte - src;
38 memcpy(dst, src, sizeSrc);
55 int width = metrics.
width;
56 int height = metrics.
height;
62 cairo_rectangle(w->
crb, 0, 0, width, height);
65 cairo_text_extents_t extents;
66 cairo_text_extents_t fextents;
67 cairo_text_extents(w->
crb,
"Ay", &extents);
68 double h = extents.height/2.0;
76 for(;k<filelist->
column;k++) {
90 int pos_y = (filelist->
item_height*((double)a+1.0))+3.0 - h;
91 if (pos_y-h < height) {
103 memset(label,
'\0',
sizeof(
char)*124);
105 cairo_text_extents(w->
crb, ulabel, &extents);
106 if (extents.width > filelist->
item_width-10) {
107 int slen = strlen(ulabel);
108 int len = ((filelist->
item_width-5)/(extents.width/slen));
109 _utf8cpy(label,ulabel, min(slen-4,len-3));
112 strcpy(label, ulabel);
115 cairo_text_extents(w->
crb, label, &fextents);
117 cairo_move_to (w->
crb, pos_x, pos_y);
118 cairo_show_text(w->
crb, label);
119 cairo_new_path (w->
crb);
128 w->
flags &= ~HAS_TOOLTIP;
132 if (k<filelist->column-1 && i<j-1) i++;
144 int height = metrics.
height-2;
147 cairo_push_group (w->
crb);
149 cairo_text_extents_t extents;
150 cairo_text_extents_t fextents;
151 cairo_text_extents(w->
crb,
"Ay", &extents);
152 double h = extents.height/2.0;
160 for(;k<filelist->
column;k++) {
162 if (k<filelist->column-1 && i<j-1) i++;
171 if (stat(filelist->
list_names[i], &sb) == 0 && S_ISDIR(sb.st_mode)) {
181 cairo_paint (w->
crb);
187 cairo_set_operator (w->
crb, CAIRO_OPERATOR_HARD_LIGHT);
188 cairo_paint (w->
crb);
189 cairo_set_operator (w->
crb, CAIRO_OPERATOR_OVER);
192 int pos_y = (filelist->
item_height*((double)a+1.0))+3.0 - h;
193 if (pos_y-h < height) {
205 memset(label,
'\0',
sizeof(
char)*124);
206 cairo_text_extents(w->
crb, basename(filelist->
list_names[i]), &extents);
207 if (extents.width > filelist->
item_width-10) {
208 int slen = strlen(basename(filelist->
list_names[i]));
209 int len = ((filelist->
item_width-5)/(extents.width/slen));
213 strcpy(label,basename(filelist->
list_names[i]));
216 cairo_text_extents(w->
crb, label, &fextents);
218 cairo_move_to (w->
crb, pos_x, pos_y);
219 cairo_show_text(w->
crb, label);
220 cairo_new_path (w->
crb);
226 w->
flags &= ~HAS_TOOLTIP;
230 if (k<filelist->column-1 && i<j-1) i++;
235 cairo_pop_group_to_source (w->
crb);
236 cairo_paint (w->
crb);
237 cairo_push_group (w->
cr);
238 cairo_set_source_surface (w->
cr, w->
buffer,0,0);
241 cairo_pop_group_to_source (w->
cr);
272 int height = metrics.
height;
273 int _items = height/(height/filelist->
item_height);
297 int height = metrics.
height;
298 int _items = height/(height/filelist->
item_height);
300 if (prelight_item > filelist->
list_size-1)
return;
301 if(xbutton->
button == Button4) {
305 }
else if (xbutton->
button == Button5) {
309 }
else if(xbutton->
button == Button1) {
314 }
else if(xbutton->
button == Button3) {
328 int width = metrics.
width;
329 int height = metrics.
height;
331 int x_items = max(1,width/filelist->
column);
332 int _items = h/max(1,(height/filelist->
item_height));
334 if (prelight_item > filelist->
list_size-1)
return;
351 int width = metrics.
width;
352 int height = metrics.
height;
378 int width = metrics.
width;
379 int height = metrics.
height;
381 float slidersize = 1.0;
386 cairo_rectangle(w->
crb, 0,0,width,height);
387 cairo_fill_preserve(w->
crb);
391 cairo_rectangle(w->
crb, 0,((
float)height-
392 ((
float)height*slidersize))*sliderstate,width,((
float)height*slidersize));
evfunc button_release_callback
evfunc key_press_callback
evfunc double_click_callback
Metrics_t - struct to receive window size, position & visibility Pass this struct to os_get_window_...
ViewMultiList_t - struct to hold information for the listview.
cairo_surface_t * folder_scaled
cairo_surface_t * folder_select_scaled
cairo_surface_t * file_scaled
void adj_set_state(Adjustment_t *adj, float state)
adj_set_state - set the current state of the Adjustment_t
void adj_set_value(Adjustment_t *adj, float value)
adj_set_value - set the current value to the Adjustment_t
float adj_get_value(Adjustment_t *adj)
adj_get_value - get the current value of the Adjustment_t
float adj_get_state(Adjustment_t *adj)
adj_get_state - get the current state of the Adjustment_t
void adj_set_scale(Adjustment_t *adj, float value)
adj_set_scale - internal use to scale the pointer movement (0.1 -1.0)
Color_state get_color_state(Widget_t *wid)
get_color_state - get the Color_state to use in relation to the Widget_t state
void use_text_color_scheme(Widget_t *w, Color_state st)
use_text_color_scheme - use text Colors to paint on Widget_t
void use_bg_color_scheme(Widget_t *w, Color_state st)
use_bg_color_scheme - use background Colors to paint on Widget_t
void set_pattern(Widget_t *w, Colors *from, Colors *to, Color_mod mod)
set_pattern - set pattern for the selected Colors
void use_shadow_color_scheme(Widget_t *w, Color_state st)
use_shadow_color_scheme - use shadow Colors to paint on Widget_t
void use_base_color_scheme(Widget_t *w, Color_state st)
use_base_color_scheme - use base Colors to paint on Widget_t
void _multi_list_motion(void *w_, void *xmotion_, void *user_data)
_multi_list_motion - follow mouse pointer to set prelight item
void _multi_list_entry_released(void *w_, void *button_, void *user_data)
_multi_list_entry_released - move listview or set active entry
void _update_view(void *w_)
void _multi_list_entry_double_clicked(void *w_, void *button_, void *user_data)
_multi_list_entry_double_clicke - forward double click from list entry to list view
void _multi_list_key_pressed(void *w_, void *xkey_, void *user_data)
_multi_list_key_pressed - move listview or set active entry
void _draw_multi_listviewslider(void *w_, void *user_data)
_draw_multi_listviewslider - draw a slider on the viewport to indicate the view point
void _leave_multi_list(void *w_, void *user_data)
_leave_multi_list - draw list on pointer leave
void _draw_multi_listview(void *w_, void *user_data)
_draw_multi_listview - draw listview on expose call
void _reconfigure_multi_listview_viewport(void *w_, void *user_data)
_reconfigure_multi_listview_viewport - reconfigure the viewport adjustment on size changes
char * _utf8cpy(char *dst, const char *src, size_t sizeDest)
void _set_multi_listview_viewpoint(void *w_, void *user_data)
_set_multi_listview_viewpoint - move the view_port to position
void _draw_multi_list(void *w_, void *user_data)
_draw_multi_list - draw list on expose call
void _set_multi_listviewport(void *w_, void *user_data)
_set_multi_listviewport - move the view_port to position by listviewslider state