+const char *NAME = "xftlsfonts";
+const char *VERSION = "1.0";
+
+#ifdef HAVE_CONFIG_H
+#include "../config.h"
+#endif // HAVE_CONFIG_H
+
+#ifndef XFT
+#include <iostream>
+
+int main(int, char **) {
+ cout << NAME << " version " << VERSION << endl;
+ cout << "Copyright (c) 2002, Ben Jansens <ben@orodu.net>" << endl;
+ cout << endl;
+ cout << "Openbox was built without support for Xft fonts. This utility must"
+ << endl;
+ cout << "must be built with Xft support in order to function." << endl;
+}
+#else // XFT
extern "C" {
#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>
#include <string>
#include <vector>
-const char *NAME = "xftlsfonts";
-const char *VERSION = "1.0";
-
using std::string;
using std::cout;
using std::endl;
int main(int argc, char **argv) {
- if (argc > 1) {
+ if (argc > 1)
for (int i = 1; i < argc; ++i)
if (string(argv[i]) == "-help" ||
string(argv[i]) == "--help" ||
cout << NAME << " version " << VERSION << endl;
cout << "Copyright (c) 2002, Ben Jansens <ben@orodu.net>" << endl;
cout << endl;
+ cout << "Usage: " << argv[0] << " [options]" << endl;
+ cout << " -style Show possible styles for each font" << endl;
+ cout << " -slant Show the slant for each font" << endl;
+ cout << " -weight Show the weight for each font" << endl;
+ cout << " -file Show which files contain each font" << endl;
+ cout << endl;
return 1;
}
- }
Display *display = XOpenDisplay(NULL);
+ if (! display) {
+ cout << "Failed to open connection to X display\n";
+ return 2;
+ }
+
+ XftObjectSet *obj = XftObjectSetCreate();
+ if (! obj) {
+ cout << "Failed to create an XftObjectSet\n";
+ return 2;
+ }
- XftFontSet *set = XftListFonts(display, DefaultScreen(display),
- 0, XFT_FAMILY, 0);
+ XftObjectSetAdd(obj, XFT_FAMILY);
- cout << "Found " << set->nfont << " fonts:" << endl;
+ if (argc > 1)
+ for (int i = 1; i < argc; ++i) {
+ if (string(argv[i]) == "-style") XftObjectSetAdd(obj, XFT_STYLE);
+ else if (string(argv[i]) == "-file") XftObjectSetAdd(obj, XFT_FILE);
+ else if (string(argv[i]) == "-slant") XftObjectSetAdd(obj, XFT_SLANT);
+ else if (string(argv[i]) == "-weight") XftObjectSetAdd(obj, XFT_WEIGHT);
+ }
+
+ XftPattern *pat = XftPatternCreate();
+ if (! pat) {
+ cout << "Failed to create an XftPattern\n";
+ exit(2);
+ }
+
+ XftFontSet *set = XftListFontsPatternObjects(display, DefaultScreen(display),
+ pat, obj);
+ if (! set) {
+ cout << "Failed to find a matching XftFontSet\n";
+ exit(2);
+ }
+
+ XFree(pat);
+ XFree(obj);
for (int i = 0; i < set->nfont; ++i) {
for (int e = 0; e < set->fonts[i]->num; ++e) {
cout << endl;
}
}
+
+ cout << endl << "Found " << set->nfont << " matches." << endl;
XFree(set);
XCloseDisplay(display);
return 0;
}
+#endif // XFT
+