void main_column_size_changed (DdbListview *listview, int col) { const char *title; int width; int align_right; col_info_t *inf; int minheight; int color_override; GdkColor color; int res = ddb_listview_column_get_info (listview, col, &title, &width, &align_right, &minheight, &color_override, &color, (void **)&inf); if (res == -1) { return; } if (inf->id == DB_COLUMN_ALBUM_ART) { if (listview->scrollpos > 0) { int pos = ddb_listview_get_row_pos (listview, listview->ref_point); gtk_range_set_value (GTK_RANGE (listview->scrollbar), pos - listview->ref_point_offset); } coverart_reset_queue (); ddb_playlist_t *plt = deadbeef->plt_get_curr (); if (plt) { deadbeef->plt_modified (plt); deadbeef->plt_unref (plt); } } }
void search_column_size_changed (DdbListview *listview, int col) { const char *title; int width; int align_right; col_info_t *inf; int minheight; int color_override; GdkColor color; int res = ddb_listview_column_get_info (listview, col, &title, &width, &align_right, &minheight, &color_override, &color, (void **)&inf); if (res == -1) { return; } }
void main_column_size_changed (DdbListview *listview, int col) { const char *title; int width; int align_right; col_info_t *inf; int minheight; int res = ddb_listview_column_get_info (listview, col, &title, &width, &align_right, &minheight, (void **)&inf); if (res == -1) { return; } if (inf->id == DB_COLUMN_ALBUM_ART) { coverart_reset_queue (); } }
void rewrite_column_config (DdbListview *listview, const char *name) { char key[128]; snprintf (key, sizeof (key), "%s.column.", name); deadbeef->conf_remove_items (key); int cnt = ddb_listview_column_get_count (listview); for (int i = 0; i < cnt; i++) { const char *title; int width; int align_right; col_info_t *info; int minheight; ddb_listview_column_get_info (listview, i, &title, &width, &align_right, &minheight, (void **)&info); write_column_config (name, i, title, width, align_right, info->id, info->format); } }
void main_column_size_changed (DdbListview *listview, int col) { const char *title; int width; int align_right; col_info_t *inf; int minheight; int res = ddb_listview_column_get_info (listview, col, &title, &width, &align_right, &minheight, (void **)&inf); if (res == -1) { return; } if (inf->id == DB_COLUMN_ALBUM_ART) { coverart_reset_queue (); ddb_playlist_t *plt = deadbeef->plt_get_curr (); if (plt) { deadbeef->plt_modified (plt); deadbeef->plt_unref (plt); } } }
void draw_column_data (DdbListview *listview, cairo_t *cr, DdbListviewIter it, DdbListviewIter group_it, int column, int group_y, int x, int y, int width, int height) { const char *ctitle; int cwidth; int calign_right; col_info_t *cinf; int minheight; int res = ddb_listview_column_get_info (listview, column, &ctitle, &cwidth, &calign_right, &minheight, (void **)&cinf); if (res == -1) { return; } DB_playItem_t *playing_track = deadbeef->streamer_get_playing_track (); int theming = !gtkui_override_listview_colors (); if (cinf->id == DB_COLUMN_ALBUM_ART) { if (theming) { #if GTK_CHECK_VERSION(3,0,0) cairo_rectangle (cr, x, y, width, height); cairo_clip (cr); gtk_paint_flat_box (gtk_widget_get_style (theme_treeview), cr, GTK_STATE_NORMAL, GTK_SHADOW_NONE, theme_treeview, "cell_even_ruled", x-1, y, width+2, height); cairo_reset_clip (cr); #else GdkRectangle clip = { .x = x, .y = y, .width = width, .height = height, }; gtk_paint_flat_box (gtk_widget_get_style (theme_treeview), gtk_widget_get_window (listview->list), GTK_STATE_NORMAL, GTK_SHADOW_NONE, &clip, theme_treeview, "cell_even_ruled", x-1, y, width+2, height); #endif } else { GdkColor clr; gtkui_get_listview_even_row_color (&clr); cairo_set_source_rgb (cr, clr.red/65535.f, clr.green/65535.f, clr.blue/65535.f); cairo_rectangle (cr, x, y, width, height); cairo_fill (cr); } int art_width = width - ART_PADDING_HORZ * 2; int art_y = y; // dest y int art_h = height; int sy; // source y if (group_y < ART_PADDING_VERT) { art_y = y - group_y + ART_PADDING_VERT; art_h = height - (art_y - y); sy = group_y; } else { sy = group_y - ART_PADDING_VERT; } if (art_width > 0) { if (group_it) { int h = cwidth - group_y; h = min (height, art_h); const char *album = deadbeef->pl_find_meta (group_it, "album"); const char *artist = deadbeef->pl_find_meta (group_it, "artist"); if (!album || !*album) { album = deadbeef->pl_find_meta (group_it, "title"); } GdkPixbuf *pixbuf = get_cover_art (deadbeef->pl_find_meta (((DB_playItem_t *)group_it), ":URI"), artist, album, art_width); if (pixbuf) { int pw = gdk_pixbuf_get_width (pixbuf); int ph = gdk_pixbuf_get_height (pixbuf); if (sy < ph) { pw = min (art_width, pw); ph -= sy; ph = min (ph, h); gdk_cairo_set_source_pixbuf (cr, pixbuf, (x + ART_PADDING_HORZ)-0, (art_y)-sy); cairo_rectangle (cr, x + ART_PADDING_HORZ, art_y, pw, ph); cairo_fill (cr); } g_object_unref (pixbuf); } } } }
void draw_column_data (DdbListview *listview, cairo_t *cr, DdbListviewIter it, DdbListviewIter group_it, int column, int group_y, int group_height, int group_pinned, int grp_next_y, int x, int y, int width, int height) { const char *ctitle; int cwidth; int calign_right; col_info_t *cinf; int minheight; int res = ddb_listview_column_get_info (listview, column, &ctitle, &cwidth, &calign_right, &minheight, (void **)&cinf); if (res == -1) { return; } DB_playItem_t *playing_track = deadbeef->streamer_get_playing_track (); int theming = !gtkui_override_listview_colors (); if (cinf->id == DB_COLUMN_ALBUM_ART) { if (theming) { #if GTK_CHECK_VERSION(3,0,0) cairo_rectangle (cr, x, y, width, height); cairo_clip (cr); gtk_paint_flat_box (gtk_widget_get_style (theme_treeview), cr, GTK_STATE_NORMAL, GTK_SHADOW_NONE, theme_treeview, "cell_even_ruled", x-1, y, width+2, height); cairo_reset_clip (cr); #else GdkRectangle clip = { .x = x, .y = y, .width = width, .height = height, }; gtk_paint_flat_box (gtk_widget_get_style (theme_treeview), gtk_widget_get_window (listview->list), GTK_STATE_NORMAL, GTK_SHADOW_NONE, &clip, theme_treeview, "cell_even_ruled", x-1, y, width+2, height); #endif } else { GdkColor clr; gtkui_get_listview_even_row_color (&clr); cairo_set_source_rgb (cr, clr.red/65535.f, clr.green/65535.f, clr.blue/65535.f); cairo_rectangle (cr, x, y, width, height); cairo_fill (cr); } int real_art_width = width - ART_PADDING_HORZ * 2; if (real_art_width > 0 && group_it) { const char *album = deadbeef->pl_find_meta (group_it, "album"); const char *artist = deadbeef->pl_find_meta (group_it, "artist"); if (!album || !*album) { album = deadbeef->pl_find_meta (group_it, "title"); } if (listview->new_cover_size != real_art_width) { listview->new_cover_size = real_art_width; if (listview->cover_refresh_timeout_id) { g_source_remove (listview->cover_refresh_timeout_id); listview->cover_refresh_timeout_id = 0; } if (listview->cover_size == -1) { listview->cover_size = real_art_width; } else { if (!listview->cover_refresh_timeout_id) { listview->cover_refresh_timeout_id = g_timeout_add (1000, deferred_cover_load_cb, listview); } } } int art_width = listview->cover_size; int art_y = y; // dest y int art_h = height; int sy; // source y if (group_y < ART_PADDING_VERT) { art_y = y - group_y + ART_PADDING_VERT; art_h = height - (art_y - y); sy = group_y; } else { sy = group_y - ART_PADDING_VERT; } int h = cwidth - group_y; h = min (height, art_h); int hq = 0; GdkPixbuf *pixbuf = get_cover_art_callb (deadbeef->pl_find_meta (((DB_playItem_t *)group_it), ":URI"), artist, album, real_art_width == art_width ? art_width : -1, redraw_playlist_single, listview); if (!pixbuf) { pixbuf = cover_get_default_pixbuf (); } if (pixbuf) { art_width = gdk_pixbuf_get_width (pixbuf); float art_scale = (float)real_art_width / art_width; int pw = real_art_width; int ph; if (gdk_pixbuf_get_width (pixbuf) < gdk_pixbuf_get_height (pixbuf)) { art_scale *= (float)gdk_pixbuf_get_width (pixbuf) / gdk_pixbuf_get_height (pixbuf); } if (group_pinned == 1 && gtkui_groups_pinned) { ph = group_height; } else { ph = pw; } if (sy < ph) { cairo_save (cr); if (group_pinned == 1 && gtkui_groups_pinned) { int ph_real = gdk_pixbuf_get_height (pixbuf); if (grp_next_y <= ph_real * art_scale + listview->grouptitle_height) { cairo_rectangle (cr, x + ART_PADDING_HORZ, grp_next_y - ph_real * art_scale, pw, ph); cairo_translate (cr, (x + ART_PADDING_HORZ)-0, grp_next_y - ph_real * art_scale); } else { cairo_rectangle (cr, x + ART_PADDING_HORZ, listview->grouptitle_height, pw, ph); cairo_translate (cr, (x + ART_PADDING_HORZ)-0, listview->grouptitle_height); } } else { ph -= sy; ph = min (ph, h); cairo_rectangle (cr, x + ART_PADDING_HORZ, art_y, pw, ph); cairo_translate (cr, (x + ART_PADDING_HORZ)-0, art_y - sy); } cairo_scale (cr, art_scale, art_scale); gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0); cairo_pattern_set_filter (cairo_get_source(cr), gtkui_is_default_pixbuf (pixbuf) ? CAIRO_FILTER_GAUSSIAN : CAIRO_FILTER_FAST); cairo_fill (cr); cairo_restore (cr); } g_object_unref (pixbuf); } } }