Jump to content

View more

Image of the Day

#ld38 #screenshotsaturday Mimosa Fizz action gif #2 https://t.co/TUzdppvfUL
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

[C++ & SDL] Some Questions

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 lmsmi1   Members   


Posted 20 June 2013 - 09:27 PM

I've got a few questions about using SDL_ttf to render text:


1. How can I render the text to a buffer or array?

2. How do I get the length of a single character rendered from a TTF document?

3. If it's possible to do 1 and 2, then how exactly do I render a new line ('\n')?


Here's some code I need to modify. Feel free to modify it and post what you can here.

#include "include/SDL/SDL.h"
#include "include/SDL/SDL_ttf.h"

int currentX = 0;
int currentY = 0;
SDL_Surface* screen;
SDL_Surface* fontSurface;
SDL_Color fColor;
SDL_Rect fontRect;

SDL_Event event;

TTF_Font* font;

//Initialize the font, set to white
void fontInit(){
        font = TTF_OpenFont("dos.ttf", 12);
        fColor.r = 0; // 255
        fColor.g = 204; // 255
        fColor.b = 0; //255

//Print the designated string at the specified coordinates
void printF(char *c, int x, int y){
        fontSurface = TTF_RenderText_Solid(font, c, fColor);
        fontRect.x = x;
        fontRect.y = y;
        SDL_BlitSurface(fontSurface, NULL, screen, &fontRect);

int main(int argc, char** argv)
    // Initialize the SDL library with the Video subsystem

    //Create the screen
    screen = SDL_SetVideoMode(320, 480, 0, SDL_SWSURFACE);

    //Initialize fonts

    //Print to center of screen
    // printF("Hello World", screen->w/2 - 11*3, screen->h/2);
    printF("Hello world!", currentX, currentY);

    do {
        // Process the events
        while (SDL_PollEvent(&Event)) {
            switch (Event.type) {

                case SDL_KEYDOWN:
                    switch (Event.key.keysym.sym) {
                    // Escape forces us to quit the app
                        case SDLK_ESCAPE:
                            event.type = SDL_QUIT;


    } while (Event.type != SDL_QUIT);

    // Cleanup

    return 0;

Thanks in advance.



#2 Wooh   Members   


Posted 21 June 2013 - 03:58 AM

Do you want an array of SDL_Surface*?
SDL_Surface* texts[10];
texts[0] = TTF_RenderText_Solid(font, "txt1", fColor); // error checking ignored
texts[1] = TTF_RenderText_Solid(font, "txt2", fColor);
texts[2] = TTF_RenderText_Solid(font, "txt3", fColor);
Or you can use std::vector, and don't have to specify the size beforehand.
std::vector<SDL_Surface*> texts;
texts.push_back(TTF_RenderText_Solid(font, "txt1", fColor));
texts.push_back(TTF_RenderText_Solid(font, "txt2", fColor));
texts.push_back(TTF_RenderText_Solid(font, "txt3", fColor));
If you have rendered a single character to a surface you can get the width and height of the surface by accessing the w and h member variables of the SDL_Surface.
SDL_Surface* charSurface = TTF_RenderText_Solid(font, "A", fColor);
std::cout << charSurface->w << ' ' << charSurface->h << std::endl;
If you have not rendered the character you can use TTF_SizeText to calculate the size.
int w, h;
TTF_SizeText(font, "A", &w, &h);
std::cout << w << ' ' << h << std::endl;
If you print line by line you just need to change the Y-coordinate by adding the height of the font each time. You can use TTF_FontHeight if you don't know the height already.

Edited by Wooh, 21 June 2013 - 04:00 AM.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.