summaryrefslogtreecommitdiffstats
path: root/kpacman/bitfont.cpp
blob: 91b4baaffc7c2eeb904501f80aab9b666d86cbc6 (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
#include "bitfont.h"

Bitfont::Bitfont(TQString fontname, uchar firstChar, uchar lastChar)
{
    if (!fontname.isEmpty())
        font.load(fontname);
    if (font.width() == font.height()) {
        fontWidth = fontHeight = font.width() / 16;
        fontFirstChar = 1;
        fontLastChar = 255;
    } else {
        fontWidth = font.width()/(lastChar-firstChar+1);
        fontHeight = font.height();
        fontFirstChar = firstChar;
        fontLastChar = lastChar;
    }
}

TQRect Bitfont::rect(TQString str)
{
    return TQRect(0, 0, str.length()*fontWidth, fontHeight);
}

TQPixmap Bitfont::text(TQString str, TQColor fg, TQColor bg)
{
    TQPixmap FG(str.length()*fontWidth, fontHeight);
    TQBitmap MASK(str.length()*fontWidth, fontHeight, TRUE);

    const uchar *s = (const uchar *) str.data();
    for (uint i = 0; i < str.length(); i++) {
        if (font.width() == font.height())
            bitBlt(&MASK, i*fontWidth, 0, &font,
                   (*s%16)*fontWidth, (*s/16)*fontWidth, fontWidth, fontHeight);
        else
            if (*s >= fontFirstChar && *s <= fontLastChar)
                bitBlt(&MASK, i*fontWidth, 0, &font,
                       (*s-fontFirstChar)*fontWidth, 0, fontWidth, fontHeight);         
        s++;
    }

    FG.fill(fg);
    FG.setMask(MASK);

    if (bg.isValid()) {
        TQPixmap BG(str.length()*fontWidth, fontHeight);
        BG.fill(bg);
        bitBlt(&BG, 0, 0, &FG);
        return BG;
    } else
        return FG;
}

uchar Bitfont::firstChar()
{
    return fontFirstChar;
}

uchar Bitfont::lastChar()
{
    return fontLastChar;
}

int Bitfont::width()
{
    return fontWidth;
}

int Bitfont::height()
{
    return fontHeight;
}