fixed bug with "task on all desktop" (issue 39), fixed memory corruption

git-svn-id: http://tint2.googlecode.com/svn/trunk@26 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
lorthiois@bbsoft.fr
2009-01-18 22:12:41 +00:00
parent 067f07625e
commit d818e66097
15 changed files with 177 additions and 74 deletions

View File

@@ -23,11 +23,10 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <pango/pangocairo.h>
#include "window.h"
#include "server.h"
#include "area.h"
#include "server.h"
void refresh (Area *a)
@@ -69,7 +68,7 @@ void draw (Area *a, int active)
//printf("begin draw area\n");
if (*pmap) XFreePixmap (server.dsp, *pmap);
*pmap = server_create_pixmap (a->width, a->height);
*pmap = XCreatePixmap (server.dsp, server.root_win, a->width, a->height, server.depth);
// add layer of root pixmap
XCopyArea (server.dsp, server.pmap, *pmap, server.gc, a->posx, a->posy, a->width, a->height, 0, 0);
@@ -186,3 +185,24 @@ void free_area (Area *a)
}
}
void draw_rect(cairo_t *c, double x, double y, double w, double h, double r)
{
if (r > 0.0) {
double c1 = 0.55228475 * r;
cairo_move_to(c, x+r, y);
cairo_rel_line_to(c, w-2*r, 0);
cairo_rel_curve_to(c, c1, 0.0, r, c1, r, r);
cairo_rel_line_to(c, 0, h-2*r);
cairo_rel_curve_to(c, 0.0, c1, c1-r, r, -r, r);
cairo_rel_line_to (c, -w +2*r, 0);
cairo_rel_curve_to (c, -c1, 0, -r, -c1, -r, -r);
cairo_rel_line_to (c, 0, -h + 2 * r);
cairo_rel_curve_to (c, 0, -c1, r - c1, -r, r, -r);
}
else
cairo_rectangle(c, x, y, w, h);
}

View File

@@ -30,10 +30,10 @@
#ifndef AREA_H
#define AREA_H
#include <glib.h>
#include <X11/Xlib.h>
#include <pango/pangocairo.h>
#include "common.h"
#include <cairo.h>
#include <cairo-xlib.h>
typedef struct
@@ -101,5 +101,8 @@ void remove_area (Area *a);
void add_area (Area *a);
void free_area (Area *a);
// draw rounded rectangle
void draw_rect(cairo_t *c, double x, double y, double w, double h, double r);
#endif

View File

@@ -24,7 +24,10 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Imlib2.h>
#include <cairo.h>
#include <cairo-xlib.h>
#include "common.h"
#include "window.h"
@@ -217,31 +220,12 @@ long *get_best_icon (long *data, int icon_count, int num, int *iw, int *ih, int
}
void draw_rect(cairo_t *c, double x, double y, double w, double h, double r)
{
if (r > 0.0) {
double c1 = 0.55228475 * r;
cairo_move_to(c, x+r, y);
cairo_rel_line_to(c, w-2*r, 0);
cairo_rel_curve_to(c, c1, 0.0, r, c1, r, r);
cairo_rel_line_to(c, 0, h-2*r);
cairo_rel_curve_to(c, 0.0, c1, c1-r, r, -r, r);
cairo_rel_line_to (c, -w +2*r, 0);
cairo_rel_curve_to (c, -c1, 0, -r, -c1, -r, -r);
cairo_rel_line_to (c, 0, -h + 2 * r);
cairo_rel_curve_to (c, 0, -c1, r - c1, -r, r, -r);
}
else
cairo_rectangle(c, x, y, w, h);
}
void get_text_size(PangoFontDescription *font, int *height_ink, int *height, int panel_height, char *text, int len)
{
PangoRectangle rect_ink, rect;
Pixmap pmap = server_create_pixmap (panel_height, panel_height);
Pixmap pmap = XCreatePixmap (server.dsp, server.root_win, panel_height, panel_height, server.depth);
cairo_surface_t *cs = cairo_xlib_surface_create (server.dsp, pmap, server.visual, panel_height, panel_height);
cairo_t *c = cairo_create (cs);

View File

@@ -9,8 +9,6 @@
#ifndef WINDOW_H
#define WINDOW_H
#include <cairo.h>
#include <cairo-xlib.h>
#include <pango/pangocairo.h>
@@ -37,9 +35,6 @@ void windows_set_desktop (Window win, int desktop);
int window_get_monitor (Window win);
Window window_get_active ();
// draw rounded rectangle
void draw_rect(cairo_t *c, double x, double y, double w, double h, double r);
void get_text_size(PangoFontDescription *font, int *height_ink, int *height, int panel_height, char *text, int len);