dockapps/wmframepic/src/draw_text.c
2017-08-20 16:12:14 +01:00

91 lines
2.2 KiB
C

#include "draw_text.h"
static Display *display;
static GC gc;
static Pixmap draw_area_pixmap, font_pixmap, display_text_pixmap;
static Window icon_window;
static void dockapp_copyarea(Pixmap src, Pixmap dist, int x_src, int y_src, int w,
int h, int x_dist, int y_dist);
static int offset_w, offset_h;
void init_variables(Display *g_display, GC g_gc, Window g_icon_window, int g_offset_w, int g_offset_h, Pixmap **background) {
display = g_display;
gc = g_gc;
icon_window = g_icon_window;
offset_h = g_offset_h;
offset_w = g_offset_w;
XpmCreatePixmapFromData(display, icon_window, display_text_xpm, &display_text_pixmap, NULL, NULL);
XpmCreatePixmapFromData(display, icon_window, font_xpm, &font_pixmap, NULL, NULL);
*background = &display_text_pixmap;
}
void restore_background() {
XpmCreatePixmapFromData(display, icon_window, display_text_xpm, &display_text_pixmap, NULL, NULL);
}
void flush_background() {
XCopyArea(display, display_text_pixmap, icon_window, gc, 0, 0, 64, 64, offset_w, offset_h);
XFlush(display);
}
void dockapp_copyarea(Pixmap src, Pixmap dist, int x_src, int y_src, int w,
int h, int x_dist, int y_dist) {
XCopyArea(display, src, dist, gc, x_src, y_src, w, h, x_dist, y_dist);
//XCopyArea(display, src, text_window, gc, x_src, y_src, w, h, x_dist, y_dist);
}
void draw_text(char *text, int dx, int dy, Bool digit) {
int ax, ay = 1, bx, len, i;
char tmptext[255] = "";
len = strlen(text);
bx = 4;
/*
for (i = 0; i < len; i++) {
digit = (!isalpha(text[i])) ? True : False;
}
*/
if (digit) {
if (len == 4)
dx -= 6;
strcat(tmptext, text);
if (len == 3)
strcat(tmptext, text);
if (len == 2) {
tmptext[0] = 0x20;
tmptext[1] = text[0];
tmptext[2] = text[1];
len++;
}
if (len == 1) {
tmptext[0] = ' ';
tmptext[1] = ' ';
tmptext[2] = text[0];
len += 2;
}
} else {
strcpy(tmptext, text);
}
for (i = 0; i < len; i++) {
if (isalpha(tmptext[i])) {
ax = ((tolower(tmptext[i]) - 97) * 6) + 1;
ay = 1;
} else {
ax = ((tmptext[i] - 33) * 6) + 1;
ay = 10;
}
/* Space */
if (tmptext[i] == 0x20)
ax = 79;
/* Draw Text */
dockapp_copyarea(font_pixmap, display_text_pixmap, ax, ay, 6, 8, dx, dy);
dx += 6;
}
}