summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/FontControl.cpp
blob: 08b8c52082fe392a6d39a50e603c09111df916e4 (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
#include <qfontdatabase.h>

#include "FontControl.h"

int FontControl::gzoom()
{
  if (m_fixgraphics)
    {
      return 100;
    }
  else
    {
      int ret;
      if (m_size == g_size)
	{
	  ret = m_fontsizes[m_size]*m_basesize;
	}
      else if (g_size < 0)
	{
	  int f = -g_size;
	  ret = (m_fontsizes[0]*m_basesize) >> (f/2);
	  if (f%2) ret = (2*ret/3);
	}
      else
	{
	  int f = g_size - m_maxsize + 1;
	  ret = (m_fontsizes[m_maxsize-1]*m_basesize) << (f/2);
	  if (f%2) ret = (3*ret/2);
	}
      return ret;
    }
}

bool FontControl::ChangeFont(QString& n, int tgt)
{
    QValueList<int>::Iterator it;
    QFontDatabase fdb;
    QValueList<int> sizes = fdb.pointSizes(n);
    if (sizes.count() == 0)
    {
	return false;
    }
    else
    {
	m_fontname = n;
	m_maxsize = sizes.count();
	if (m_fontsizes != NULL) delete [] m_fontsizes;
	m_fontsizes = new int[m_maxsize];
	uint i = 0;
	uint best = 0;
	for (it = sizes.begin(); it != sizes.end(); it++)
	{
#if defined(OPIE) || !defined(USEQPE)
	    m_fontsizes[i] = (*it);
#else
	    m_fontsizes[i] = (*it)/10;
#endif
	    if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best]))
	    {
		best = i;
	    }
	    i++;
	}
	g_size = m_size = best;
    }
    return true;
}