mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-31 19:12:32 +01:00
To ease transition from XLFD fontnames to fontconfig fontnames setstyle
now converts all *Font keys in the style files before merging them with G/D/WindowMaker and (vice-versa) getstyle converts the keys from G/D/WindowMaker before it does anything else whether its stdout printing or themepacks. enabling quick theme conversions to new font system.
This commit is contained in:
123
util/setstyle.c
123
util/setstyle.c
@@ -37,15 +37,17 @@
|
||||
|
||||
#define MAX_OPTIONS 128
|
||||
|
||||
char *default_font = "sans:pixelsize=12";
|
||||
|
||||
char *FontOptions[] = {
|
||||
"IconTitleFont",
|
||||
"ClipTitleFont",
|
||||
"DisplayFont",
|
||||
"LargeDisplayFont",
|
||||
"MenuTextFont",
|
||||
"MenuTitleFont",
|
||||
"WindowTitleFont",
|
||||
NULL
|
||||
"ClipTitleFont",
|
||||
"DisplayFont",
|
||||
"LargeDisplayFont",
|
||||
"MenuTextFont",
|
||||
"MenuTitleFont",
|
||||
"WindowTitleFont",
|
||||
NULL
|
||||
};
|
||||
|
||||
char *CursorOptions[] = {
|
||||
@@ -78,7 +80,91 @@ Display *dpy;
|
||||
|
||||
WMPropList *readBlackBoxStyle(char *path);
|
||||
|
||||
char*
|
||||
capitalize(char *element)
|
||||
{
|
||||
unsigned int first = 1;
|
||||
char *p;
|
||||
char *b;
|
||||
b = element;
|
||||
for (p = b; *p != 0; p++) {
|
||||
if (isalpha(*p) && first) {
|
||||
first = 0;
|
||||
*p = toupper(*p);
|
||||
} else if (*p == '-' || *p == ' ') {
|
||||
first = 1;
|
||||
}
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
char*
|
||||
getElementFromXLFD(const char *xlfd, int index)
|
||||
{
|
||||
const char *p = xlfd;
|
||||
while (*p != 0) {
|
||||
if (*p == '-' && --index == 0) {
|
||||
const char *end = strchr(p + 1, '-');
|
||||
char *buf;
|
||||
size_t len;
|
||||
if (end == 0) end = p + strlen(p);
|
||||
len = end - (p + 1);
|
||||
buf = wmalloc(len);
|
||||
memcpy(buf, p + 1, len);
|
||||
buf[len] = 0;
|
||||
return buf;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
return "*";
|
||||
}
|
||||
|
||||
char*
|
||||
xlfdToFc(char *xlfd)
|
||||
{
|
||||
char *Fcname = NULL;
|
||||
|
||||
char *family = getElementFromXLFD(xlfd, 2);
|
||||
char *size = getElementFromXLFD(xlfd, 7);
|
||||
char *weight = getElementFromXLFD(xlfd, 3);
|
||||
char *slant = getElementFromXLFD(xlfd, 4);
|
||||
|
||||
if (strcmp(family, "*") != 0) {
|
||||
Fcname = wstrconcat(Fcname, capitalize(family));
|
||||
}
|
||||
if (strcmp(size, "*") != 0) {
|
||||
Fcname = wstrconcat(Fcname, ":pixelsize=");
|
||||
Fcname = wstrconcat(Fcname, size);
|
||||
}
|
||||
if (strcmp(weight, "*") != 0) {
|
||||
Fcname = wstrconcat(Fcname, ":style=");
|
||||
Fcname = wstrconcat(Fcname, capitalize(weight));
|
||||
}
|
||||
if (strcmp(slant, "*") != 0) {
|
||||
if (strcmp(slant, "i") == 0) {
|
||||
Fcname = wstrconcat(Fcname, ":slant=");
|
||||
Fcname = wstrconcat(Fcname, "Italic");
|
||||
} else if (strcmp(slant, "o") == 0) {
|
||||
Fcname = wstrconcat(Fcname, ":slant=");
|
||||
Fcname = wstrconcat(Fcname, "Oblique");
|
||||
} else if (strcmp(slant, "ri") == 0) {
|
||||
Fcname = wstrconcat(Fcname, ":slant=");
|
||||
Fcname = wstrconcat(Fcname, "Rev Italic");
|
||||
} else if (strcmp(slant, "ro") == 0) {
|
||||
Fcname = wstrconcat(Fcname, ":slant=");
|
||||
Fcname = wstrconcat(Fcname, "Rev Oblique");
|
||||
}
|
||||
}
|
||||
if (!Fcname)
|
||||
Fcname = wstrdup(default_font);
|
||||
|
||||
wfree(family);
|
||||
wfree(size);
|
||||
wfree(weight);
|
||||
wfree(slant);
|
||||
|
||||
return Fcname;
|
||||
}
|
||||
|
||||
char*
|
||||
defaultsPathForDomain(char *domain)
|
||||
@@ -315,6 +401,29 @@ hackStyle(WMPropList *style)
|
||||
if (found)
|
||||
continue;
|
||||
}
|
||||
for (j = 0; FontOptions[j]!=NULL; j++) {
|
||||
if (strcasecmp(str, FontOptions[j]) == 0) {
|
||||
char *oldfont;
|
||||
WMPropList *value;
|
||||
value = WMGetFromPLDictionary(style, tmp);
|
||||
oldfont = WMGetFromPLString(value);
|
||||
if (oldfont[0] == '-') {
|
||||
if (!strchr(oldfont, ',')) {
|
||||
char *newfont;
|
||||
newfont = xlfdToFc(oldfont);
|
||||
WMPutInPLDictionary(style, tmp, WMCreatePLString(newfont));
|
||||
break;
|
||||
} else {
|
||||
wwarning("fontsets are not supported. replaced with default: %s", default_font);
|
||||
WMPutInPLDictionary(style, tmp,
|
||||
WMCreatePLString(default_font));
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (strcasecmp(str, "IconTitleColor")==0
|
||||
|| strcasecmp(str, "IconTitleBack")==0) {
|
||||
|
||||
Reference in New Issue
Block a user