【发布时间】:2021-07-05 20:21:54
【问题描述】:
这是我如何呈现 SDL 文本的一个最小示例:
#include <SDL_ttf.h>
void runttf()
{
constexpr auto SCREEN_WIDTH{300};
constexpr auto SCREEN_HEIGHT{300};
constexpr auto font_path = "/usr/share/fonts/truetype/fonts-beng-extra/MuktiNarrow.ttf"; //any font on your system
constexpr SDL_Rect destination = {10,10,200,80};
constexpr SDL_Color text_color={0,0,0};
SDL_Init( SDL_INIT_VIDEO );
TTF_Init();
auto window = SDL_CreateWindow( "SDL TTF demo", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
auto renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );
auto font = TTF_OpenFont( font_path, 28 );
auto textSurface = TTF_RenderText_Solid( font, "I wish I this would not stretch", text_color );
auto textTexture = SDL_CreateTextureFromSurface(renderer, textSurface);
SDL_Event e;
auto run = true;
while(run) {
SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, textTexture, NULL, &destination);
SDL_RenderPresent(renderer);
while (SDL_PollEvent(&e) != 0) if (e.type == SDL_QUIT) run = false;
}
SDL_DestroyTexture(textTexture);
SDL_FreeSurface( textSurface );
TTF_CloseFont(font);
SDL_DestroyRenderer( renderer );
SDL_DestroyWindow( window );
TTF_Quit();
SDL_Quit();
}
当我渲染文本时,我最终会得到这样的结果
您可以看到我绘制文本的方式如何使它跨越我要绘制文本的选定区域。我宁愿将文本显示裁剪掉或类似的东西 - 除了拉伸之外的任何东西。
我是否错误地使用了函数?我需要对文本的渲染和放置做更多的数学运算吗?什么是渲染非拉伸文本的规范 sdl ttf 方式?
【问题讨论】: