]> git.sesse.net Git - vlc/blob - modules/gui/skins2/src/bitmap_font.cpp
* all: beginning of bitmap font support. At the moment only the digits
[vlc] / modules / gui / skins2 / src / bitmap_font.cpp
1 /*****************************************************************************
2  * bitmap_font.cpp
3  *****************************************************************************
4  * Copyright (C) 2004 VideoLAN
5  * $Id$
6  *
7  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
22  *****************************************************************************/
23
24 #include "bitmap_font.hpp"
25 #include "generic_bitmap.hpp"
26 #include "../utils/ustring.hpp"
27
28
29 BitmapFont::BitmapFont( intf_thread_t *pIntf, const GenericBitmap &rBitmap ):
30     GenericFont( pIntf ), m_rBitmap( rBitmap )
31 {
32     m_width = 9;
33     m_height = 13;
34 }
35
36
37 GenericBitmap *BitmapFont::drawString( const UString &rString,
38                                        uint32_t color, int maxWidth ) const
39 {
40     uint32_t *pString = (uint32_t*)rString.u_str();
41     // Compute the text width
42     int width = 0;
43     for( uint32_t *ptr = pString; *ptr; ptr++ )
44     {
45         uint32_t c = *ptr;
46         if( (c >= '0' && c <= '9') || c == '-' )
47         {
48             width += m_width + 3;
49         }
50         else
51         {
52             width += 6;
53         }
54     }
55     // Create a bitmap
56     BitmapImpl *pBmp = new BitmapImpl( getIntf(), width, m_height );
57     int xDest = 0;
58     while( *pString )
59     {
60         uint32_t c = *(pString++);
61         int xSrc = -1;
62         if( c >= '0' && c <= '9' )
63         {
64             xSrc = (c - '0') * m_width;
65         }
66         else if( c == '-' )
67         {
68             xSrc = 11 * m_width;
69         }
70         if( xSrc != -1 )
71         {
72             pBmp->drawBitmap( m_rBitmap, xSrc, 0, xDest, 0, m_width,
73                               m_height );
74             xDest += m_width + 3;
75         }
76         else
77         {
78             xDest += 6;
79         }
80     }
81     return pBmp;
82 }
83