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:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user