home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Enigma Amiga Life 110
/
EnigmaAmiga110CD.iso
/
indispensabili
/
utility
/
apdf
/
xpdf-0.80
/
ltk
/
ltkresources.cc
< prev
next >
Wrap
C/C++ Source or Header
|
1998-11-27
|
5KB
|
186 lines
//========================================================================
//
// LTKResources.cc
//
// Copyright 1996 Derek B. Noonburg
//
//========================================================================
#ifdef __GNUC__
#pragma implementation
#endif
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <X11/Xlib.h>
#include <X11/Xresource.h>
#include <X11/Xutil.h>
#include "gtypes.h"
#include "GString.h"
#include "gfile.h"
#include "LTKConfig.h"
#include "LTKMisc.h"
#include "LTKResources.h"
void ltkGetCmdLineResources(XrmDatabase *cmdLineDB, XrmOptionDescRec *opts,
int numOpts, GString *appName,
int *argc, char *argv[]) {
XrmParseCommand(cmdLineDB, opts, numOpts, appName->getCString(),
argc, argv);
}
void ltkGetOtherResources(Display *display,
XrmDatabase cmdLineDB, XrmDatabase *db) {
XrmDatabase db1;
GString *s;
FILE *f;
if (XResourceManagerString(display)) {
db1 = XrmGetStringDatabase(XResourceManagerString(display));
XrmMergeDatabases(db1, db);
} else {
#ifdef VMS
s = new GString("DECW$USER_DEFAULTS:XPDF.DAT");
#else
s = appendToPath(getHomeDir(), ".Xresources");
#endif
if ((f = fopen(s->getCString(), "r"))) {
fclose(f);
db1 = XrmGetFileDatabase(s->getCString());
XrmMergeDatabases(db1, db);
}
delete s;
#ifdef VMS
s = new GString("DECW$USER_DEFAULTS:DECW$XDEFAULTS.DAT");
#else
s = appendToPath(getHomeDir(), ".Xdefaults");
#endif
if ((f = fopen(s->getCString(), "r"))) {
fclose(f);
db1 = XrmGetFileDatabase(s->getCString());
XrmMergeDatabases(db1, db);
}
delete s;
}
XrmMergeDatabases(cmdLineDB, db);
}
GString *ltkGetStringResource(XrmDatabase db, GString *appName,
char *instName, char *def) {
GString *inst = appName->copy()->append(".")->append(instName);
XrmValue val;
char *resType[20];
GString *ret;
if (XrmGetResource(db, inst->getCString(), inst->getCString(),
resType, &val))
ret = new GString(val.addr, val.size);
else
ret = def ? new GString(def) : (GString *)NULL;
delete inst;
return ret;
}
int ltkGetIntResource(XrmDatabase db, GString *appName,
char *instName, int def) {
GString *inst = appName->copy()->append(".")->append(instName);
XrmValue val;
char *resType[20];
char s[20];
int ret, n;
if (XrmGetResource(db, inst->getCString(), inst->getCString(),
resType, &val)) {
n = val.size <= 19 ? val.size : 19;
strncpy(s, val.addr, n);
s[n] = '\0';
ret = atoi(s);
} else {
ret = def;
}
delete inst;
return ret;
}
GBool ltkGetBoolResource(XrmDatabase db, GString *appName,
char *instName, GBool def) {
GString *inst = appName->copy()->append(".")->append(instName);
XrmValue val;
char *resType[20];
char *s;
GBool ret;
if (XrmGetResource(db, inst->getCString(), inst->getCString(),
resType, &val)) {
s = (char *)val.addr;
ret = ((s[0] == 'o' || s[0] == 'O') && (s[1] == 'n' || s[1] == 'N')) ||
((s[0] == 't' || s[0] == 'T') && (s[1] == 'r' || s[1] == 'R') &&
(s[2] == 'u' || s[2] == 'U') && (s[3] == 'e' || s[3] == 'E')) ||
((s[0] == 'y' || s[0] == 'Y') && (s[1] == 'e' || s[1] == 'E') &&
(s[2] == 's' || s[2] == 'S'));
} else {
ret = def;
}
delete inst;
return ret;
}
unsigned long ltkGetColorResource(XrmDatabase db, GString *appName,
char *instName,
Display *display, int screenNum,
char *def1, unsigned long def2,
XColor *xcol) {
GString *name;
XColor xcol1, xcol2;
if (!xcol)
xcol = &xcol1;
name = ltkGetStringResource(db, appName, instName, def1);
if (!XAllocNamedColor(display, DefaultColormap(display, screenNum),
name->getCString(), xcol, &xcol2)) {
ltkError("Couldn't allocate color '%s'", name->getCString());
xcol->pixel = def2;
XQueryColor(display, DefaultColormap(display, screenNum), xcol);
}
delete name;
return xcol->pixel;
}
XFontStruct *ltkGetFontResouce(XrmDatabase db, GString *appName,
char *instName,
Display *display, int screenNum,
char *def) {
GString *name;
XFontStruct *fontStruct;
name = ltkGetStringResource(db, appName, instName, def);
if (!(fontStruct = XLoadQueryFont(display, name->getCString()))) {
ltkError("Unknown font '%s'", name->getCString());
if (!(fontStruct = XLoadQueryFont(display, LTK_DEF_FONT))) {
ltkError("Can't find default font '%s' -- exiting", LTK_DEF_FONT);
exit(1);
}
}
delete name;
return fontStruct;
}
void ltkGetGeometryResource(XrmDatabase db, GString *appName,
char *instName,
Display *display, int screenNum,
int *x, int *y,
Guint *width, Guint *height) {
GString *geom;
int flags;
if ((geom = ltkGetStringResource(db, appName, instName, NULL))) {
flags = XParseGeometry(geom->getCString(), x, y, width, height);
delete geom;
if ((flags & XValue) && (flags & XNegative))
*x = DisplayWidth(display, screenNum) - *x;
if ((flags & YValue) && (flags & YNegative))
*y = DisplayHeight(display, screenNum) - *y;
}
}