-
Notifications
You must be signed in to change notification settings - Fork 0
/
TextComponent.cpp
68 lines (58 loc) · 1.96 KB
/
TextComponent.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#pragma once
#include "MiniginPCH.h"
#include "TextComponent.h"
#include <SDL.h>
#include <SDL_ttf.h>
#include "Renderer.h"
#include "Font.h"
#include "Texture2D.h"
#include "ServiceLocator.h"
dae::TextComponent::TextComponent(TextureComponent & texc, std::string text, std::shared_ptr<Font> font, bool updateEveryFrame)
: m_TextureComponent(texc), mText(text), m_NeedsUpdate(true), m_UpdatedEveryFrame(updateEveryFrame), mFont(font)
{
m_Renderer = ServiceLocator::GetRenderer();
}
dae::TextComponent::~TextComponent()
{
}
void dae::TextComponent::Update(float deltaTime)
{
UNREFERENCED_PARAMETER(deltaTime);
if (m_NeedsUpdate || m_UpdatedEveryFrame)
{
const SDL_Color color = { 255,255,255 }; // only white text is supported now
//TTF_SizeText()
const auto surf = TTF_RenderText_Blended(mFont->GetFont(), mText.c_str(), color);
if (surf == nullptr)
{
throw std::runtime_error(std::string("Render text failed: ") + SDL_GetError());
}
auto texture = SDL_CreateTextureFromSurface(m_Renderer->GetSDLRenderer(), surf);
if (texture == nullptr)
{
throw std::runtime_error(std::string("Create text texture from surface failed: ") + SDL_GetError());
}
SDL_FreeSurface(surf);
m_TextureComponent.SetTexture(std::make_shared<Texture2D>(texture));
m_NeedsUpdate = false;
}
}
void dae::TextComponent::SetText(std::string text)
{
mText = text;
const SDL_Color color = { 255,255,255 }; // only white text is supported now
//TTF_SizeText()
const auto surf = TTF_RenderText_Blended(mFont->GetFont(), mText.c_str(), color);
if (surf == nullptr)
{
throw std::runtime_error(std::string("Render text failed: ") + SDL_GetError());
}
auto texture = SDL_CreateTextureFromSurface(m_Renderer->GetSDLRenderer(), surf);
if (texture == nullptr)
{
throw std::runtime_error(std::string("Create text texture from surface failed: ") + SDL_GetError());
}
SDL_FreeSurface(surf);
m_TextureComponent.SetTexture(std::make_shared<Texture2D>(texture));
m_NeedsUpdate = false;
}