git repos / blockattack-game

blame: source/code/Libs/NFont.cpp

normal view · raw

078900fe sago007 2015-12-05 15:31 1
/*
078900fe sago007 2015-12-05 15:31 2
NFont v4.0.0: A font class for SDL
078900fe sago007 2015-12-05 15:31 3
by Jonathan Dearborn
078900fe sago007 2015-12-05 15:31 4
Dedicated to the memory of Florian Hufsky
078900fe sago007 2015-12-05 15:31 5
078900fe sago007 2015-12-05 15:31 6
License:
078900fe sago007 2015-12-05 15:31 7
    The short:
078900fe sago007 2015-12-05 15:31 8
    Use it however you'd like, but keep the copyright and license notice 
078900fe sago007 2015-12-05 15:31 9
    whenever these files or parts of them are distributed in uncompiled form.
078900fe sago007 2015-12-05 15:31 10
    
078900fe sago007 2015-12-05 15:31 11
    The long:
078900fe sago007 2015-12-05 15:31 12
Copyright (c) 2014 Jonathan Dearborn
078900fe sago007 2015-12-05 15:31 13
078900fe sago007 2015-12-05 15:31 14
Permission is hereby granted, free of charge, to any person obtaining a copy
078900fe sago007 2015-12-05 15:31 15
of this software and associated documentation files (the "Software"), to deal
078900fe sago007 2015-12-05 15:31 16
in the Software without restriction, including without limitation the rights
078900fe sago007 2015-12-05 15:31 17
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
078900fe sago007 2015-12-05 15:31 18
copies of the Software, and to permit persons to whom the Software is
078900fe sago007 2015-12-05 15:31 19
furnished to do so, subject to the following conditions:
078900fe sago007 2015-12-05 15:31 20
078900fe sago007 2015-12-05 15:31 21
The above copyright notice and this permission notice shall be included in
078900fe sago007 2015-12-05 15:31 22
all copies or substantial portions of the Software.
078900fe sago007 2015-12-05 15:31 23
078900fe sago007 2015-12-05 15:31 24
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
078900fe sago007 2015-12-05 15:31 25
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
078900fe sago007 2015-12-05 15:31 26
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
078900fe sago007 2015-12-05 15:31 27
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
078900fe sago007 2015-12-05 15:31 28
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
078900fe sago007 2015-12-05 15:31 29
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
078900fe sago007 2015-12-05 15:31 30
THE SOFTWARE.
078900fe sago007 2015-12-05 15:31 31
*/
078900fe sago007 2015-12-05 15:31 32
078900fe sago007 2015-12-05 15:31 33
#include "NFont.h"
078900fe sago007 2015-12-05 15:31 34
#include "SDL_FontCache.h"
078900fe sago007 2015-12-05 15:31 35
078900fe sago007 2015-12-05 15:31 36
#include <cmath>
078900fe sago007 2015-12-05 15:31 37
#include <cstdio>
078900fe sago007 2015-12-05 15:31 38
#ifndef M_PI
078900fe sago007 2015-12-05 15:31 39
    #define M_PI 3.14159265358979323846
078900fe sago007 2015-12-05 15:31 40
#endif
078900fe sago007 2015-12-05 15:31 41
078900fe sago007 2015-12-05 15:31 42
#include <string>
078900fe sago007 2015-12-05 15:31 43
#include <cstring>
078900fe sago007 2015-12-05 15:31 44
#include <list>
078900fe sago007 2015-12-05 15:31 45
using std::string;
078900fe sago007 2015-12-05 15:31 46
using std::list;
078900fe sago007 2015-12-05 15:31 47
078900fe sago007 2015-12-05 15:31 48
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 49
#define NFont_Target GPU_Target
078900fe sago007 2015-12-05 15:31 50
#define NFont_Image GPU_Image
078900fe sago007 2015-12-05 15:31 51
#define NFont_Log GPU_LogError
078900fe sago007 2015-12-05 15:31 52
#else
078900fe sago007 2015-12-05 15:31 53
#define NFont_Target SDL_Renderer
078900fe sago007 2015-12-05 15:31 54
#define NFont_Image SDL_Texture
078900fe sago007 2015-12-05 15:31 55
#define NFont_Log SDL_Log
078900fe sago007 2015-12-05 15:31 56
#endif
078900fe sago007 2015-12-05 15:31 57
078900fe sago007 2015-12-05 15:31 58
#define MIN(a,b) ((a) < (b)? (a) : (b))
078900fe sago007 2015-12-05 15:31 59
#define MAX(a,b) ((a) > (b)? (a) : (b))
078900fe sago007 2015-12-05 15:31 60
078900fe sago007 2015-12-05 15:31 61
static inline SDL_Surface* createSurface24(Uint32 width, Uint32 height)
078900fe sago007 2015-12-05 15:31 62
{
078900fe sago007 2015-12-05 15:31 63
    #if SDL_BYTEORDER == SDL_BIG_ENDIAN
078900fe sago007 2015-12-05 15:31 64
        return SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 24, 0xFF0000, 0x00FF00, 0x0000FF, 0);
078900fe sago007 2015-12-05 15:31 65
    #else
078900fe sago007 2015-12-05 15:31 66
        return SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 24, 0x0000FF, 0x00FF00, 0xFF0000, 0);
078900fe sago007 2015-12-05 15:31 67
    #endif
078900fe sago007 2015-12-05 15:31 68
}
078900fe sago007 2015-12-05 15:31 69
078900fe sago007 2015-12-05 15:31 70
static inline SDL_Surface* createSurface32(Uint32 width, Uint32 height)
078900fe sago007 2015-12-05 15:31 71
{
078900fe sago007 2015-12-05 15:31 72
    #if SDL_BYTEORDER == SDL_BIG_ENDIAN
078900fe sago007 2015-12-05 15:31 73
        return SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, 0xFF000000, 0x00FF0000, 0x0000FF00, 0x000000FF);
078900fe sago007 2015-12-05 15:31 74
    #else
078900fe sago007 2015-12-05 15:31 75
        return SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000);
078900fe sago007 2015-12-05 15:31 76
    #endif
078900fe sago007 2015-12-05 15:31 77
}
078900fe sago007 2015-12-05 15:31 78
078900fe sago007 2015-12-05 15:31 79
static inline char* copyString(const char* c)
078900fe sago007 2015-12-05 15:31 80
{
078900fe sago007 2015-12-05 15:31 81
    if(c == NULL)
078900fe sago007 2015-12-05 15:31 82
        return NULL;
078900fe sago007 2015-12-05 15:31 83
078900fe sago007 2015-12-05 15:31 84
    char* result = new char[strlen(c)+1];
078900fe sago007 2015-12-05 15:31 85
    strcpy(result, c);
078900fe sago007 2015-12-05 15:31 86
078900fe sago007 2015-12-05 15:31 87
    return result;
078900fe sago007 2015-12-05 15:31 88
}
078900fe sago007 2015-12-05 15:31 89
078900fe sago007 2015-12-05 15:31 90
static inline Uint32 getPixel(SDL_Surface *Surface, int x, int y)
078900fe sago007 2015-12-05 15:31 91
{
078900fe sago007 2015-12-05 15:31 92
    Uint8* bits;
078900fe sago007 2015-12-05 15:31 93
    Uint32 bpp;
078900fe sago007 2015-12-05 15:31 94
078900fe sago007 2015-12-05 15:31 95
    if(x < 0 || x >= Surface->w)
078900fe sago007 2015-12-05 15:31 96
        return 0;  // Best I could do for errors
078900fe sago007 2015-12-05 15:31 97
078900fe sago007 2015-12-05 15:31 98
    bpp = Surface->format->BytesPerPixel;
078900fe sago007 2015-12-05 15:31 99
    bits = ((Uint8*)Surface->pixels) + y*Surface->pitch + x*bpp;
078900fe sago007 2015-12-05 15:31 100
078900fe sago007 2015-12-05 15:31 101
    switch (bpp)
078900fe sago007 2015-12-05 15:31 102
    {
078900fe sago007 2015-12-05 15:31 103
        case 1:
078900fe sago007 2015-12-05 15:31 104
            return *((Uint8*)Surface->pixels + y * Surface->pitch + x);
078900fe sago007 2015-12-05 15:31 105
            break;
078900fe sago007 2015-12-05 15:31 106
        case 2:
078900fe sago007 2015-12-05 15:31 107
            return *((Uint16*)Surface->pixels + y * Surface->pitch/2 + x);
078900fe sago007 2015-12-05 15:31 108
            break;
078900fe sago007 2015-12-05 15:31 109
        case 3:
078900fe sago007 2015-12-05 15:31 110
            // Endian-correct, but slower
078900fe sago007 2015-12-05 15:31 111
            Uint8 r, g, b;
078900fe sago007 2015-12-05 15:31 112
            r = *((bits)+Surface->format->Rshift/8);
078900fe sago007 2015-12-05 15:31 113
            g = *((bits)+Surface->format->Gshift/8);
078900fe sago007 2015-12-05 15:31 114
            b = *((bits)+Surface->format->Bshift/8);
078900fe sago007 2015-12-05 15:31 115
            return SDL_MapRGB(Surface->format, r, g, b);
078900fe sago007 2015-12-05 15:31 116
            break;
078900fe sago007 2015-12-05 15:31 117
        case 4:
078900fe sago007 2015-12-05 15:31 118
            return *((Uint32*)Surface->pixels + y * Surface->pitch/4 + x);
078900fe sago007 2015-12-05 15:31 119
            break;
078900fe sago007 2015-12-05 15:31 120
    }
078900fe sago007 2015-12-05 15:31 121
078900fe sago007 2015-12-05 15:31 122
    return 0;  // FIXME: Handle errors better
078900fe sago007 2015-12-05 15:31 123
}
078900fe sago007 2015-12-05 15:31 124
078900fe sago007 2015-12-05 15:31 125
static inline void setPixel(SDL_Surface* surface, int x, int y, Uint32 color)
078900fe sago007 2015-12-05 15:31 126
{
078900fe sago007 2015-12-05 15:31 127
    int bpp = surface->format->BytesPerPixel;
078900fe sago007 2015-12-05 15:31 128
    Uint8* bits = ((Uint8 *)surface->pixels) + y*surface->pitch + x*bpp;
078900fe sago007 2015-12-05 15:31 129
078900fe sago007 2015-12-05 15:31 130
    /* Set the pixel */
078900fe sago007 2015-12-05 15:31 131
    switch(bpp)
078900fe sago007 2015-12-05 15:31 132
    {
078900fe sago007 2015-12-05 15:31 133
        case 1:
078900fe sago007 2015-12-05 15:31 134
            *((Uint8 *)(bits)) = (Uint8)color;
078900fe sago007 2015-12-05 15:31 135
            break;
078900fe sago007 2015-12-05 15:31 136
        case 2:
078900fe sago007 2015-12-05 15:31 137
            *((Uint16 *)(bits)) = (Uint16)color;
078900fe sago007 2015-12-05 15:31 138
            break;
078900fe sago007 2015-12-05 15:31 139
        case 3: { /* Format/endian independent */
078900fe sago007 2015-12-05 15:31 140
            Uint8 r,g,b;
078900fe sago007 2015-12-05 15:31 141
            r = (color >> surface->format->Rshift) & 0xFF;
078900fe sago007 2015-12-05 15:31 142
            g = (color >> surface->format->Gshift) & 0xFF;
078900fe sago007 2015-12-05 15:31 143
            b = (color >> surface->format->Bshift) & 0xFF;
078900fe sago007 2015-12-05 15:31 144
            *((bits)+surface->format->Rshift/8) = r;
078900fe sago007 2015-12-05 15:31 145
            *((bits)+surface->format->Gshift/8) = g;
078900fe sago007 2015-12-05 15:31 146
            *((bits)+surface->format->Bshift/8) = b;
078900fe sago007 2015-12-05 15:31 147
            }
078900fe sago007 2015-12-05 15:31 148
            break;
078900fe sago007 2015-12-05 15:31 149
        case 4:
078900fe sago007 2015-12-05 15:31 150
            *((Uint32 *)(bits)) = (Uint32)color;
078900fe sago007 2015-12-05 15:31 151
            break;
078900fe sago007 2015-12-05 15:31 152
    }
078900fe sago007 2015-12-05 15:31 153
}
078900fe sago007 2015-12-05 15:31 154
078900fe sago007 2015-12-05 15:31 155
static inline void drawPixel(SDL_Surface *surface, Sint16 x, Sint16 y, Uint32 color, Uint8 alpha)
078900fe sago007 2015-12-05 15:31 156
{
078900fe sago007 2015-12-05 15:31 157
	if(x > surface->clip_rect.x + surface->clip_rect.w || x < surface->clip_rect.x || y > surface->clip_rect.y + surface->clip_rect.h || y < surface->clip_rect.y)
078900fe sago007 2015-12-05 15:31 158
        return;
078900fe sago007 2015-12-05 15:31 159
078900fe sago007 2015-12-05 15:31 160
    switch (surface->format->BytesPerPixel)
078900fe sago007 2015-12-05 15:31 161
    {
078900fe sago007 2015-12-05 15:31 162
        case 1: { /* Assuming 8-bpp */
078900fe sago007 2015-12-05 15:31 163
078900fe sago007 2015-12-05 15:31 164
                Uint8 *pixel = (Uint8 *)surface->pixels + y*surface->pitch + x;
078900fe sago007 2015-12-05 15:31 165
078900fe sago007 2015-12-05 15:31 166
                Uint8 dR = surface->format->palette->colors[*pixel].r;
078900fe sago007 2015-12-05 15:31 167
                Uint8 dG = surface->format->palette->colors[*pixel].g;
078900fe sago007 2015-12-05 15:31 168
                Uint8 dB = surface->format->palette->colors[*pixel].b;
078900fe sago007 2015-12-05 15:31 169
                Uint8 sR = surface->format->palette->colors[color].r;
078900fe sago007 2015-12-05 15:31 170
                Uint8 sG = surface->format->palette->colors[color].g;
078900fe sago007 2015-12-05 15:31 171
                Uint8 sB = surface->format->palette->colors[color].b;
078900fe sago007 2015-12-05 15:31 172
078900fe sago007 2015-12-05 15:31 173
                dR = dR + ((sR-dR)*alpha >> 8);
078900fe sago007 2015-12-05 15:31 174
                dG = dG + ((sG-dG)*alpha >> 8);
078900fe sago007 2015-12-05 15:31 175
                dB = dB + ((sB-dB)*alpha >> 8);
078900fe sago007 2015-12-05 15:31 176
078900fe sago007 2015-12-05 15:31 177
                *pixel = SDL_MapRGB(surface->format, dR, dG, dB);
078900fe sago007 2015-12-05 15:31 178
078900fe sago007 2015-12-05 15:31 179
        }
078900fe sago007 2015-12-05 15:31 180
        break;
078900fe sago007 2015-12-05 15:31 181
078900fe sago007 2015-12-05 15:31 182
        case 2: { /* Probably 15-bpp or 16-bpp */
078900fe sago007 2015-12-05 15:31 183
078900fe sago007 2015-12-05 15:31 184
                Uint32 Rmask = surface->format->Rmask, Gmask = surface->format->Gmask, Bmask = surface->format->Bmask, Amask = surface->format->Amask;
078900fe sago007 2015-12-05 15:31 185
                Uint16 *pixel = (Uint16 *)surface->pixels + y*surface->pitch/2 + x;
078900fe sago007 2015-12-05 15:31 186
                Uint32 dc = *pixel;
078900fe sago007 2015-12-05 15:31 187
                Uint32 R,G,B,A=0;
078900fe sago007 2015-12-05 15:31 188
078900fe sago007 2015-12-05 15:31 189
                R = ((dc & Rmask) + (( (color & Rmask) - (dc & Rmask) ) * alpha >> 8)) & Rmask;
078900fe sago007 2015-12-05 15:31 190
                G = ((dc & Gmask) + (( (color & Gmask) - (dc & Gmask) ) * alpha >> 8)) & Gmask;
078900fe sago007 2015-12-05 15:31 191
                B = ((dc & Bmask) + (( (color & Bmask) - (dc & Bmask) ) * alpha >> 8)) & Bmask;
078900fe sago007 2015-12-05 15:31 192
                if( Amask )
078900fe sago007 2015-12-05 15:31 193
                    A = ((dc & Amask) + (( (color & Amask) - (dc & Amask) ) * alpha >> 8)) & Amask;
078900fe sago007 2015-12-05 15:31 194
078900fe sago007 2015-12-05 15:31 195
                *pixel= R | G | B | A;
078900fe sago007 2015-12-05 15:31 196
078900fe sago007 2015-12-05 15:31 197
        }
078900fe sago007 2015-12-05 15:31 198
        break;
078900fe sago007 2015-12-05 15:31 199
078900fe sago007 2015-12-05 15:31 200
        case 3: { /* Slow 24-bpp mode, usually not used */
078900fe sago007 2015-12-05 15:31 201
            Uint8 *pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3;
078900fe sago007 2015-12-05 15:31 202
            Uint8 rshift8=surface->format->Rshift/8;
078900fe sago007 2015-12-05 15:31 203
            Uint8 gshift8=surface->format->Gshift/8;
078900fe sago007 2015-12-05 15:31 204
            Uint8 bshift8=surface->format->Bshift/8;
078900fe sago007 2015-12-05 15:31 205
            Uint8 ashift8=surface->format->Ashift/8;
078900fe sago007 2015-12-05 15:31 206
078900fe sago007 2015-12-05 15:31 207
078900fe sago007 2015-12-05 15:31 208
078900fe sago007 2015-12-05 15:31 209
                Uint8 dR, dG, dB, dA;
078900fe sago007 2015-12-05 15:31 210
                Uint8 sR, sG, sB, sA;
078900fe sago007 2015-12-05 15:31 211
078900fe sago007 2015-12-05 15:31 212
                pix = (Uint8 *)surface->pixels + y * surface->pitch + x*3;
078900fe sago007 2015-12-05 15:31 213
078900fe sago007 2015-12-05 15:31 214
                dR = *((pix)+rshift8);
078900fe sago007 2015-12-05 15:31 215
                dG = *((pix)+gshift8);
078900fe sago007 2015-12-05 15:31 216
                dB = *((pix)+bshift8);
078900fe sago007 2015-12-05 15:31 217
                dA = *((pix)+ashift8);
078900fe sago007 2015-12-05 15:31 218
078900fe sago007 2015-12-05 15:31 219
                sR = (color>>surface->format->Rshift)&0xff;
078900fe sago007 2015-12-05 15:31 220
                sG = (color>>surface->format->Gshift)&0xff;
078900fe sago007 2015-12-05 15:31 221
                sB = (color>>surface->format->Bshift)&0xff;
078900fe sago007 2015-12-05 15:31 222
                sA = (color>>surface->format->Ashift)&0xff;
078900fe sago007 2015-12-05 15:31 223
078900fe sago007 2015-12-05 15:31 224
                dR = dR + ((sR-dR)*alpha >> 8);
078900fe sago007 2015-12-05 15:31 225
                dG = dG + ((sG-dG)*alpha >> 8);
078900fe sago007 2015-12-05 15:31 226
                dB = dB + ((sB-dB)*alpha >> 8);
078900fe sago007 2015-12-05 15:31 227
                dA = dA + ((sA-dA)*alpha >> 8);
078900fe sago007 2015-12-05 15:31 228
078900fe sago007 2015-12-05 15:31 229
                *((pix)+rshift8) = dR;
078900fe sago007 2015-12-05 15:31 230
                *((pix)+gshift8) = dG;
078900fe sago007 2015-12-05 15:31 231
                *((pix)+bshift8) = dB;
078900fe sago007 2015-12-05 15:31 232
                *((pix)+ashift8) = dA;
078900fe sago007 2015-12-05 15:31 233
078900fe sago007 2015-12-05 15:31 234
        }
078900fe sago007 2015-12-05 15:31 235
        break;
078900fe sago007 2015-12-05 15:31 236
078900fe sago007 2015-12-05 15:31 237
        case 4: { /* Probably 32-bpp */
078900fe sago007 2015-12-05 15:31 238
            Uint32 Rmask = surface->format->Rmask, Gmask = surface->format->Gmask, Bmask = surface->format->Bmask, Amask = surface->format->Amask;
078900fe sago007 2015-12-05 15:31 239
            Uint32* pixel = (Uint32*)surface->pixels + y*surface->pitch/4 + x;
078900fe sago007 2015-12-05 15:31 240
            Uint32 source = *pixel;
078900fe sago007 2015-12-05 15:31 241
            Uint32 R,G,B,A;
078900fe sago007 2015-12-05 15:31 242
            R = color & Rmask;
078900fe sago007 2015-12-05 15:31 243
            G = color & Gmask;
078900fe sago007 2015-12-05 15:31 244
            B = color & Bmask;
078900fe sago007 2015-12-05 15:31 245
            A = 0;  // keep this as 0 to avoid corruption of non-alpha surfaces
078900fe sago007 2015-12-05 15:31 246
078900fe sago007 2015-12-05 15:31 247
            // Blend and keep dest alpha
078900fe sago007 2015-12-05 15:31 248
            if( alpha != SDL_ALPHA_OPAQUE ){
078900fe sago007 2015-12-05 15:31 249
                R = ((source & Rmask) + (( R - (source & Rmask) ) * alpha >> 8)) & Rmask;
078900fe sago007 2015-12-05 15:31 250
                G = ((source & Gmask) + (( G - (source & Gmask) ) * alpha >> 8)) & Gmask;
078900fe sago007 2015-12-05 15:31 251
                B = ((source & Bmask) + (( B - (source & Bmask) ) * alpha >> 8)) & Bmask;
078900fe sago007 2015-12-05 15:31 252
            }
078900fe sago007 2015-12-05 15:31 253
            if(Amask)
078900fe sago007 2015-12-05 15:31 254
                A = (source & Amask);
078900fe sago007 2015-12-05 15:31 255
078900fe sago007 2015-12-05 15:31 256
            *pixel = R | G | B | A;
078900fe sago007 2015-12-05 15:31 257
        }
078900fe sago007 2015-12-05 15:31 258
        break;
078900fe sago007 2015-12-05 15:31 259
    }
078900fe sago007 2015-12-05 15:31 260
}
078900fe sago007 2015-12-05 15:31 261
078900fe sago007 2015-12-05 15:31 262
static inline NFont::Rectf rectUnion(const NFont::Rectf& A, const NFont::Rectf& B)
078900fe sago007 2015-12-05 15:31 263
{
078900fe sago007 2015-12-05 15:31 264
    float x,x2,y,y2;
078900fe sago007 2015-12-05 15:31 265
    x = MIN(A.x, B.x);
078900fe sago007 2015-12-05 15:31 266
    y = MIN(A.y, B.y);
078900fe sago007 2015-12-05 15:31 267
    x2 = MAX(A.x+A.w, B.x+B.w);
078900fe sago007 2015-12-05 15:31 268
    y2 = MAX(A.y+A.h, B.y+B.h);
078900fe sago007 2015-12-05 15:31 269
    NFont::Rectf result(x, y, MAX(0, x2 - x), MAX(0, y2 - y));
078900fe sago007 2015-12-05 15:31 270
    return result;
078900fe sago007 2015-12-05 15:31 271
}
078900fe sago007 2015-12-05 15:31 272
078900fe sago007 2015-12-05 15:31 273
// Adapted from SDL_IntersectRect
078900fe sago007 2015-12-05 15:31 274
static inline NFont::Rectf rectIntersect(const NFont::Rectf& A, const NFont::Rectf& B)
078900fe sago007 2015-12-05 15:31 275
{
078900fe sago007 2015-12-05 15:31 276
    NFont::Rectf result;
078900fe sago007 2015-12-05 15:31 277
	float Amin, Amax, Bmin, Bmax;
078900fe sago007 2015-12-05 15:31 278
078900fe sago007 2015-12-05 15:31 279
	// Horizontal intersection
078900fe sago007 2015-12-05 15:31 280
	Amin = A.x;
078900fe sago007 2015-12-05 15:31 281
	Amax = Amin + A.w;
078900fe sago007 2015-12-05 15:31 282
	Bmin = B.x;
078900fe sago007 2015-12-05 15:31 283
	Bmax = Bmin + B.w;
078900fe sago007 2015-12-05 15:31 284
	if(Bmin > Amin)
078900fe sago007 2015-12-05 15:31 285
	        Amin = Bmin;
078900fe sago007 2015-12-05 15:31 286
	result.x = Amin;
078900fe sago007 2015-12-05 15:31 287
	if(Bmax < Amax)
078900fe sago007 2015-12-05 15:31 288
	        Amax = Bmax;
078900fe sago007 2015-12-05 15:31 289
	result.w = Amax - Amin > 0 ? Amax - Amin : 0;
078900fe sago007 2015-12-05 15:31 290
078900fe sago007 2015-12-05 15:31 291
	// Vertical intersection
078900fe sago007 2015-12-05 15:31 292
	Amin = A.y;
078900fe sago007 2015-12-05 15:31 293
	Amax = Amin + A.h;
078900fe sago007 2015-12-05 15:31 294
	Bmin = B.y;
078900fe sago007 2015-12-05 15:31 295
	Bmax = Bmin + B.h;
078900fe sago007 2015-12-05 15:31 296
	if(Bmin > Amin)
078900fe sago007 2015-12-05 15:31 297
	        Amin = Bmin;
078900fe sago007 2015-12-05 15:31 298
	result.y = Amin;
078900fe sago007 2015-12-05 15:31 299
	if(Bmax < Amax)
078900fe sago007 2015-12-05 15:31 300
	        Amax = Bmax;
078900fe sago007 2015-12-05 15:31 301
	result.h = Amax - Amin > 0 ? Amax - Amin : 0;
078900fe sago007 2015-12-05 15:31 302
078900fe sago007 2015-12-05 15:31 303
	return result;
078900fe sago007 2015-12-05 15:31 304
}
078900fe sago007 2015-12-05 15:31 305
078900fe sago007 2015-12-05 15:31 306
static inline SDL_Surface* copySurface(SDL_Surface *Surface)
078900fe sago007 2015-12-05 15:31 307
{
078900fe sago007 2015-12-05 15:31 308
    return SDL_ConvertSurface(Surface, Surface->format, Surface->flags);
078900fe sago007 2015-12-05 15:31 309
}
078900fe sago007 2015-12-05 15:31 310
078900fe sago007 2015-12-05 15:31 311
078900fe sago007 2015-12-05 15:31 312
078900fe sago007 2015-12-05 15:31 313
078900fe sago007 2015-12-05 15:31 314
078900fe sago007 2015-12-05 15:31 315
078900fe sago007 2015-12-05 15:31 316
078900fe sago007 2015-12-05 15:31 317
078900fe sago007 2015-12-05 15:31 318
078900fe sago007 2015-12-05 15:31 319
NFont::Color::Color()
078900fe sago007 2015-12-05 15:31 320
    : r(0), g(0), b(0), a(255)
078900fe sago007 2015-12-05 15:31 321
{}
078900fe sago007 2015-12-05 15:31 322
NFont::Color::Color(Uint8 r, Uint8 g, Uint8 b)
078900fe sago007 2015-12-05 15:31 323
    : r(r), g(g), b(b), a(255)
078900fe sago007 2015-12-05 15:31 324
{}
078900fe sago007 2015-12-05 15:31 325
NFont::Color::Color(Uint8 r, Uint8 g, Uint8 b, Uint8 a)
078900fe sago007 2015-12-05 15:31 326
    : r(r), g(g), b(b), a(a)
078900fe sago007 2015-12-05 15:31 327
{}
078900fe sago007 2015-12-05 15:31 328
NFont::Color::Color(const SDL_Color& color)
078900fe sago007 2015-12-05 15:31 329
    : r(color.r), g(color.g), b(color.b), a(color.a)
078900fe sago007 2015-12-05 15:31 330
{}
078900fe sago007 2015-12-05 15:31 331
078900fe sago007 2015-12-05 15:31 332
NFont::Color& NFont::Color::rgb(Uint8 R, Uint8 G, Uint8 B)
078900fe sago007 2015-12-05 15:31 333
{
078900fe sago007 2015-12-05 15:31 334
    r = R;
078900fe sago007 2015-12-05 15:31 335
    g = G;
078900fe sago007 2015-12-05 15:31 336
    b = B;
078900fe sago007 2015-12-05 15:31 337
078900fe sago007 2015-12-05 15:31 338
    return *this;
078900fe sago007 2015-12-05 15:31 339
}
078900fe sago007 2015-12-05 15:31 340
078900fe sago007 2015-12-05 15:31 341
NFont::Color& NFont::Color::rgba(Uint8 R, Uint8 G, Uint8 B, Uint8 A)
078900fe sago007 2015-12-05 15:31 342
{
078900fe sago007 2015-12-05 15:31 343
    r = R;
078900fe sago007 2015-12-05 15:31 344
    g = G;
078900fe sago007 2015-12-05 15:31 345
    b = B;
078900fe sago007 2015-12-05 15:31 346
    a = A;
078900fe sago007 2015-12-05 15:31 347
078900fe sago007 2015-12-05 15:31 348
    return *this;
078900fe sago007 2015-12-05 15:31 349
}
078900fe sago007 2015-12-05 15:31 350
078900fe sago007 2015-12-05 15:31 351
NFont::Color& NFont::Color::color(const SDL_Color& color)
078900fe sago007 2015-12-05 15:31 352
{
078900fe sago007 2015-12-05 15:31 353
    r = color.r;
078900fe sago007 2015-12-05 15:31 354
    g = color.g;
078900fe sago007 2015-12-05 15:31 355
    b = color.b;
078900fe sago007 2015-12-05 15:31 356
    a = color.a;
078900fe sago007 2015-12-05 15:31 357
078900fe sago007 2015-12-05 15:31 358
    return *this;
078900fe sago007 2015-12-05 15:31 359
}
078900fe sago007 2015-12-05 15:31 360
078900fe sago007 2015-12-05 15:31 361
SDL_Color NFont::Color::to_SDL_Color() const
078900fe sago007 2015-12-05 15:31 362
{
078900fe sago007 2015-12-05 15:31 363
    SDL_Color c = {r, g, b, a};
078900fe sago007 2015-12-05 15:31 364
    return c;
078900fe sago007 2015-12-05 15:31 365
}
078900fe sago007 2015-12-05 15:31 366
078900fe sago007 2015-12-05 15:31 367
078900fe sago007 2015-12-05 15:31 368
078900fe sago007 2015-12-05 15:31 369
078900fe sago007 2015-12-05 15:31 370
NFont::Rectf::Rectf()
078900fe sago007 2015-12-05 15:31 371
    : x(0), y(0), w(0), h(0)
078900fe sago007 2015-12-05 15:31 372
{}
078900fe sago007 2015-12-05 15:31 373
078900fe sago007 2015-12-05 15:31 374
NFont::Rectf::Rectf(float x, float y)
078900fe sago007 2015-12-05 15:31 375
    : x(x), y(y), w(0), h(0)
078900fe sago007 2015-12-05 15:31 376
{}
078900fe sago007 2015-12-05 15:31 377
078900fe sago007 2015-12-05 15:31 378
NFont::Rectf::Rectf(float x, float y, float w, float h)
078900fe sago007 2015-12-05 15:31 379
    : x(x), y(y), w(w), h(h)
078900fe sago007 2015-12-05 15:31 380
{}
078900fe sago007 2015-12-05 15:31 381
078900fe sago007 2015-12-05 15:31 382
NFont::Rectf::Rectf(const SDL_Rect& rect)
078900fe sago007 2015-12-05 15:31 383
    : x(rect.x), y(rect.y), w(rect.w), h(rect.h)
078900fe sago007 2015-12-05 15:31 384
{}
078900fe sago007 2015-12-05 15:31 385
078900fe sago007 2015-12-05 15:31 386
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 387
NFont::Rectf::Rectf(const GPU_Rect& rect)
078900fe sago007 2015-12-05 15:31 388
    : x(rect.x), y(rect.y), w(rect.w), h(rect.h)
078900fe sago007 2015-12-05 15:31 389
{}
078900fe sago007 2015-12-05 15:31 390
#endif
078900fe sago007 2015-12-05 15:31 391
078900fe sago007 2015-12-05 15:31 392
SDL_Rect NFont::Rectf::to_SDL_Rect() const
078900fe sago007 2015-12-05 15:31 393
{
078900fe sago007 2015-12-05 15:31 394
    SDL_Rect r = {int(x), int(y), int(w), int(h)};
078900fe sago007 2015-12-05 15:31 395
    return r;
078900fe sago007 2015-12-05 15:31 396
}
078900fe sago007 2015-12-05 15:31 397
078900fe sago007 2015-12-05 15:31 398
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 399
GPU_Rect NFont::Rectf::to_GPU_Rect() const
078900fe sago007 2015-12-05 15:31 400
{
078900fe sago007 2015-12-05 15:31 401
    return GPU_MakeRect(x, y, w, h);
078900fe sago007 2015-12-05 15:31 402
}
078900fe sago007 2015-12-05 15:31 403
#endif
078900fe sago007 2015-12-05 15:31 404
078900fe sago007 2015-12-05 15:31 405
078900fe sago007 2015-12-05 15:31 406
078900fe sago007 2015-12-05 15:31 407
078900fe sago007 2015-12-05 15:31 408
078900fe sago007 2015-12-05 15:31 409
078900fe sago007 2015-12-05 15:31 410
078900fe sago007 2015-12-05 15:31 411
char* NFont::buffer = NULL;  // Shared buffer for efficient drawing
078900fe sago007 2015-12-05 15:31 412
078900fe sago007 2015-12-05 15:31 413
078900fe sago007 2015-12-05 15:31 414
// Constructors
078900fe sago007 2015-12-05 15:31 415
NFont::NFont()
078900fe sago007 2015-12-05 15:31 416
{
078900fe sago007 2015-12-05 15:31 417
    init();
078900fe sago007 2015-12-05 15:31 418
}
078900fe sago007 2015-12-05 15:31 419
078900fe sago007 2015-12-05 15:31 420
NFont::NFont(const NFont& font)
078900fe sago007 2015-12-05 15:31 421
{
078900fe sago007 2015-12-05 15:31 422
    init();
078900fe sago007 2015-12-05 15:31 423
    // FIXME: Duplicate font data
078900fe sago007 2015-12-05 15:31 424
}
078900fe sago007 2015-12-05 15:31 425
078900fe sago007 2015-12-05 15:31 426
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 427
NFont::NFont(TTF_Font* ttf)
078900fe sago007 2015-12-05 15:31 428
{
078900fe sago007 2015-12-05 15:31 429
    init();
078900fe sago007 2015-12-05 15:31 430
    load(ttf, FC_GetDefaultColor(font));
078900fe sago007 2015-12-05 15:31 431
}
078900fe sago007 2015-12-05 15:31 432
NFont::NFont(TTF_Font* ttf, const NFont::Color& color)
078900fe sago007 2015-12-05 15:31 433
{
078900fe sago007 2015-12-05 15:31 434
    init();
078900fe sago007 2015-12-05 15:31 435
    load(ttf, color);
078900fe sago007 2015-12-05 15:31 436
}
078900fe sago007 2015-12-05 15:31 437
NFont::NFont(const char* filename_ttf, Uint32 pointSize)
078900fe sago007 2015-12-05 15:31 438
{
078900fe sago007 2015-12-05 15:31 439
    init();
078900fe sago007 2015-12-05 15:31 440
    load(filename_ttf, pointSize);
078900fe sago007 2015-12-05 15:31 441
}
078900fe sago007 2015-12-05 15:31 442
NFont::NFont(const char* filename_ttf, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 443
{
078900fe sago007 2015-12-05 15:31 444
    init();
078900fe sago007 2015-12-05 15:31 445
    load(filename_ttf, pointSize, color, style);
078900fe sago007 2015-12-05 15:31 446
}
078900fe sago007 2015-12-05 15:31 447
NFont::NFont(SDL_RWops* file_rwops_ttf, Uint8 own_rwops, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 448
{
078900fe sago007 2015-12-05 15:31 449
    init();
078900fe sago007 2015-12-05 15:31 450
    load(file_rwops_ttf, own_rwops, pointSize, color, style);
078900fe sago007 2015-12-05 15:31 451
}
078900fe sago007 2015-12-05 15:31 452
078900fe sago007 2015-12-05 15:31 453
#else
078900fe sago007 2015-12-05 15:31 454
078900fe sago007 2015-12-05 15:31 455
NFont::NFont(NFont_Target* renderer, TTF_Font* ttf)
078900fe sago007 2015-12-05 15:31 456
{
078900fe sago007 2015-12-05 15:31 457
    init();
078900fe sago007 2015-12-05 15:31 458
    load(renderer, ttf, FC_GetDefaultColor(font));
078900fe sago007 2015-12-05 15:31 459
}
078900fe sago007 2015-12-05 15:31 460
NFont::NFont(NFont_Target* renderer, TTF_Font* ttf, const NFont::Color& color)
078900fe sago007 2015-12-05 15:31 461
{
078900fe sago007 2015-12-05 15:31 462
    init();
078900fe sago007 2015-12-05 15:31 463
    load(renderer, ttf, color);
078900fe sago007 2015-12-05 15:31 464
}
078900fe sago007 2015-12-05 15:31 465
NFont::NFont(NFont_Target* renderer, const char* filename_ttf, Uint32 pointSize)
078900fe sago007 2015-12-05 15:31 466
{
078900fe sago007 2015-12-05 15:31 467
    init();
078900fe sago007 2015-12-05 15:31 468
    load(renderer, filename_ttf, pointSize);
078900fe sago007 2015-12-05 15:31 469
}
078900fe sago007 2015-12-05 15:31 470
NFont::NFont(NFont_Target* renderer, const char* filename_ttf, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 471
{
078900fe sago007 2015-12-05 15:31 472
    init();
078900fe sago007 2015-12-05 15:31 473
    load(renderer, filename_ttf, pointSize, color, style);
078900fe sago007 2015-12-05 15:31 474
}
078900fe sago007 2015-12-05 15:31 475
NFont::NFont(NFont_Target* renderer, SDL_RWops* file_rwops_ttf, Uint8 own_rwops, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 476
{
078900fe sago007 2015-12-05 15:31 477
    init();
078900fe sago007 2015-12-05 15:31 478
    load(renderer, file_rwops_ttf, own_rwops, pointSize, color, style);
078900fe sago007 2015-12-05 15:31 479
}
078900fe sago007 2015-12-05 15:31 480
#endif
078900fe sago007 2015-12-05 15:31 481
078900fe sago007 2015-12-05 15:31 482
078900fe sago007 2015-12-05 15:31 483
NFont::~NFont()
078900fe sago007 2015-12-05 15:31 484
{
078900fe sago007 2015-12-05 15:31 485
    FC_FreeFont(font);
078900fe sago007 2015-12-05 15:31 486
}
078900fe sago007 2015-12-05 15:31 487
078900fe sago007 2015-12-05 15:31 488
078900fe sago007 2015-12-05 15:31 489
NFont& NFont::operator=(const NFont& font)
078900fe sago007 2015-12-05 15:31 490
{
078900fe sago007 2015-12-05 15:31 491
    // FIXME: Duplicate font data
078900fe sago007 2015-12-05 15:31 492
    return *this;
078900fe sago007 2015-12-05 15:31 493
}
078900fe sago007 2015-12-05 15:31 494
078900fe sago007 2015-12-05 15:31 495
void NFont::init()
078900fe sago007 2015-12-05 15:31 496
{
078900fe sago007 2015-12-05 15:31 497
    font = FC_CreateFont();
078900fe sago007 2015-12-05 15:31 498
    
078900fe sago007 2015-12-05 15:31 499
    if(buffer == NULL)
078900fe sago007 2015-12-05 15:31 500
        buffer = new char[1024];
078900fe sago007 2015-12-05 15:31 501
}
078900fe sago007 2015-12-05 15:31 502
078900fe sago007 2015-12-05 15:31 503
078900fe sago007 2015-12-05 15:31 504
078900fe sago007 2015-12-05 15:31 505
078900fe sago007 2015-12-05 15:31 506
078900fe sago007 2015-12-05 15:31 507
078900fe sago007 2015-12-05 15:31 508
void NFont::setLoadingString(const char* str)
078900fe sago007 2015-12-05 15:31 509
{
078900fe sago007 2015-12-05 15:31 510
    FC_SetLoadingString(font, str);
078900fe sago007 2015-12-05 15:31 511
}
078900fe sago007 2015-12-05 15:31 512
078900fe sago007 2015-12-05 15:31 513
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 514
bool NFont::load(TTF_Font* ttf)
078900fe sago007 2015-12-05 15:31 515
#else
078900fe sago007 2015-12-05 15:31 516
bool NFont::load(NFont_Target* renderer, TTF_Font* ttf)
078900fe sago007 2015-12-05 15:31 517
#endif
078900fe sago007 2015-12-05 15:31 518
{
078900fe sago007 2015-12-05 15:31 519
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 520
    return load(ttf, FC_GetDefaultColor(font));
078900fe sago007 2015-12-05 15:31 521
    #else
078900fe sago007 2015-12-05 15:31 522
    return load(renderer, ttf, Color(0,0,0,255));
078900fe sago007 2015-12-05 15:31 523
    #endif
078900fe sago007 2015-12-05 15:31 524
}
078900fe sago007 2015-12-05 15:31 525
078900fe sago007 2015-12-05 15:31 526
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 527
bool NFont::load(TTF_Font* ttf, const NFont::Color& color)
078900fe sago007 2015-12-05 15:31 528
#else
078900fe sago007 2015-12-05 15:31 529
bool NFont::load(NFont_Target* renderer, TTF_Font* ttf, const NFont::Color& color)
078900fe sago007 2015-12-05 15:31 530
#endif
078900fe sago007 2015-12-05 15:31 531
{
078900fe sago007 2015-12-05 15:31 532
    if(ttf == NULL)
078900fe sago007 2015-12-05 15:31 533
        return false;
078900fe sago007 2015-12-05 15:31 534
    
078900fe sago007 2015-12-05 15:31 535
    #ifndef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 536
    if(renderer == NULL)
078900fe sago007 2015-12-05 15:31 537
        return false;
078900fe sago007 2015-12-05 15:31 538
    #endif
078900fe sago007 2015-12-05 15:31 539
    
078900fe sago007 2015-12-05 15:31 540
    FC_ClearFont(font);
078900fe sago007 2015-12-05 15:31 541
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 542
    return FC_LoadFontFromTTF(font, ttf, color.to_SDL_Color());
078900fe sago007 2015-12-05 15:31 543
    #else
078900fe sago007 2015-12-05 15:31 544
    return FC_LoadFontFromTTF(font, renderer, ttf, color.to_SDL_Color());
078900fe sago007 2015-12-05 15:31 545
    #endif
078900fe sago007 2015-12-05 15:31 546
}
078900fe sago007 2015-12-05 15:31 547
078900fe sago007 2015-12-05 15:31 548
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 549
bool NFont::load(const char* filename_ttf, Uint32 pointSize)
078900fe sago007 2015-12-05 15:31 550
#else
078900fe sago007 2015-12-05 15:31 551
bool NFont::load(NFont_Target* renderer, const char* filename_ttf, Uint32 pointSize)
078900fe sago007 2015-12-05 15:31 552
#endif
078900fe sago007 2015-12-05 15:31 553
{
078900fe sago007 2015-12-05 15:31 554
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 555
    return load(filename_ttf, pointSize, Color(0,0,0,255));
078900fe sago007 2015-12-05 15:31 556
    #else
078900fe sago007 2015-12-05 15:31 557
    return load(renderer, filename_ttf, pointSize, Color(0,0,0,255));
078900fe sago007 2015-12-05 15:31 558
    #endif
078900fe sago007 2015-12-05 15:31 559
}
078900fe sago007 2015-12-05 15:31 560
078900fe sago007 2015-12-05 15:31 561
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 562
bool NFont::load(const char* filename_ttf, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 563
#else
078900fe sago007 2015-12-05 15:31 564
bool NFont::load(NFont_Target* renderer, const char* filename_ttf, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 565
#endif
078900fe sago007 2015-12-05 15:31 566
{
078900fe sago007 2015-12-05 15:31 567
    FC_ClearFont(font);
078900fe sago007 2015-12-05 15:31 568
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 569
    return FC_LoadFont(font, filename_ttf, pointSize, color.to_SDL_Color(), style);
078900fe sago007 2015-12-05 15:31 570
    #else
078900fe sago007 2015-12-05 15:31 571
    return FC_LoadFont(font, renderer, filename_ttf, pointSize, color.to_SDL_Color(), style);
078900fe sago007 2015-12-05 15:31 572
    #endif
078900fe sago007 2015-12-05 15:31 573
}
078900fe sago007 2015-12-05 15:31 574
078900fe sago007 2015-12-05 15:31 575
#ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 576
bool NFont::load(SDL_RWops* file_rwops_ttf, Uint8 own_rwops, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 577
#else
078900fe sago007 2015-12-05 15:31 578
bool NFont::load(NFont_Target* renderer, SDL_RWops* file_rwops_ttf, Uint8 own_rwops, Uint32 pointSize, const NFont::Color& color, int style)
078900fe sago007 2015-12-05 15:31 579
#endif
078900fe sago007 2015-12-05 15:31 580
{
078900fe sago007 2015-12-05 15:31 581
    FC_ClearFont(font);
078900fe sago007 2015-12-05 15:31 582
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 583
    return FC_LoadFont_RW(font, file_rwops_ttf, own_rwops, pointSize, color.to_SDL_Color(), style);
078900fe sago007 2015-12-05 15:31 584
    #else
078900fe sago007 2015-12-05 15:31 585
    return FC_LoadFont_RW(font, renderer, file_rwops_ttf, own_rwops, pointSize, color.to_SDL_Color(), style);
078900fe sago007 2015-12-05 15:31 586
    #endif
078900fe sago007 2015-12-05 15:31 587
}
078900fe sago007 2015-12-05 15:31 588
078900fe sago007 2015-12-05 15:31 589
078900fe sago007 2015-12-05 15:31 590
078900fe sago007 2015-12-05 15:31 591
void NFont::free()
078900fe sago007 2015-12-05 15:31 592
{
078900fe sago007 2015-12-05 15:31 593
    FC_ClearFont(font);
078900fe sago007 2015-12-05 15:31 594
}
078900fe sago007 2015-12-05 15:31 595
078900fe sago007 2015-12-05 15:31 596
078900fe sago007 2015-12-05 15:31 597
078900fe sago007 2015-12-05 15:31 598
NFont::Rectf NFont::draw(NFont_Target* dest, float x, float y, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 599
{
078900fe sago007 2015-12-05 15:31 600
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 601
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 602
078900fe sago007 2015-12-05 15:31 603
    va_list lst;
078900fe sago007 2015-12-05 15:31 604
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 605
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 606
    va_end(lst);
078900fe sago007 2015-12-05 15:31 607
078900fe sago007 2015-12-05 15:31 608
    return FC_Draw(font, dest, x, y, "%s", buffer);
078900fe sago007 2015-12-05 15:31 609
}
078900fe sago007 2015-12-05 15:31 610
078900fe sago007 2015-12-05 15:31 611
/*static int getIndexPastWidth(const char* text, int width, const int* charWidth)
078900fe sago007 2015-12-05 15:31 612
{
078900fe sago007 2015-12-05 15:31 613
    int charnum;
078900fe sago007 2015-12-05 15:31 614
    int len = strlen(text);
078900fe sago007 2015-12-05 15:31 615
078900fe sago007 2015-12-05 15:31 616
    for (int index = 0; index < len; index++)
078900fe sago007 2015-12-05 15:31 617
    {
078900fe sago007 2015-12-05 15:31 618
        char c = text[index];
078900fe sago007 2015-12-05 15:31 619
        charnum = (unsigned char)(c) - 33;
078900fe sago007 2015-12-05 15:31 620
078900fe sago007 2015-12-05 15:31 621
        // spaces and nonprintable characters
078900fe sago007 2015-12-05 15:31 622
        if (c == ' ' || charnum > 222)
078900fe sago007 2015-12-05 15:31 623
        {
078900fe sago007 2015-12-05 15:31 624
            width -= charWidth[0];
078900fe sago007 2015-12-05 15:31 625
        }
078900fe sago007 2015-12-05 15:31 626
        else
078900fe sago007 2015-12-05 15:31 627
            width -= charWidth[charnum];
078900fe sago007 2015-12-05 15:31 628
078900fe sago007 2015-12-05 15:31 629
        if(width <= 0)
078900fe sago007 2015-12-05 15:31 630
            return index;
078900fe sago007 2015-12-05 15:31 631
    }
078900fe sago007 2015-12-05 15:31 632
    return 0;
078900fe sago007 2015-12-05 15:31 633
}*/
078900fe sago007 2015-12-05 15:31 634
078900fe sago007 2015-12-05 15:31 635
078900fe sago007 2015-12-05 15:31 636
078900fe sago007 2015-12-05 15:31 637
/*static list<string> explode(const string& str, char delimiter)
078900fe sago007 2015-12-05 15:31 638
{
078900fe sago007 2015-12-05 15:31 639
    list<string> result;
078900fe sago007 2015-12-05 15:31 640
078900fe sago007 2015-12-05 15:31 641
    size_t oldPos = 0;
078900fe sago007 2015-12-05 15:31 642
    size_t pos = str.find_first_of(delimiter);
078900fe sago007 2015-12-05 15:31 643
    while(pos != string::npos)
078900fe sago007 2015-12-05 15:31 644
    {
078900fe sago007 2015-12-05 15:31 645
        result.push_back(str.substr(oldPos, pos - oldPos));
078900fe sago007 2015-12-05 15:31 646
        oldPos = pos+1;
078900fe sago007 2015-12-05 15:31 647
        pos = str.find_first_of(delimiter, oldPos);
078900fe sago007 2015-12-05 15:31 648
    }
078900fe sago007 2015-12-05 15:31 649
078900fe sago007 2015-12-05 15:31 650
    result.push_back(str.substr(oldPos, string::npos));
078900fe sago007 2015-12-05 15:31 651
078900fe sago007 2015-12-05 15:31 652
    return result;
078900fe sago007 2015-12-05 15:31 653
}*/
078900fe sago007 2015-12-05 15:31 654
078900fe sago007 2015-12-05 15:31 655
NFont::Rectf NFont::drawBox(NFont_Target* dest, const Rectf& box, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 656
{
078900fe sago007 2015-12-05 15:31 657
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 658
        return Rectf(box.x, box.y, 0, 0);
078900fe sago007 2015-12-05 15:31 659
078900fe sago007 2015-12-05 15:31 660
    va_list lst;
078900fe sago007 2015-12-05 15:31 661
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 662
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 663
    va_end(lst);
078900fe sago007 2015-12-05 15:31 664
    
078900fe sago007 2015-12-05 15:31 665
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 666
    return FC_DrawBox(font, dest, box.to_GPU_Rect(), "%s", buffer);
078900fe sago007 2015-12-05 15:31 667
    #else
078900fe sago007 2015-12-05 15:31 668
    return FC_DrawBox(font, dest, box.to_SDL_Rect(), "%s", buffer);
078900fe sago007 2015-12-05 15:31 669
    #endif
078900fe sago007 2015-12-05 15:31 670
}
078900fe sago007 2015-12-05 15:31 671
078900fe sago007 2015-12-05 15:31 672
static FC_AlignEnum translate_enum_NFont_to_FC(NFont::AlignEnum align)
078900fe sago007 2015-12-05 15:31 673
{
078900fe sago007 2015-12-05 15:31 674
    switch(align)
078900fe sago007 2015-12-05 15:31 675
    {
078900fe sago007 2015-12-05 15:31 676
    case NFont::LEFT:
078900fe sago007 2015-12-05 15:31 677
        return FC_ALIGN_LEFT;
078900fe sago007 2015-12-05 15:31 678
    case NFont::CENTER:
078900fe sago007 2015-12-05 15:31 679
        return FC_ALIGN_CENTER;
078900fe sago007 2015-12-05 15:31 680
    case NFont::RIGHT:
078900fe sago007 2015-12-05 15:31 681
        return FC_ALIGN_RIGHT;
078900fe sago007 2015-12-05 15:31 682
    default:
078900fe sago007 2015-12-05 15:31 683
        return FC_ALIGN_LEFT;
078900fe sago007 2015-12-05 15:31 684
    }
078900fe sago007 2015-12-05 15:31 685
}
078900fe sago007 2015-12-05 15:31 686
078900fe sago007 2015-12-05 15:31 687
NFont::Rectf NFont::drawBox(NFont_Target* dest, const Rectf& box, AlignEnum align, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 688
{
078900fe sago007 2015-12-05 15:31 689
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 690
        return Rectf(box.x, box.y, 0, 0);
078900fe sago007 2015-12-05 15:31 691
078900fe sago007 2015-12-05 15:31 692
    va_list lst;
078900fe sago007 2015-12-05 15:31 693
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 694
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 695
    va_end(lst);
078900fe sago007 2015-12-05 15:31 696
    
078900fe sago007 2015-12-05 15:31 697
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 698
    return FC_DrawBoxAlign(font, dest, box.to_GPU_Rect(), translate_enum_NFont_to_FC(align), "%s", buffer);
078900fe sago007 2015-12-05 15:31 699
    #else
078900fe sago007 2015-12-05 15:31 700
    return FC_DrawBoxAlign(font, dest, box.to_SDL_Rect(), translate_enum_NFont_to_FC(align), "%s", buffer);
078900fe sago007 2015-12-05 15:31 701
    #endif
078900fe sago007 2015-12-05 15:31 702
}
078900fe sago007 2015-12-05 15:31 703
078900fe sago007 2015-12-05 15:31 704
NFont::Rectf NFont::drawBox(NFont_Target* dest, const Rectf& box, const Scale& scale, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 705
{
078900fe sago007 2015-12-05 15:31 706
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 707
        return Rectf(box.x, box.y, 0, 0);
078900fe sago007 2015-12-05 15:31 708
078900fe sago007 2015-12-05 15:31 709
    va_list lst;
078900fe sago007 2015-12-05 15:31 710
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 711
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 712
    va_end(lst);
078900fe sago007 2015-12-05 15:31 713
    
078900fe sago007 2015-12-05 15:31 714
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 715
    return FC_DrawBoxScale(font, dest, box.to_GPU_Rect(), FC_MakeScale(scale.x, scale.y), "%s", buffer);
078900fe sago007 2015-12-05 15:31 716
    #else
078900fe sago007 2015-12-05 15:31 717
    return FC_DrawBoxScale(font, dest, box.to_SDL_Rect(), FC_MakeScale(scale.x, scale.y), "%s", buffer);
078900fe sago007 2015-12-05 15:31 718
    #endif
078900fe sago007 2015-12-05 15:31 719
}
078900fe sago007 2015-12-05 15:31 720
078900fe sago007 2015-12-05 15:31 721
NFont::Rectf NFont::drawBox(NFont_Target* dest, const Rectf& box, const Color& color, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 722
{
078900fe sago007 2015-12-05 15:31 723
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 724
        return Rectf(box.x, box.y, 0, 0);
078900fe sago007 2015-12-05 15:31 725
078900fe sago007 2015-12-05 15:31 726
    va_list lst;
078900fe sago007 2015-12-05 15:31 727
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 728
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 729
    va_end(lst);
078900fe sago007 2015-12-05 15:31 730
    
078900fe sago007 2015-12-05 15:31 731
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 732
    return FC_DrawBoxColor(font, dest, box.to_GPU_Rect(), color.to_SDL_Color(), "%s", buffer);
078900fe sago007 2015-12-05 15:31 733
    #else
078900fe sago007 2015-12-05 15:31 734
    return FC_DrawBoxColor(font, dest, box.to_SDL_Rect(), color.to_SDL_Color(), "%s", buffer);
078900fe sago007 2015-12-05 15:31 735
    #endif
078900fe sago007 2015-12-05 15:31 736
}
078900fe sago007 2015-12-05 15:31 737
078900fe sago007 2015-12-05 15:31 738
NFont::Rectf NFont::drawBox(NFont_Target* dest, const Rectf& box, const Effect& effect, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 739
{
078900fe sago007 2015-12-05 15:31 740
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 741
        return Rectf(box.x, box.y, 0, 0);
078900fe sago007 2015-12-05 15:31 742
078900fe sago007 2015-12-05 15:31 743
    va_list lst;
078900fe sago007 2015-12-05 15:31 744
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 745
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 746
    va_end(lst);
078900fe sago007 2015-12-05 15:31 747
    
078900fe sago007 2015-12-05 15:31 748
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 749
    return FC_DrawBoxEffect(font, dest, box.to_GPU_Rect(), FC_MakeEffect(translate_enum_NFont_to_FC(effect.alignment), FC_MakeScale(effect.scale.x, effect.scale.y), effect.color.to_SDL_Color()), "%s", buffer);
078900fe sago007 2015-12-05 15:31 750
    #else
078900fe sago007 2015-12-05 15:31 751
    return FC_DrawBoxEffect(font, dest, box.to_SDL_Rect(), FC_MakeEffect(translate_enum_NFont_to_FC(effect.alignment), FC_MakeScale(effect.scale.x, effect.scale.y), effect.color.to_SDL_Color()), "%s", buffer);
078900fe sago007 2015-12-05 15:31 752
    #endif
078900fe sago007 2015-12-05 15:31 753
}
078900fe sago007 2015-12-05 15:31 754
078900fe sago007 2015-12-05 15:31 755
NFont::Rectf NFont::drawColumn(NFont_Target* dest, float x, float y, Uint16 width, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 756
{
078900fe sago007 2015-12-05 15:31 757
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 758
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 759
078900fe sago007 2015-12-05 15:31 760
    va_list lst;
078900fe sago007 2015-12-05 15:31 761
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 762
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 763
    va_end(lst);
078900fe sago007 2015-12-05 15:31 764
078900fe sago007 2015-12-05 15:31 765
    return FC_DrawColumn(font, dest, x, y, width, "%s", buffer);
078900fe sago007 2015-12-05 15:31 766
}
078900fe sago007 2015-12-05 15:31 767
078900fe sago007 2015-12-05 15:31 768
NFont::Rectf NFont::drawColumn(NFont_Target* dest, float x, float y, Uint16 width, AlignEnum align, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 769
{
078900fe sago007 2015-12-05 15:31 770
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 771
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 772
078900fe sago007 2015-12-05 15:31 773
    va_list lst;
078900fe sago007 2015-12-05 15:31 774
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 775
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 776
    va_end(lst);
078900fe sago007 2015-12-05 15:31 777
078900fe sago007 2015-12-05 15:31 778
    return FC_DrawColumnAlign(font, dest, x, y, width, translate_enum_NFont_to_FC(align), "%s", buffer);
078900fe sago007 2015-12-05 15:31 779
}
078900fe sago007 2015-12-05 15:31 780
078900fe sago007 2015-12-05 15:31 781
NFont::Rectf NFont::drawColumn(NFont_Target* dest, float x, float y, Uint16 width, const Scale& scale, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 782
{
078900fe sago007 2015-12-05 15:31 783
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 784
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 785
078900fe sago007 2015-12-05 15:31 786
    va_list lst;
078900fe sago007 2015-12-05 15:31 787
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 788
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 789
    va_end(lst);
078900fe sago007 2015-12-05 15:31 790
078900fe sago007 2015-12-05 15:31 791
    return FC_DrawColumnScale(font, dest, x, y, width, FC_MakeScale(scale.x, scale.y), "%s", buffer);
078900fe sago007 2015-12-05 15:31 792
}
078900fe sago007 2015-12-05 15:31 793
078900fe sago007 2015-12-05 15:31 794
NFont::Rectf NFont::drawColumn(NFont_Target* dest, float x, float y, Uint16 width, const Color& color, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 795
{
078900fe sago007 2015-12-05 15:31 796
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 797
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 798
078900fe sago007 2015-12-05 15:31 799
    va_list lst;
078900fe sago007 2015-12-05 15:31 800
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 801
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 802
    va_end(lst);
078900fe sago007 2015-12-05 15:31 803
078900fe sago007 2015-12-05 15:31 804
    return FC_DrawColumnColor(font, dest, x, y, width, color.to_SDL_Color(), "%s", buffer);
078900fe sago007 2015-12-05 15:31 805
}
078900fe sago007 2015-12-05 15:31 806
078900fe sago007 2015-12-05 15:31 807
NFont::Rectf NFont::drawColumn(NFont_Target* dest, float x, float y, Uint16 width, const Effect& effect, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 808
{
078900fe sago007 2015-12-05 15:31 809
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 810
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 811
078900fe sago007 2015-12-05 15:31 812
    va_list lst;
078900fe sago007 2015-12-05 15:31 813
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 814
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 815
    va_end(lst);
078900fe sago007 2015-12-05 15:31 816
    
078900fe sago007 2015-12-05 15:31 817
    #ifdef NFONT_USE_SDL_GPU
078900fe sago007 2015-12-05 15:31 818
    return FC_DrawColumnEffect(font, dest, x, y, width, FC_MakeEffect(translate_enum_NFont_to_FC(effect.alignment), FC_MakeScale(effect.scale.x, effect.scale.y), effect.color.to_SDL_Color()), "%s", buffer);
078900fe sago007 2015-12-05 15:31 819
    #else
078900fe sago007 2015-12-05 15:31 820
    return FC_DrawColumnEffect(font, dest, x, y, width, FC_MakeEffect(translate_enum_NFont_to_FC(effect.alignment), FC_MakeScale(effect.scale.x, effect.scale.y), effect.color.to_SDL_Color()), "%s", buffer);
078900fe sago007 2015-12-05 15:31 821
    #endif
078900fe sago007 2015-12-05 15:31 822
}
078900fe sago007 2015-12-05 15:31 823
078900fe sago007 2015-12-05 15:31 824
078900fe sago007 2015-12-05 15:31 825
078900fe sago007 2015-12-05 15:31 826
NFont::Rectf NFont::draw(NFont_Target* dest, float x, float y, const Scale& scale, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 827
{
078900fe sago007 2015-12-05 15:31 828
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 829
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 830
078900fe sago007 2015-12-05 15:31 831
    va_list lst;
078900fe sago007 2015-12-05 15:31 832
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 833
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 834
    va_end(lst);
078900fe sago007 2015-12-05 15:31 835
078900fe sago007 2015-12-05 15:31 836
    return FC_DrawScale(font, dest, x, y, FC_MakeScale(scale.x, scale.y), "%s", buffer);
078900fe sago007 2015-12-05 15:31 837
}
078900fe sago007 2015-12-05 15:31 838
078900fe sago007 2015-12-05 15:31 839
NFont::Rectf NFont::draw(NFont_Target* dest, float x, float y, AlignEnum align, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 840
{
078900fe sago007 2015-12-05 15:31 841
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 842
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 843
078900fe sago007 2015-12-05 15:31 844
    va_list lst;
078900fe sago007 2015-12-05 15:31 845
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 846
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 847
    va_end(lst);
078900fe sago007 2015-12-05 15:31 848
078900fe sago007 2015-12-05 15:31 849
    return FC_DrawAlign(font, dest, x, y, translate_enum_NFont_to_FC(align), "%s", buffer);
078900fe sago007 2015-12-05 15:31 850
}
078900fe sago007 2015-12-05 15:31 851
078900fe sago007 2015-12-05 15:31 852
NFont::Rectf NFont::draw(NFont_Target* dest, float x, float y, const Color& color, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 853
{
078900fe sago007 2015-12-05 15:31 854
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 855
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 856
078900fe sago007 2015-12-05 15:31 857
    va_list lst;
078900fe sago007 2015-12-05 15:31 858
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 859
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 860
    va_end(lst);
078900fe sago007 2015-12-05 15:31 861
078900fe sago007 2015-12-05 15:31 862
    return FC_DrawColor(font, dest, x, y, color.to_SDL_Color(), "%s", buffer);
078900fe sago007 2015-12-05 15:31 863
}
078900fe sago007 2015-12-05 15:31 864
078900fe sago007 2015-12-05 15:31 865
078900fe sago007 2015-12-05 15:31 866
NFont::Rectf NFont::draw(NFont_Target* dest, float x, float y, const Effect& effect, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 867
{
078900fe sago007 2015-12-05 15:31 868
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 869
        return Rectf(x, y, 0, 0);
078900fe sago007 2015-12-05 15:31 870
078900fe sago007 2015-12-05 15:31 871
    va_list lst;
078900fe sago007 2015-12-05 15:31 872
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 873
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 874
    va_end(lst);
078900fe sago007 2015-12-05 15:31 875
078900fe sago007 2015-12-05 15:31 876
    return FC_DrawEffect(font, dest, x, y, FC_MakeEffect(translate_enum_NFont_to_FC(effect.alignment), FC_MakeScale(effect.scale.x, effect.scale.y), effect.color.to_SDL_Color()), "%s", buffer);
078900fe sago007 2015-12-05 15:31 877
}
078900fe sago007 2015-12-05 15:31 878
078900fe sago007 2015-12-05 15:31 879
078900fe sago007 2015-12-05 15:31 880
078900fe sago007 2015-12-05 15:31 881
078900fe sago007 2015-12-05 15:31 882
// Getters
078900fe sago007 2015-12-05 15:31 883
078900fe sago007 2015-12-05 15:31 884
078900fe sago007 2015-12-05 15:31 885
NFont::FilterEnum NFont::getFilterMode() const
078900fe sago007 2015-12-05 15:31 886
{
078900fe sago007 2015-12-05 15:31 887
    FC_FilterEnum f = FC_GetFilterMode(font);
078900fe sago007 2015-12-05 15:31 888
    if(f == FC_FILTER_LINEAR)
078900fe sago007 2015-12-05 15:31 889
        return NFont::LINEAR;
078900fe sago007 2015-12-05 15:31 890
    return NFont::NEAREST;
078900fe sago007 2015-12-05 15:31 891
}
078900fe sago007 2015-12-05 15:31 892
078900fe sago007 2015-12-05 15:31 893
Uint16 NFont::getHeight() const
078900fe sago007 2015-12-05 15:31 894
{
078900fe sago007 2015-12-05 15:31 895
    return FC_GetLineHeight(font);
078900fe sago007 2015-12-05 15:31 896
}
078900fe sago007 2015-12-05 15:31 897
078900fe sago007 2015-12-05 15:31 898
Uint16 NFont::getHeight(const char* formatted_text, ...) const
078900fe sago007 2015-12-05 15:31 899
{
078900fe sago007 2015-12-05 15:31 900
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 901
        return 0;
078900fe sago007 2015-12-05 15:31 902
078900fe sago007 2015-12-05 15:31 903
    va_list lst;
078900fe sago007 2015-12-05 15:31 904
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 905
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 906
    va_end(lst);
078900fe sago007 2015-12-05 15:31 907
    
078900fe sago007 2015-12-05 15:31 908
    return FC_GetHeight(font, "%s", buffer);
078900fe sago007 2015-12-05 15:31 909
}
078900fe sago007 2015-12-05 15:31 910
078900fe sago007 2015-12-05 15:31 911
Uint16 NFont::getWidth(const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 912
{
078900fe sago007 2015-12-05 15:31 913
    if (formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 914
        return 0;
078900fe sago007 2015-12-05 15:31 915
078900fe sago007 2015-12-05 15:31 916
    va_list lst;
078900fe sago007 2015-12-05 15:31 917
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 918
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 919
    va_end(lst);
078900fe sago007 2015-12-05 15:31 920
    
078900fe sago007 2015-12-05 15:31 921
    return FC_GetWidth(font, "%s", buffer);
078900fe sago007 2015-12-05 15:31 922
}
078900fe sago007 2015-12-05 15:31 923
078900fe sago007 2015-12-05 15:31 924
078900fe sago007 2015-12-05 15:31 925
NFont::Rectf NFont::getCharacterOffset(Uint16 position_index, int column_width, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 926
{
078900fe sago007 2015-12-05 15:31 927
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 928
        return Rectf(0,0,0,0);
078900fe sago007 2015-12-05 15:31 929
078900fe sago007 2015-12-05 15:31 930
    va_list lst;
078900fe sago007 2015-12-05 15:31 931
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 932
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 933
    va_end(lst);
078900fe sago007 2015-12-05 15:31 934
    
078900fe sago007 2015-12-05 15:31 935
    return FC_GetCharacterOffset(font, position_index, column_width, "%s", buffer);
078900fe sago007 2015-12-05 15:31 936
}
078900fe sago007 2015-12-05 15:31 937
078900fe sago007 2015-12-05 15:31 938
078900fe sago007 2015-12-05 15:31 939
Uint16 NFont::getColumnHeight(Uint16 width, const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 940
{
078900fe sago007 2015-12-05 15:31 941
    if(formatted_text == NULL || width == 0)
078900fe sago007 2015-12-05 15:31 942
        return 0;
078900fe sago007 2015-12-05 15:31 943
078900fe sago007 2015-12-05 15:31 944
    va_list lst;
078900fe sago007 2015-12-05 15:31 945
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 946
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 947
    va_end(lst);
078900fe sago007 2015-12-05 15:31 948
    
078900fe sago007 2015-12-05 15:31 949
    return FC_GetColumnHeight(font, width, "%s", buffer);
078900fe sago007 2015-12-05 15:31 950
}
078900fe sago007 2015-12-05 15:31 951
078900fe sago007 2015-12-05 15:31 952
int NFont::getAscent(const char character)
078900fe sago007 2015-12-05 15:31 953
{
078900fe sago007 2015-12-05 15:31 954
    return FC_GetAscent(font, "%c", character);
078900fe sago007 2015-12-05 15:31 955
}
078900fe sago007 2015-12-05 15:31 956
078900fe sago007 2015-12-05 15:31 957
int NFont::getAscent() const
078900fe sago007 2015-12-05 15:31 958
{
078900fe sago007 2015-12-05 15:31 959
    return FC_GetAscent(font, NULL);
078900fe sago007 2015-12-05 15:31 960
}
078900fe sago007 2015-12-05 15:31 961
078900fe sago007 2015-12-05 15:31 962
int NFont::getAscent(const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 963
{
078900fe sago007 2015-12-05 15:31 964
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 965
        return FC_GetAscent(font, NULL);
078900fe sago007 2015-12-05 15:31 966
078900fe sago007 2015-12-05 15:31 967
    va_list lst;
078900fe sago007 2015-12-05 15:31 968
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 969
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 970
    va_end(lst);
078900fe sago007 2015-12-05 15:31 971
078900fe sago007 2015-12-05 15:31 972
    return FC_GetAscent(font, "%s", buffer);
078900fe sago007 2015-12-05 15:31 973
}
078900fe sago007 2015-12-05 15:31 974
078900fe sago007 2015-12-05 15:31 975
int NFont::getDescent(const char character)
078900fe sago007 2015-12-05 15:31 976
{
078900fe sago007 2015-12-05 15:31 977
    return FC_GetDescent(font, "%c", character);
078900fe sago007 2015-12-05 15:31 978
}
078900fe sago007 2015-12-05 15:31 979
078900fe sago007 2015-12-05 15:31 980
int NFont::getDescent() const
078900fe sago007 2015-12-05 15:31 981
{
078900fe sago007 2015-12-05 15:31 982
    return FC_GetDescent(font, NULL);
078900fe sago007 2015-12-05 15:31 983
}
078900fe sago007 2015-12-05 15:31 984
078900fe sago007 2015-12-05 15:31 985
int NFont::getDescent(const char* formatted_text, ...)
078900fe sago007 2015-12-05 15:31 986
{
078900fe sago007 2015-12-05 15:31 987
    if(formatted_text == NULL)
078900fe sago007 2015-12-05 15:31 988
        return FC_GetDescent(font, NULL);
078900fe sago007 2015-12-05 15:31 989
078900fe sago007 2015-12-05 15:31 990
    va_list lst;
078900fe sago007 2015-12-05 15:31 991
    va_start(lst, formatted_text);
078900fe sago007 2015-12-05 15:31 992
    vsprintf(buffer, formatted_text, lst);
078900fe sago007 2015-12-05 15:31 993
    va_end(lst);
078900fe sago007 2015-12-05 15:31 994
    
078900fe sago007 2015-12-05 15:31 995
    return FC_GetDescent(font, "%s", buffer);
078900fe sago007 2015-12-05 15:31 996
}
078900fe sago007 2015-12-05 15:31 997
078900fe sago007 2015-12-05 15:31 998
int NFont::getSpacing() const
078900fe sago007 2015-12-05 15:31 999
{
078900fe sago007 2015-12-05 15:31 1000
    return FC_GetSpacing(font);
078900fe sago007 2015-12-05 15:31 1001
}
078900fe sago007 2015-12-05 15:31 1002
078900fe sago007 2015-12-05 15:31 1003
int NFont::getLineSpacing() const
078900fe sago007 2015-12-05 15:31 1004
{
078900fe sago007 2015-12-05 15:31 1005
    return FC_GetLineSpacing(font);
078900fe sago007 2015-12-05 15:31 1006
}
078900fe sago007 2015-12-05 15:31 1007
078900fe sago007 2015-12-05 15:31 1008
Uint16 NFont::getBaseline() const
078900fe sago007 2015-12-05 15:31 1009
{
078900fe sago007 2015-12-05 15:31 1010
    return FC_GetBaseline(font);
078900fe sago007 2015-12-05 15:31 1011
}
078900fe sago007 2015-12-05 15:31 1012
078900fe sago007 2015-12-05 15:31 1013
Uint16 NFont::getMaxWidth() const
078900fe sago007 2015-12-05 15:31 1014
{
078900fe sago007 2015-12-05 15:31 1015
    return FC_GetMaxWidth(font);
078900fe sago007 2015-12-05 15:31 1016
}
078900fe sago007 2015-12-05 15:31 1017
078900fe sago007 2015-12-05 15:31 1018
NFont::Color NFont::getDefaultColor() const
078900fe sago007 2015-12-05 15:31 1019
{
078900fe sago007 2015-12-05 15:31 1020
    return FC_GetDefaultColor(font);
078900fe sago007 2015-12-05 15:31 1021
}
078900fe sago007 2015-12-05 15:31 1022
078900fe sago007 2015-12-05 15:31 1023
078900fe sago007 2015-12-05 15:31 1024
078900fe sago007 2015-12-05 15:31 1025
078900fe sago007 2015-12-05 15:31 1026
078900fe sago007 2015-12-05 15:31 1027
// Setters
078900fe sago007 2015-12-05 15:31 1028
078900fe sago007 2015-12-05 15:31 1029
void NFont::setFilterMode(NFont::FilterEnum filter)
078900fe sago007 2015-12-05 15:31 1030
{
078900fe sago007 2015-12-05 15:31 1031
    if(filter == NFont::LINEAR)
078900fe sago007 2015-12-05 15:31 1032
        FC_SetFilterMode(font, FC_FILTER_LINEAR);
078900fe sago007 2015-12-05 15:31 1033
    else
078900fe sago007 2015-12-05 15:31 1034
        FC_SetFilterMode(font, FC_FILTER_NEAREST);
078900fe sago007 2015-12-05 15:31 1035
}
078900fe sago007 2015-12-05 15:31 1036
078900fe sago007 2015-12-05 15:31 1037
void NFont::setSpacing(int LetterSpacing)
078900fe sago007 2015-12-05 15:31 1038
{
078900fe sago007 2015-12-05 15:31 1039
    FC_SetSpacing(font, LetterSpacing);
078900fe sago007 2015-12-05 15:31 1040
}
078900fe sago007 2015-12-05 15:31 1041
078900fe sago007 2015-12-05 15:31 1042
void NFont::setLineSpacing(int LineSpacing)
078900fe sago007 2015-12-05 15:31 1043
{
078900fe sago007 2015-12-05 15:31 1044
    FC_SetLineSpacing(font, LineSpacing);
078900fe sago007 2015-12-05 15:31 1045
}
078900fe sago007 2015-12-05 15:31 1046
078900fe sago007 2015-12-05 15:31 1047
void NFont::setBaseline()
078900fe sago007 2015-12-05 15:31 1048
{
078900fe sago007 2015-12-05 15:31 1049
    
078900fe sago007 2015-12-05 15:31 1050
}
078900fe sago007 2015-12-05 15:31 1051
078900fe sago007 2015-12-05 15:31 1052
void NFont::setBaseline(Uint16 Baseline)
078900fe sago007 2015-12-05 15:31 1053
{
078900fe sago007 2015-12-05 15:31 1054
    
078900fe sago007 2015-12-05 15:31 1055
}
078900fe sago007 2015-12-05 15:31 1056
078900fe sago007 2015-12-05 15:31 1057
void NFont::setDefaultColor(const Color& color)
078900fe sago007 2015-12-05 15:31 1058
{
078900fe sago007 2015-12-05 15:31 1059
    FC_SetDefaultColor(font, color.to_SDL_Color());
078900fe sago007 2015-12-05 15:31 1060
}
078900fe sago007 2015-12-05 15:31 1061
078900fe sago007 2015-12-05 15:31 1062
void NFont::enableTTFOwnership()
078900fe sago007 2015-12-05 15:31 1063
{
078900fe sago007 2015-12-05 15:31 1064
    
078900fe sago007 2015-12-05 15:31 1065
}
078900fe sago007 2015-12-05 15:31 1066
078900fe sago007 2015-12-05 15:31 1067
078900fe sago007 2015-12-05 15:31 1068
078900fe sago007 2015-12-05 15:31 1069
1970-01-01 00:00 1070