Example #1
0
File: panel.c Project: asqz/tint2
void set_panel_background(Panel *p)
{
	if (p->area.pix) XFreePixmap (server.dsp, p->area.pix);
	p->area.pix = XCreatePixmap (server.dsp, server.root_win, p->area.width, p->area.height, server.depth);

	int xoff=0, yoff=0;
	if (panel_horizontal && panel_position & BOTTOM)
		yoff = p->area.height-p->hidden_height;
	else if (!panel_horizontal && panel_position & RIGHT)
		xoff = p->area.width-p->hidden_width;

	if (server.real_transparency) {
		clear_pixmap(p->area.pix, 0, 0, p->area.width, p->area.height);
	}
	else {
		get_root_pixmap();
		// copy background (server.root_pmap) in panel.area.pix
		Window dummy;
		int  x, y;
		XTranslateCoordinates(server.dsp, p->main_win, server.root_win, 0, 0, &x, &y, &dummy);
		if (panel_autohide && p->is_hidden) {
			x -= xoff;
			y -= yoff;
		}
		XSetTSOrigin(server.dsp, server.gc, -x, -y);
		XFillRectangle(server.dsp, p->area.pix, server.gc, 0, 0, p->area.width, p->area.height);
	}

	// draw background panel
	cairo_surface_t *cs;
	cairo_t *c;
	cs = cairo_xlib_surface_create (server.dsp, p->area.pix, server.visual, p->area.width, p->area.height);
	c = cairo_create (cs);
	draw_background(&p->area, c);
	cairo_destroy (c);
	cairo_surface_destroy (cs);

	if (panel_autohide) {
		if (p->hidden_pixmap) XFreePixmap(server.dsp, p->hidden_pixmap);
		p->hidden_pixmap = XCreatePixmap(server.dsp, server.root_win, p->hidden_width, p->hidden_height, server.depth);
		XCopyArea(server.dsp, p->area.pix, p->hidden_pixmap, server.gc, xoff, yoff, p->hidden_width, p->hidden_height, 0, 0);
	}

	// redraw panel's object
	GSList *l0;
	Area *a;
	for (l0 = p->area.list; l0 ; l0 = l0->next) {
		a = l0->data;
		set_redraw(a);
	}
	// reset task 'state_pix'
	int i;
	Taskbar *tskbar;
	for (i=0 ; i < p->nb_desktop ; i++) {
		tskbar = &p->taskbar[i];
		for (l0 = tskbar->area.list; l0 ; l0 = l0->next) {
			set_task_redraw((Task *)l0->data);
		}
	}
}
Example #2
0
File: panel.c Project: o9000/tint2
void panel_clear_background(void *obj)
{
	Panel *p = obj;
	clear_pixmap(p->area.pix, 0, 0, p->area.width, p->area.height);
	if (!server.real_transparency) {
		get_root_pixmap();
		// copy background (server.root_pmap) in panel.area.pix
		Window dummy;
		int x, y;
		XTranslateCoordinates(server.display, p->main_win, server.root_win, 0, 0, &x, &y, &dummy);

		if (panel_autohide && p->is_hidden) {
			int xoff = 0, yoff = 0;
			if (panel_horizontal && panel_position & BOTTOM)
				yoff = p->area.height - p->hidden_height;
			else if (!panel_horizontal && panel_position & RIGHT)
				xoff = p->area.width - p->hidden_width;
			x -= xoff;
			y -= yoff;
		}

		XSetTSOrigin(server.display, server.gc, -x, -y);
		XFillRectangle(server.display, p->area.pix, server.gc, 0, 0, p->area.width, p->area.height);
	}
}
Example #3
0
void update_root_pixmap(Atom prop)
{
	static Atom a_rootpix = None;
	int w = 0;
	int h = 0;
	XID dummy;
	Pixmap pix;

	if (a_rootpix == None)
	{
		a_rootpix = XInternAtom(dpy,"_XROOTPMAP_ID", False);
	}
	XSync(dpy, False);
	if (prop != 0)
	{
		pix = get_root_pixmap(prop);
		if (pix && !XGetGeometry(
			dpy, pix, &dummy, (int *)&dummy, (int *)&dummy,
			(unsigned int *)&w, (unsigned int *)&h,
			(unsigned int *)&dummy, (unsigned int *)&dummy))
		{
			pix = None;
		}
	}
	else
	{
		pix = get_root_pixmap(a_rootpix);
		if (pix && !XGetGeometry(
			dpy, pix, &dummy, (int *)&dummy, (int *)&dummy,
			(unsigned int *)&w, (unsigned int *)&h,
			(unsigned int *)&dummy, (unsigned int *)&dummy))
		{
			pix = None;
		}
	}
	root_pic.pixmap = pix;
	root_pic.width = w;
	root_pic.height = h;
#if 0
	fprintf(stderr,"Get New Root Pixmap: 0x%lx %i,%i\n",
		root_pic.pixmap, w, h);
#endif
}