void XImlib2Image::configure() { x = iconParent->getX(); y = iconParent->getY(); DesktopIconConfig * dIconConfig = dynamic_cast<DesktopIconConfig *>(iconConfig); DesktopConfig * dConfig = dynamic_cast<DesktopConfig *>(config); transparency = dConfig->getTransparency(); width = dIconConfig->getWidth(); height = dIconConfig->getHeight(); glowing = false; glowChange = true; colorMod = imlib_create_color_modifier(); fillStyle = dIconConfig->getFillStyle(); XDesktopContainer * xContainer = dynamic_cast<XDesktopContainer *>(container); rootWindow = xContainer->getRootWindow(); widthOfScreen = xContainer->widthOfScreen(); heightOfScreen = xContainer->heightOfScreen(); display = xContainer->getDisplay(); visual = imlib_context_get_visual(); cmap = imlib_context_get_colormap(); screen = DefaultScreen(display); depth = DefaultDepth(display,screen); }
void XImlib2Image::repaint() { XDesktopContainer * xContainer = dynamic_cast<XDesktopContainer *>(container); Imlib_Image cropImage = xContainer->bg->createCropImage(x, y, width, height, width, height); imlib_context_set_dither(1); imlib_context_set_blend(1); //automatically blend image and background imlib_context_set_dither_mask(0); imlib_context_set_image(cropImage); imlib_blend_image_onto_image(image, 1, 0, 0, width, height, 0, 0, width, height); imlib_image_set_has_alpha(1); imlib_context_set_anti_alias(1); //smoother scaling imlib_context_set_blend(0); imlib_context_set_drawable(window); imlib_render_image_on_drawable_at_size(0, 0, width, height); imlib_free_image(); imlib_context_set_drawable(xContainer->getRootWindow()); }
void XImlib2Caption::draw() { XDesktopContainer * xContainer = dynamic_cast<XDesktopContainer *>(AbstractImage::container); XIconWithShadow * sIcon = dynamic_cast<XIconWithShadow *>(AbstractImage::iconParent); Display * display = xContainer->getDisplay(); int fX, fY; setXY(fX, fY); Imlib_Image cropImage = xContainer->bg->createCropImage(fX, fY, width, height, width, height); imlib_context_set_image(cropImage); imlib_context_set_drawable(window); imlib_render_image_on_drawable(0, 0); Pixmap shapeMask; imlib_render_pixmaps_for_whole_image (&pixmap, &shapeMask); XSetWindowBackgroundPixmap (display, window, pixmap); imlib_free_image(); imlib_context_set_drawable(xContainer->getRootWindow()); imlib_context_set_image(xContainer->bg->spareRoot); // if the icon shadow is enabled and the shadow is visible underneath the // text window if (sIcon && //TODO Fix this sIcon->getShadowX() > fX - sIcon->getWidth() && sIcon->getShadowY() > fY - sIcon->getHeight() && sIcon->getShadowX() < fX + sIcon->getWidth() && sIcon->getShadowY() < fY + sIcon->getHeight() ) sIcon->renderShadowToImage(pixmap, fX, fY); updateText(); XMoveWindow(display, window, fX, fY ); //apply the buffer to the window XSetFillStyle(display, gc, FillTiled); XSetTile(display, gc, pixmap); XFillRectangle(display, window, gc, 0, 0, width, height); imlib_free_pixmap_and_mask(pixmap); }
void XImlib2Caption::createWindow() { XDesktopContainer * xContainer = dynamic_cast<XDesktopContainer *>(AbstractImage::container); DesktopConfig * dConfig = dynamic_cast<DesktopConfig *>(XImlib2Image::config); XSetWindowAttributes attr; attr.override_redirect = True; attr.cursor = XCreateFontCursor(xContainer->getDisplay(), dConfig->getCursorOver()); attr.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | PropertyChangeMask | ExposureMask; XftTextExtentsUtf8( xContainer->getDisplay(), font, (XftChar8*)text.c_str(), text.length(), &fontInfo ); // fix window extents so shadow text is not cut // TODO: fix window extents if shadow is negative: // Would have to edit x and y of the window width = fontInfo.width + FONTSHIFT; height = font->height; if (shadowOn) { width += shadowX > 0 ? shadowX : 0; height += shadowY > 0 ? shadowY : 0; } window = XCreateWindow( xContainer->getDisplay(), xContainer->getRootWindow(), 0, 0, width, height, 0, CopyFromParent, CopyFromParent, CopyFromParent, CWOverrideRedirect|CWEventMask|CWCursor, &attr ); }
void XImlib2Background::SetMultiImage(Imlib_Image image) { Pixmap pmap = None, mask = None; GC gc; XGCValues gcv; XColor xcolor; int w, h, x, y, widthOfScreen, heightOfScreen, screen, depth; char *bgcolor = NULL; Colormap colormap; Display* display; Window rootWindow; string mode; DesktopConfig * dConfig = dynamic_cast<DesktopConfig *>(config); XDesktopContainer * xContainer = dynamic_cast<XDesktopContainer *>(container); display = xContainer->getDisplay(); rootWindow = xContainer->getRootWindow(); screen = DefaultScreen(display); depth = DefaultDepth(display, screen); colormap = DefaultColormap(display, screen); widthOfScreen = xContainer->widthOfScreen(); heightOfScreen = xContainer->heightOfScreen(); mode = dConfig->getModeBackground(); pixmap = XCreatePixmap(display, rootWindow , widthOfScreen, heightOfScreen, depth); string color = dConfig->getColorBackground(); if(color != "None"){ gcv.foreground = gcv.background = BlackPixel(display, screen); bgcolor = (char*)dConfig->getColorBackground().c_str(); if (bgcolor && XParseColor(display, colormap , bgcolor, &xcolor) && XAllocColor(display, colormap, &xcolor)) { gcv.foreground = gcv.background = xcolor.pixel; } } gc = XCreateGC(display, pixmap, (GCForeground | GCBackground), &gcv); if(image){ imlib_context_set_image(image); if (mode == "SCALE") { w = widthOfScreen; h = heightOfScreen; } else if (mode == "MIRROR") { w = imlib_image_get_width() * 2; h = imlib_image_get_height() * 2; } else if (mode == "FIT") { double x_ratio, y_ratio; x_ratio = ((double) widthOfScreen) / ((double) imlib_image_get_width()); y_ratio = ((double) heightOfScreen) / ((double) imlib_image_get_height()); if (x_ratio > y_ratio) { x_ratio = y_ratio; } w = (int) (imlib_image_get_width() * x_ratio); h = (int) (imlib_image_get_height() * x_ratio); } else { w = imlib_image_get_width(); h = imlib_image_get_height(); } if (mode == "SCALE") { XFillRectangle(display, pixmap, gc, 0, 0, w, h); } if (mode == "CENTER" || mode == "FIT") { XFillRectangle(display, pixmap, gc, 0, 0, widthOfScreen, heightOfScreen); x = (widthOfScreen - w) >> 1; y = (heightOfScreen - h) >> 1; } else {