aboutsummaryrefslogtreecommitdiff
path: root/src/XFontImp.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/XFontImp.cc')
-rw-r--r--src/XFontImp.cc70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/XFontImp.cc b/src/XFontImp.cc
new file mode 100644
index 0000000..9a57cc7
--- /dev/null
+++ b/src/XFontImp.cc
@@ -0,0 +1,70 @@
1// XFontImp.cc for FbTk fluxbox toolkit
2// Copyright (c) 2002 Henrik Kinnunen (fluxgen@linuxmail.org)
3//
4// Permission is hereby granted, free of charge, to any person obtaining a
5// copy of this software and associated documentation files (the "Software"),
6// to deal in the Software without restriction, including without limitation
7// the rights to use, copy, modify, merge, publish, distribute, sublicense,
8// and/or sell copies of the Software, and to permit persons to whom the
9// Software is furnished to do so, subject to the following conditions:
10//
11// The above copyright notice and this permission notice shall be included in
12// all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE.
21
22// $Id: XFontImp.cc,v 1.1 2002/10/13 22:22:14 fluxgen Exp $
23
24#include "XFontImp.hh"
25#include "BaseDisplay.hh"
26
27#include <iostream>
28using namespace std;
29
30XFontImp::XFontImp(const char *fontname):m_fontstruct(0) {
31 if (fontname != 0)
32 load(fontname);
33}
34
35XFontImp::~XFontImp() {
36 if (m_fontstruct != 0)
37 XFreeFont(BaseDisplay::getXDisplay(), m_fontstruct);
38}
39
40bool XFontImp::load(const std::string &fontname) {
41 XFontStruct *font = XLoadQueryFont(BaseDisplay::getXDisplay(), fontname.c_str());
42 if (font == 0)
43 return false;
44 if (m_fontstruct != 0) // free old font struct, if any
45 XFreeFont(BaseDisplay::getXDisplay(), m_fontstruct);
46
47 m_fontstruct = font; //set new font
48 return true;
49}
50
51void XFontImp::drawText(Drawable w, int screen, GC gc, const char *text, size_t len, int x, int y) const {
52 if (m_fontstruct == 0)
53 return;
54 Display *disp = BaseDisplay::getXDisplay();
55 XSetFont(disp, gc, m_fontstruct->fid);
56 XDrawString(disp, w, gc, x, y, text, len);
57}
58
59unsigned int XFontImp::textWidth(const char * const text, unsigned int size) const {
60 if (m_fontstruct == 0)
61 return 0;
62 return XTextWidth(m_fontstruct, text, size);
63}
64
65unsigned int XFontImp::height() const {
66 if (m_fontstruct == 0)
67 return 0;
68
69 return m_fontstruct->ascent + m_fontstruct->descent;
70}