#include "Slot.hpp" #include "Toolkit.hpp" #include "Core.hpp" #include #include #include #include #include #include using namespace std; using namespace net::lliurex::llxdo; EmptySlot::EmptySlot() { width=235; height=110; srf_empty=Core::GetCore()->surfaces["empty"]; srf_add=Core::GetCore()->surfaces["add"]; type = LLXDO_SLOT_EMPTY; } void EmptySlot::Draw(cairo_t * cairo) { if(mouse_over) { cairo_set_source_surface(cairo,srf_add,x,y); } else { cairo_set_source_surface(cairo,srf_empty,x,y); } cairo_paint(cairo); } vector EmptySlot::Serialize() { vector ret={"type=0","name=\"empty\""}; return ret; } SlotDesktop::SlotDesktop(GDesktopAppInfo * app_info) { bool is_banner=false; this->app_info=app_info; type = LLXDO_SLOT_DESKTOP; width=235; height=110; /* creating surface */ srf_normal=cairo_image_surface_create(CAIRO_FORMAT_ARGB32,width,height); cairo_t * cairo = cairo_create(srf_normal); cairo_pattern_t *pat; pat = cairo_pattern_create_linear (0, 0,0 , height); cairo_pattern_add_color_stop_rgb(pat, 0,0.72,0.72,0.72); cairo_pattern_add_color_stop_rgb(pat, 1,0.83,0.83,0.83); cairo_set_source (cairo, pat); cairo_rectangle(cairo,0,0,width,height); cairo_fill(cairo); cairo_pattern_destroy (pat); GIcon * icon = g_app_info_get_icon((GAppInfo*)app_info); cout<<"icon: "<surfaces.find(g_icon_to_string(icon))!=Core::GetCore()->surfaces.end()) { cairo_set_source_surface(cairo,Core::GetCore()->surfaces[g_icon_to_string(icon)],0,0); cairo_paint(cairo); is_banner=true; } if(is_banner) { cairo_destroy(cairo); return; } GdkPixbuf * pixbuf = gtk_icon_theme_load_icon( gtk_icon_theme_get_default(),g_icon_to_string(icon),64,GTK_ICON_LOOKUP_FORCE_SVG,NULL); if(GDK_IS_PIXBUF(pixbuf)) { gdk_cairo_set_source_pixbuf(cairo,pixbuf,235-64-5,23); cairo_paint(cairo); } const char * name = g_app_info_get_name((GAppInfo*)app_info); PangoLayout * layout = pango_cairo_create_layout(cairo); PangoFontDescription * font; font = pango_font_description_from_string("Ubuntu Bold 12"); pango_layout_set_width(layout,156*PANGO_SCALE); pango_layout_set_height(layout,100*PANGO_SCALE); pango_layout_set_font_description(layout, font); pango_layout_set_text(layout, name, -1); pango_cairo_update_layout(cairo,layout); int tw,th; pango_layout_get_pixel_size(layout,&tw,&th); cairo_move_to(cairo,1+83-(tw/2),1+55-(th/2)); toolkit::set_source_rgb_ub(cairo,12,12,12); pango_cairo_show_layout(cairo,layout); cairo_move_to(cairo,83-(tw/2),55-(th/2)); toolkit::set_source_rgb_ub(cairo,240,240,240); pango_cairo_show_layout(cairo,layout); pango_font_description_free(font); g_object_unref(layout); cairo_destroy(cairo); } void SlotDesktop::Draw(cairo_t * cairo) { cairo_set_source_surface(cairo,srf_normal,x,y); cairo_paint(cairo); if(mouse_over) { if(mouse_press) { toolkit::set_source_rgb_ub(cairo,255,180,30); } else { toolkit::set_source_rgb_ub(cairo,45,45,45); } cairo_rectangle(cairo,x,y,width,height); cairo_stroke(cairo); } } vector SlotDesktop::Serialize() { vector ret={"type=1","name=\"SlotDesktop\""}; stringstream ss; ss<<"x="<