summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/FontControl.h
blob: 563e1a83c2ef7c89d98a77a0f91156c76c8d4f0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#ifndef __FONTCONTROL_H
#define __FONTCONTROL_H

#include <qfontmetrics.h>
#include "StyleConsts.h"

class FontControl
{
    int * m_fontsizes;
    int m_size, g_size;
    QString m_fontname;
    QString m_fixedfontname;
    int m_maxsize;
    bool m_hasCourier;
    int m_leading, m_extraspace;
    unsigned char m_basesize;
    bool m_fixgraphics;
 public:
    void FixGraphics(bool _b)
      {
	m_fixgraphics = _b;
      }
    bool FixGraphics()
      {
	return m_fixgraphics;
      }
    void setBaseSize(unsigned char _s) { m_basesize = _s; }
    unsigned char getBaseSize() { return m_basesize; }
    int gzoom();
    FontControl(QString n = "helvetica", int size = 10)
	:
      m_fontsizes(NULL), m_hasCourier(false), m_leading(0), m_extraspace(0), m_fixgraphics(true)
    {
	ChangeFont(n, size);
    }
    ~FontControl()
	{
	    if (m_fontsizes != NULL) delete [] m_fontsizes;
	}
    void hasCourier(bool _b, const QString& _nm)
	{
	    m_hasCourier = _b;
	    m_fixedfontname = _nm;
	}
    QString& fixedfontname() { return m_fixedfontname; }
    bool hasCourier() { return m_hasCourier; }
    QString name() { return m_fontname; }
    int currentsize() { return (m_fontsizes == NULL) ? 0 : m_fontsizes[m_size]; }
    int getsize(const CStyle& size)
	{
	  return getsize(size.getFontSize());
	}
    int getsize(int _offset)
      {
	    int tgt = m_size+_offset;
	    if (tgt < 0)
	    {
		tgt = 0;
	    }
	    if (tgt >= m_maxsize)
	    {
		tgt = m_maxsize - 1;
	    }
	    return tgt >= 0 ? m_fontsizes[tgt] : 12;
	}
    int ascent()
    {
	QFont f(name(), currentsize());
	QFontMetrics fm(f);
	return fm.ascent();
    }
    int ascent(const CStyle& ch)
    {
	QFont f(name(), getsize(ch));
	QFontMetrics fm(f);
	return fm.ascent();
    }
    int descent()
    {
	QFont f(name(), currentsize());
	QFontMetrics fm(f);
	return fm.descent();
    }
    int descent(const CStyle& ch)
    {
	QFont f(name(), getsize(ch));
	QFontMetrics fm(f);
	return fm.descent();
    }
    int lineSpacing()
    {
	QFont f(name(), currentsize());
	QFontMetrics fm(f);
	return fm.lineSpacing();
    }
    int lineSpacing(const CStyle& ch)
    {
	QFont f(name(), getsize(ch));
	QFontMetrics fm(f);
	return fm.lineSpacing();
    }
    bool decreasesize()
	{
	  if (m_fixgraphics)
	    {
	      if (--m_size < 0)
		{
		  m_size = 0;
		  return false;
		}
	      g_size = m_size;
	    }
	  else
	    {
	      if (g_size-- == m_size)
		{
		  if (--m_size < 0)
		    {
		      m_size = 0;
		    }
		}
	    }
//	    qDebug("Font:%d Graphics:%d", m_size, g_size);
	    return true;
	}
    bool increasesize()
	{
	  if (m_fixgraphics)
	    {
	      if (++m_size >= m_maxsize)
		{
		  m_size = m_maxsize - 1;
		  return false;
		}
	      g_size = m_size;
	    }
	  else
	    {
	      if (g_size++ == m_size)
		{
		  if (++m_size >= m_maxsize)
		    {
		      m_size = m_maxsize - 1;
		    }
		}
	    }
	    return true;
	}
    bool ChangeFont(QString& n)
	{
	    return ChangeFont(n, currentsize());
	}
    bool ChangeFont(QString& n, int tgt);
    void setlead(int _lead)
	{
	    m_leading = _lead;
	}
    int getlead()
	{
	    return m_leading;
	}
    void setextraspace(int _lead)
	{
	    m_extraspace = _lead;
	}
    int getextraspace()
	{
	    return m_extraspace;
	}
};

#endif