git repos / blockattack-game

blame: source/code/ttfont.cc

normal view · raw

89c4a3a6 sago007 2008-08-29 14:32 1
/*
89c4a3a6 sago007 2008-08-29 14:32 2
Block Attack - Rise of the Blocks, SDL game, besed on Nintendo's Tetris Attack
89c4a3a6 sago007 2008-08-29 14:32 3
Copyright (C) 2008 Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 4
89c4a3a6 sago007 2008-08-29 14:32 5
    This program is free software; you can redistribute it and/or modify
89c4a3a6 sago007 2008-08-29 14:32 6
    it under the terms of the GNU General Public License as published by
89c4a3a6 sago007 2008-08-29 14:32 7
    the Free Software Foundation; either version 2 of the License, or
89c4a3a6 sago007 2008-08-29 14:32 8
    (at your option) any later version.
89c4a3a6 sago007 2008-08-29 14:32 9
89c4a3a6 sago007 2008-08-29 14:32 10
    This program is distributed in the hope that it will be useful,
89c4a3a6 sago007 2008-08-29 14:32 11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
89c4a3a6 sago007 2008-08-29 14:32 12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
89c4a3a6 sago007 2008-08-29 14:32 13
    GNU General Public License for more details.
89c4a3a6 sago007 2008-08-29 14:32 14
89c4a3a6 sago007 2008-08-29 14:32 15
    You should have received a copy of the GNU General Public License
89c4a3a6 sago007 2008-08-29 14:32 16
    along with this program; if not, write to the Free Software
89c4a3a6 sago007 2008-08-29 14:32 17
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
89c4a3a6 sago007 2008-08-29 14:32 18
89c4a3a6 sago007 2008-08-29 14:32 19
    Poul Sander
89c4a3a6 sago007 2008-08-29 14:32 20
    R�vehjvej 36, V. 1111
89c4a3a6 sago007 2008-08-29 14:32 21
    2800 Kgs. Lyngby
89c4a3a6 sago007 2008-08-29 14:32 22
    DENMARK
89c4a3a6 sago007 2008-08-29 14:32 23
    blockattack@poulsander.com
89c4a3a6 sago007 2008-08-29 14:32 24
    http://blockattack.sf.net
89c4a3a6 sago007 2008-08-29 14:32 25
*/
89c4a3a6 sago007 2008-08-29 14:32 26
89c4a3a6 sago007 2008-08-29 14:32 27
#include "ttfont.h"
89c4a3a6 sago007 2008-08-29 14:32 28
78d03b38 sago007 2008-11-13 19:56 29
//extern SDL_Surface *tmp;
78d03b38 sago007 2008-11-13 19:56 30
78d03b38 sago007 2008-11-13 19:56 31
//#define CONVERTA(n) tmp = SDL_DisplayFormatAlpha(n); SDL_FreeSurface(n); n = tmp
78d03b38 sago007 2008-11-13 19:56 32
89c4a3a6 sago007 2008-08-29 14:32 33
TTFont::TTFont()
89c4a3a6 sago007 2008-08-29 14:32 34
{
89c4a3a6 sago007 2008-08-29 14:32 35
    font = NULL;
89c4a3a6 sago007 2008-08-29 14:32 36
    actualInstance = false;
89c4a3a6 sago007 2008-08-29 14:32 37
}
89c4a3a6 sago007 2008-08-29 14:32 38
89c4a3a6 sago007 2008-08-29 14:32 39
int TTFont::count = 0;
89c4a3a6 sago007 2008-08-29 14:32 40
89c4a3a6 sago007 2008-08-29 14:32 41
TTFont::TTFont(TTF_Font *f)
89c4a3a6 sago007 2008-08-29 14:32 42
{
89c4a3a6 sago007 2008-08-29 14:32 43
    if(!(TTF_WasInit()))
89c4a3a6 sago007 2008-08-29 14:32 44
    {
89c4a3a6 sago007 2008-08-29 14:32 45
        //Init TTF for the first time
89c4a3a6 sago007 2008-08-29 14:32 46
        TTF_Init();
89c4a3a6 sago007 2008-08-29 14:32 47
    }
89c4a3a6 sago007 2008-08-29 14:32 48
89c4a3a6 sago007 2008-08-29 14:32 49
    
89c4a3a6 sago007 2008-08-29 14:32 50
    if(f == NULL)
89c4a3a6 sago007 2008-08-29 14:32 51
        cout << "Font was null!" << endl;
89c4a3a6 sago007 2008-08-29 14:32 52
    
89c4a3a6 sago007 2008-08-29 14:32 53
    actualInstance = false; //We have not yet copied to final location
89c4a3a6 sago007 2008-08-29 14:32 54
    font = f;    
89c4a3a6 sago007 2008-08-29 14:32 55
    
89c4a3a6 sago007 2008-08-29 14:32 56
}
89c4a3a6 sago007 2008-08-29 14:32 57
89c4a3a6 sago007 2008-08-29 14:32 58
TTFont::~TTFont()
89c4a3a6 sago007 2008-08-29 14:32 59
{
89c4a3a6 sago007 2008-08-29 14:32 60
    if(!actualInstance)
89c4a3a6 sago007 2008-08-29 14:32 61
        return;
89c4a3a6 sago007 2008-08-29 14:32 62
    
89c4a3a6 sago007 2008-08-29 14:32 63
    cout << "Closing a font" << endl;
89c4a3a6 sago007 2008-08-29 14:32 64
    
89c4a3a6 sago007 2008-08-29 14:32 65
    TTF_CloseFont(font);
89c4a3a6 sago007 2008-08-29 14:32 66
    font = NULL;
89c4a3a6 sago007 2008-08-29 14:32 67
    
89c4a3a6 sago007 2008-08-29 14:32 68
    count--;
89c4a3a6 sago007 2008-08-29 14:32 69
    if(count==0)
89c4a3a6 sago007 2008-08-29 14:32 70
        TTF_Quit();
89c4a3a6 sago007 2008-08-29 14:32 71
}
89c4a3a6 sago007 2008-08-29 14:32 72
89c4a3a6 sago007 2008-08-29 14:32 73
//Copy constructor, you cannot copy an actual instance
89c4a3a6 sago007 2008-08-29 14:32 74
TTFont::TTFont(const TTFont &t)
89c4a3a6 sago007 2008-08-29 14:32 75
{
89c4a3a6 sago007 2008-08-29 14:32 76
    if(t.font == NULL || t.actualInstance)
89c4a3a6 sago007 2008-08-29 14:32 77
    {
89c4a3a6 sago007 2008-08-29 14:32 78
        font = NULL;
89c4a3a6 sago007 2008-08-29 14:32 79
        actualInstance = false;
89c4a3a6 sago007 2008-08-29 14:32 80
    }
89c4a3a6 sago007 2008-08-29 14:32 81
    else
89c4a3a6 sago007 2008-08-29 14:32 82
    {
89c4a3a6 sago007 2008-08-29 14:32 83
        font = t.font;
89c4a3a6 sago007 2008-08-29 14:32 84
        actualInstance = true;
89c4a3a6 sago007 2008-08-29 14:32 85
        count++;
89c4a3a6 sago007 2008-08-29 14:32 86
    }
89c4a3a6 sago007 2008-08-29 14:32 87
}
89c4a3a6 sago007 2008-08-29 14:32 88
89c4a3a6 sago007 2008-08-29 14:32 89
int TTFont::getTextHeight()
89c4a3a6 sago007 2008-08-29 14:32 90
{
89c4a3a6 sago007 2008-08-29 14:32 91
    return TTF_FontHeight(font);
89c4a3a6 sago007 2008-08-29 14:32 92
}
89c4a3a6 sago007 2008-08-29 14:32 93
89c4a3a6 sago007 2008-08-29 14:32 94
int TTFont::getTextWidth(string text)
89c4a3a6 sago007 2008-08-29 14:32 95
{
89c4a3a6 sago007 2008-08-29 14:32 96
    int width = 0;
89c4a3a6 sago007 2008-08-29 14:32 97
    if(TTF_SizeText(font,text.c_str(),&width,NULL)!=0)
89c4a3a6 sago007 2008-08-29 14:32 98
        cout << "Failed to get text width!" << endl;
89c4a3a6 sago007 2008-08-29 14:32 99
    return width;
89c4a3a6 sago007 2008-08-29 14:32 100
}
89c4a3a6 sago007 2008-08-29 14:32 101
89c4a3a6 sago007 2008-08-29 14:32 102
void TTFont::writeText(string text, SDL_Surface *target, int x, int y)
89c4a3a6 sago007 2008-08-29 14:32 103
{
89c4a3a6 sago007 2008-08-29 14:32 104
    SDL_Surface *text_surface;
89c4a3a6 sago007 2008-08-29 14:32 105
    SDL_Color color={255,255,255};
89c4a3a6 sago007 2008-08-29 14:32 106
    if(!(text_surface=TTF_RenderText_Solid(font,text.c_str(), color))) 
89c4a3a6 sago007 2008-08-29 14:32 107
    {
89c4a3a6 sago007 2008-08-29 14:32 108
        cout << "Error writing text: " << TTF_GetError() << endl;
89c4a3a6 sago007 2008-08-29 14:32 109
    }
89c4a3a6 sago007 2008-08-29 14:32 110
    else
89c4a3a6 sago007 2008-08-29 14:32 111
    {
89c4a3a6 sago007 2008-08-29 14:32 112
        SDL_Rect dest;
89c4a3a6 sago007 2008-08-29 14:32 113
        dest.x = x;
89c4a3a6 sago007 2008-08-29 14:32 114
        dest.y = y;
89c4a3a6 sago007 2008-08-29 14:32 115
        SDL_BlitSurface(text_surface,NULL,target,&dest);
89c4a3a6 sago007 2008-08-29 14:32 116
        SDL_FreeSurface(text_surface);
89c4a3a6 sago007 2008-08-29 14:32 117
    }
89c4a3a6 sago007 2008-08-29 14:32 118
}
89c4a3a6 sago007 2008-08-29 14:32 119
1970-01-01 00:00 120