mirror of
https://github.com/luanti-org/luanti.git
synced 2025-09-15 18:57:08 +00:00
Fixes needed to use irrArray backed by std::vector (#12263)
This commit is contained in:
parent
bc59fcf5c5
commit
2742fef458
6 changed files with 77 additions and 55 deletions
|
@ -292,9 +292,6 @@ shadow_offset(0), shadow_alpha(0), fallback(0)
|
|||
Driver->grab();
|
||||
|
||||
setInvisibleCharacters(L" ");
|
||||
|
||||
// Glyphs aren't reference counted, so don't try to delete them when we free the array.
|
||||
Glyphs.set_free_when_destroyed(false);
|
||||
}
|
||||
|
||||
bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antialias, const bool transparency)
|
||||
|
@ -411,8 +408,7 @@ CGUITTFont::~CGUITTFont()
|
|||
{
|
||||
// Delete the glyphs and glyph pages.
|
||||
reset_images();
|
||||
CGUITTAssistDelete::Delete(Glyphs);
|
||||
//Glyphs.clear();
|
||||
Glyphs.clear();
|
||||
|
||||
// We aren't using this face anymore.
|
||||
auto n = c_faces.find(filename);
|
||||
|
@ -675,6 +671,8 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
|
|||
update_glyph_pages();
|
||||
auto it = Render_Map.begin();
|
||||
auto ie = Render_Map.end();
|
||||
core::array<core::vector2di> tmp_positions;
|
||||
core::array<core::recti> tmp_source_rects;
|
||||
while (it != ie)
|
||||
{
|
||||
CGUITTGlyphPage* page = it->second;
|
||||
|
@ -696,10 +694,8 @@ void CGUITTFont::draw(const EnrichedString &text, const core::rect<s32>& positio
|
|||
do
|
||||
++i;
|
||||
while (i < page->render_positions.size() && page->render_colors[i] == colprev);
|
||||
core::array<core::vector2di> tmp_positions;
|
||||
core::array<core::recti> tmp_source_rects;
|
||||
tmp_positions.set_pointer(&page->render_positions[ibegin], i - ibegin, false, false); // no copy
|
||||
tmp_source_rects.set_pointer(&page->render_source_rects[ibegin], i - ibegin, false, false);
|
||||
tmp_positions.set_data(&page->render_positions[ibegin], i - ibegin);
|
||||
tmp_source_rects.set_data(&page->render_source_rects[ibegin], i - ibegin);
|
||||
--i;
|
||||
|
||||
if (!use_transparency)
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include <map>
|
||||
#include <irrUString.h>
|
||||
#include "util/enriched_string.h"
|
||||
#include "util/basic_macros.h"
|
||||
#include FT_FREETYPE_H
|
||||
|
||||
namespace irr
|
||||
|
@ -46,23 +47,34 @@ namespace gui
|
|||
struct SGUITTFace;
|
||||
class CGUITTFont;
|
||||
|
||||
//! Class to assist in deleting glyphs.
|
||||
class CGUITTAssistDelete
|
||||
{
|
||||
public:
|
||||
template <class T, typename TAlloc>
|
||||
static void Delete(core::array<T, TAlloc>& a)
|
||||
{
|
||||
TAlloc allocator;
|
||||
allocator.deallocate(a.pointer());
|
||||
}
|
||||
};
|
||||
|
||||
//! Structure representing a single TrueType glyph.
|
||||
struct SGUITTGlyph
|
||||
{
|
||||
//! Constructor.
|
||||
SGUITTGlyph() : isLoaded(false), glyph_page(0), surface(0), parent(0) {}
|
||||
SGUITTGlyph() :
|
||||
isLoaded(false),
|
||||
glyph_page(0),
|
||||
source_rect(),
|
||||
offset(),
|
||||
advance(),
|
||||
surface(0),
|
||||
parent(0)
|
||||
{}
|
||||
|
||||
DISABLE_CLASS_COPY(SGUITTGlyph);
|
||||
|
||||
//! This class would be trivially copyable except for the reference count on `surface`.
|
||||
SGUITTGlyph(SGUITTGlyph &&other) :
|
||||
isLoaded(other.isLoaded),
|
||||
glyph_page(other.glyph_page),
|
||||
source_rect(other.source_rect),
|
||||
offset(other.offset),
|
||||
advance(other.advance),
|
||||
surface(other.surface),
|
||||
parent(other.parent)
|
||||
{
|
||||
other.surface = 0;
|
||||
}
|
||||
|
||||
//! Destructor.
|
||||
~SGUITTGlyph() { unload(); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue