summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2002-07-25 04:40:04 +0000
committerDana Jansens <danakj@orodu.net>2002-07-25 04:40:04 +0000
commitfb7b6b37615cafa5d553560d78f931e0003fb6cc (patch)
tree9982df22bfa14b6d72f6239825dd1dd9fcaf97a2
parent97c3b159c2477b337186e6ee14aba2baf0f4933f (diff)
add the xftlsfonts utility
-rw-r--r--util/Makefile.am5
-rw-r--r--util/xftlsfonts.cc93
2 files changed, 97 insertions, 1 deletions
diff --git a/util/Makefile.am b/util/Makefile.am
index 7da2187b..118c56fc 100644
--- a/util/Makefile.am
+++ b/util/Makefile.am
@@ -4,11 +4,13 @@ CPPFLAGS= @CPPFLAGS@ @DEBUG@
SUBDIRS = epist
bin_SCRIPTS = bsetbg
-bin_PROGRAMS = bsetroot
+bin_PROGRAMS = bsetroot xftlsfonts
bsetroot_SOURCES = bsetroot.cc
bsetroot_LDADD = ../src/BaseDisplay.o ../src/Color.o ../src/GCCache.o ../src/Texture.o ../src/Timer.o ../src/Image.o ../src/ImageControl.o ../src/i18n.o ../src/Util.o
+xftlsfonts_SOURCES = xftlsfonts.cc
+
MAINTAINERCLEANFILES = Makefile.in
distclean-local:
@@ -20,3 +22,4 @@ bsetroot.o: bsetroot.cc ../config.h ../src/i18n.hh \
../src/../nls/blackbox-nls.hh ../src/GCCache.hh ../src/BaseDisplay.hh \
../src/Timer.hh ../src/Color.hh ../src/Texture.hh ../src/Util.hh \
bsetroot.hh ../src/Image.hh
+xftlsfonts.o: xftlsfonts.cc
diff --git a/util/xftlsfonts.cc b/util/xftlsfonts.cc
new file mode 100644
index 00000000..1e0075ed
--- /dev/null
+++ b/util/xftlsfonts.cc
@@ -0,0 +1,93 @@
+extern "C" {
+#include <X11/Xlib.h>
+#include <X11/Xft/Xft.h>
+}
+
+#include <iostream>
+#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) {
+ for (int i = 1; i < argc; ++i)
+ if (string(argv[i]) == "-help" ||
+ string(argv[i]) == "--help" ||
+ string(argv[i]) == "-version" ||
+ string(argv[i]) == "--version") {
+ cout << NAME << " version " << VERSION << endl;
+ cout << "Copyright (c) 2002, Ben Jansens <ben@orodu.net>" << endl;
+ cout << endl;
+ return 1;
+ }
+ }
+
+ Display *display = XOpenDisplay(NULL);
+
+ XftFontSet *set = XftListFonts(display, DefaultScreen(display),
+ 0, XFT_FAMILY, 0);
+
+ cout << "Found " << set->nfont << " fonts:" << endl;
+
+ for (int i = 0; i < set->nfont; ++i) {
+ for (int e = 0; e < set->fonts[i]->num; ++e) {
+// if (string(set->fonts[i]->elts[e].object) != "family")
+// continue; // i just want font family names
+
+ if (e > 0)
+ cout << " "; // indent after the first element
+ cout << set->fonts[i]->elts[e].object << ": ";
+
+ XftValueList *vallist = set->fonts[i]->elts[e].values;
+ bool f = true;
+ do {
+ if (f)
+ f = false;
+ else
+ cout << ", ";
+
+ XftValue val = vallist->value;
+ switch (val.type) {
+ case XftTypeVoid:
+ cout << "(void)";
+ break;
+
+ case XftTypeInteger:
+ cout << val.u.i;
+ break;
+
+ case XftTypeDouble:
+ cout << val.u.d;
+ break;
+
+ case XftTypeString:
+ cout << val.u.s;
+ break;
+
+ case XftTypeBool:
+ cout << val.u.b;
+ break;
+
+ case XftTypeMatrix:
+ cout << "xx(" << val.u.m->xx << ") ";
+ cout << "xy(" << val.u.m->xy << ") ";
+ cout << "yx(" << val.u.m->yx << ") ";
+ cout << "yy(" << val.u.m->yy << ")";
+ break;
+ }
+ } while ((vallist = vallist->next));
+ cout << endl;
+ }
+ }
+
+ XFree(set);
+
+ XCloseDisplay(display);
+ return 0;
+}