aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfluxgen <fluxgen>2001-12-13 20:43:31 (GMT)
committerfluxgen <fluxgen>2001-12-13 20:43:31 (GMT)
commitc5fdccd430ec5f5624c51e173e45e332401deec8 (patch)
tree217e1332eb8edf1909e920e48b57db8d25f3da3a
parent046d23487290f96cbefe953fb122baae87175318 (diff)
downloadfluxbox_paul-c5fdccd430ec5f5624c51e173e45e332401deec8.zip
fluxbox_paul-c5fdccd430ec5f5624c51e173e45e332401deec8.tar.bz2
Created class Misc and moved all free functions in misc.cc into it
and added strdup. Moved struct FFont from Theme.hh into class Misc and renamed it to struct Font. Changed FontAlignement names to upercase
-rw-r--r--src/misc.cc108
1 files changed, 43 insertions, 65 deletions
diff --git a/src/misc.cc b/src/misc.cc
index 481705c..28a63e3 100644
--- a/src/misc.cc
+++ b/src/misc.cc
@@ -25,42 +25,29 @@
25#include <stdlib.h> 25#include <stdlib.h>
26#include <string.h> 26#include <string.h>
27#include <stdio.h> 27#include <stdio.h>
28#include <iostream>
29#include <X11/Xutil.h>
30using namespace std;
31
32//------- strdup ------------------------
33//TODO: comment this
34//----------------------------------------
35char *Misc::strdup(const char *s) {
36 int l = strlen(s) + 1;
37 char *n = new char[l];
38 strncpy(n, s, l);
39 return n;
40}
28 41
29// ----- start code stealing ----
30 42
31// ---------------------------------------------------------------------- 43// ----------------------------------------------------------------------
32// xvertext, Copyright (c) 1992 Alan Richardson (mppa3@uk.ac.sussex.syma) 44// xvertext, Copyright (c) 1992 Alan Richardson (mppa3@uk.ac.sussex.syma)
33// ---------------------------------------------------------------------- 45// ----------------------------------------------------------------------
34 46
35int xv_errno; //TODO: ?
36
37static char *my_strdup(char *str);
38
39//------- getTabAlignmentString ----------
40//Routine to mimic `strdup()' (some machines don't have it)
41//----------------------------------------
42static char *my_strdup(char *str)
43{
44 char *s;
45
46 if (str == NULL) return NULL;
47
48 s = (char *)malloc((unsigned)(strlen(str)+1));
49 /* this error is highly unlikely ... */
50 if (s == NULL) {
51 fprintf(stderr, "Fatal error: my_strdup(): Couldn't do malloc!\n");
52 exit(1);
53 }
54
55 strcpy(s, str);
56 return s;
57}
58
59//------- XRotLoadFont ------------------- 47//------- XRotLoadFont -------------------
60// Load the rotated version of a given font 48// Load the rotated version of a given font
61//---------------------------------------- 49//----------------------------------------
62XRotFontStruct *XRotLoadFont(Display *dpy, char *fontname, float angle) 50Misc::XRotFontStruct *Misc::XRotLoadFont(Display *dpy, char *fontname, float angle) {
63{
64 char val; 51 char val;
65 XImage *I1, *I2; 52 XImage *I1, *I2;
66 Pixmap canvas; 53 Pixmap canvas;
@@ -97,17 +84,17 @@ XRotFontStruct *XRotLoadFont(Display *dpy, char *fontname, float angle)
97 /* load the font ... */ 84 /* load the font ... */
98 fontstruct = XLoadQueryFont(dpy, fontname); 85 fontstruct = XLoadQueryFont(dpy, fontname);
99 if (fontstruct == NULL) { 86 if (fontstruct == NULL) {
100 xv_errno = XV_NOFONT; 87 cerr<<"Fluxbox::Misc: No font"<<endl;
101 return NULL; 88 return 0;
102 } 89 }
103 90
104 XSetFont(dpy, font_gc, fontstruct->fid); 91 XSetFont(dpy, font_gc, fontstruct->fid);
105 92
106 /* allocate space for rotated font ... */ 93 /* allocate space for rotated font ... */
107 rotfont = (XRotFontStruct *)malloc((unsigned)sizeof(XRotFontStruct)); 94 rotfont = new XRotFontStruct;
108 if (rotfont == NULL) { 95 if (rotfont == 0) {
109 xv_errno = XV_NOMEM; 96 cerr<<"Fluxbox::Misc: out of memory"<<endl;
110 return NULL; 97 return 0;
111 } 98 }
112 99
113 /* determine which characters are defined in font ... */ 100 /* determine which characters are defined in font ... */
@@ -119,7 +106,7 @@ XRotFontStruct *XRotLoadFont(Display *dpy, char *fontname, float angle)
119 if (max_char>126) max_char = 126; 106 if (max_char>126) max_char = 126;
120 107
121 /* some overall font data ... */ 108 /* some overall font data ... */
122 rotfont->name = my_strdup(fontname); 109 rotfont->name = Misc::strdup(fontname);
123 rotfont->dir = dir; 110 rotfont->dir = dir;
124 rotfont->min_char = min_char; 111 rotfont->min_char = min_char;
125 rotfont->max_char = max_char; 112 rotfont->max_char = max_char;
@@ -171,18 +158,14 @@ XRotFontStruct *XRotLoadFont(Display *dpy, char *fontname, float angle)
171 boxlen/2 - descent, text, 1); 158 boxlen/2 - descent, text, 1);
172 159
173 /* reserve memory for first XImage ... */ 160 /* reserve memory for first XImage ... */
174 vertdata = (unsigned char *) malloc((unsigned)(vert_len*vert_h)); 161 vertdata = new unsigned char[vert_len*vert_h]; //(unsigned char *) malloc((unsigned)(vert_len*vert_h));
175 if (vertdata == NULL) { 162
176 xv_errno = XV_NOMEM;
177 return NULL;
178 }
179
180 /* create the XImage ... */ 163 /* create the XImage ... */
181 I1 = XCreateImage(dpy, DefaultVisual(dpy, screen), 1, XYBitmap, 164 I1 = XCreateImage(dpy, DefaultVisual(dpy, screen), 1, XYBitmap,
182 0, (char *)vertdata, vert_w, vert_h, 8, 0); 165 0, (char *)vertdata, vert_w, vert_h, 8, 0);
183 166
184 if (I1 == NULL) { 167 if (I1 == NULL) {
185 xv_errno = XV_NOXIMAGE; 168 cerr<<"Fluxbox::Misc: Cant create ximage."<<endl;
186 return NULL; 169 return NULL;
187 } 170 }
188 171
@@ -209,19 +192,15 @@ XRotFontStruct *XRotLoadFont(Display *dpy, char *fontname, float angle)
209 rotfont->per_char[ichar-32].glyph.bit_h = bit_h; 192 rotfont->per_char[ichar-32].glyph.bit_h = bit_h;
210 193
211 /* reserve memory for the rotated image ... */ 194 /* reserve memory for the rotated image ... */
212 bitdata = (unsigned char *)calloc((unsigned)(bit_h*bit_len), 1); 195 bitdata = new unsigned char[bit_h*bit_len]; //(unsigned char *)calloc((unsigned)(bit_h*bit_len), 1);
213 if (bitdata == NULL) {
214 xv_errno = XV_NOMEM;
215 return NULL;
216 }
217 196
218 /* create the image ... */ 197 /* create the image ... */
219 I2 = XCreateImage(dpy, DefaultVisual(dpy, screen), 1, XYBitmap, 0, 198 I2 = XCreateImage(dpy, DefaultVisual(dpy, screen), 1, XYBitmap, 0,
220 (char *)bitdata, bit_w, bit_h, 8, 0); 199 (char *)bitdata, bit_w, bit_h, 8, 0);
221 200
222 if (I2 == NULL) { 201 if (I2 == NULL) {
223 xv_errno = XV_NOXIMAGE; 202 cerr<<"Font::Misc: Cant create ximage!"<<endl;
224 return NULL; 203 return 0;
225 } 204 }
226 205
227 I2->byte_order = I2->bitmap_bit_order = MSBFirst; 206 I2->byte_order = I2->bitmap_bit_order = MSBFirst;
@@ -275,27 +254,27 @@ XRotFontStruct *XRotLoadFont(Display *dpy, char *fontname, float angle)
275// Free the resources associated with a 254// Free the resources associated with a
276// rotated font 255// rotated font
277//---------------------------------------- 256//----------------------------------------
278void XRotUnloadFont(Display *dpy, XRotFontStruct *rotfont) 257void Misc::XRotUnloadFont(Display *dpy, XRotFontStruct *rotfont)
279{ 258{
280 int ichar; 259 int ichar;
281 260
282 if (rotfont->dir == 0) 261 if (rotfont->dir == 0)
283 XFreeFont(dpy, rotfont->xfontstruct); 262 XFreeFont(dpy, rotfont->xfontstruct);
284 else { 263 else {
285 /* loop through each character, freeing its pixmap ... */ 264 /* loop through each character, freeing its pixmap ... */
286 for (ichar = rotfont->min_char-32; ichar <= rotfont->max_char-32; 265 for (ichar = rotfont->min_char-32; ichar <= rotfont->max_char-32;
287 ichar++) 266 ichar++)
288 XFreePixmap(dpy, rotfont->per_char[ichar].glyph.bm); 267 XFreePixmap(dpy, rotfont->per_char[ichar].glyph.bm);
289 } 268 }
290 /* rotfont should never be referenced again ... */ 269
291 free((char *)rotfont->name); 270 delete rotfont->name;
292 free((char *)rotfont); 271 delete rotfont;
293} 272}
294 273
295//------- XRotTextWidth ------------------ 274//------- XRotTextWidth ------------------
296// Returns the width of a rotated string 275// Returns the width of a rotated string
297//---------------------------------------- 276//----------------------------------------
298unsigned int XRotTextWidth(XRotFontStruct *rotfont, char *str, int len) 277unsigned int Misc::XRotTextWidth(XRotFontStruct *rotfont, char *str, int len)
299{ 278{
300 int i, width = 0, ichar; 279 int i, width = 0, ichar;
301 280
@@ -320,7 +299,7 @@ unsigned int XRotTextWidth(XRotFontStruct *rotfont, char *str, int len)
320//------- XRotDrawString ----------------- 299//------- XRotDrawString -----------------
321// A front end to XRotDrawString : mimics XDrawString 300// A front end to XRotDrawString : mimics XDrawString
322//---------------------------------------- 301//----------------------------------------
323void XRotDrawString(Display *dpy, XRotFontStruct *rotfont, Drawable drawable, 302void Misc::XRotDrawString(Display *dpy, XRotFontStruct *rotfont, Drawable drawable,
324 GC gc, int x, int y, char *str, int len) 303 GC gc, int x, int y, char *str, int len)
325{ 304{
326 static GC my_gc = 0; 305 static GC my_gc = 0;
@@ -385,9 +364,8 @@ void XRotDrawString(Display *dpy, XRotFontStruct *rotfont, Drawable drawable,
385 } 364 }
386} 365}
387 366
388// ---- stop code stealing ----
389 367
390void DrawString(Display *display, Window w, GC gc, FFont *font, 368void Misc::DrawString(Display *display, Window w, GC gc, Misc::Font *font,
391 unsigned int text_w, unsigned int size_w, 369 unsigned int text_w, unsigned int size_w,
392 unsigned int bevel_w, char *text) { 370 unsigned int bevel_w, char *text) {
393//Draw title string 371//Draw title string
@@ -414,11 +392,11 @@ void DrawString(Display *display, Window w, GC gc, FFont *font,
414 } 392 }
415 393
416 switch (font->justify) { 394 switch (font->justify) {
417 case FFont::Right: 395 case Misc::Font::RIGHT:
418 dx += size_w - l; 396 dx += size_w - l;
419 break; 397 break;
420 398
421 case FFont::Center: 399 case Misc::Font::CENTER:
422 dx += (size_w - l) / 2; 400 dx += (size_w - l) / 2;
423 break; 401 break;
424 default: 402 default:
@@ -442,7 +420,7 @@ void DrawString(Display *display, Window w, GC gc, FFont *font,
442} 420}
443 421
444 422
445void DrawRotString(Display *display, Window w, GC gc, XRotFontStruct *font, 423void Misc::DrawRotString(Display *display, Window w, GC gc, XRotFontStruct *font,
446 unsigned int align, unsigned int text_w, 424 unsigned int align, unsigned int text_w,
447 unsigned int size_w, unsigned int size_h, 425 unsigned int size_w, unsigned int size_h,
448 unsigned int bevel_w, char *text) { 426 unsigned int bevel_w, char *text) {
@@ -462,11 +440,11 @@ void DrawRotString(Display *display, Window w, GC gc, XRotFontStruct *font,
462 } 440 }
463 } 441 }
464 442
465 if (align == FFont::Right) 443 if (align == Misc::Font::RIGHT)
466 size_h = l; 444 size_h = l;
467 else if (align == FFont::Center) 445 else if (align == Misc::Font::CENTER)
468 size_h = (size_h + l) / 2; 446 size_h = (size_h + l) / 2;
469 else 447 else //LEFT
470 size_h -= (dx * 4); 448 size_h -= (dx * 4);
471 449
472 // To get it in the "center" of the tab 450 // To get it in the "center" of the tab