mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-08 00:38:39 +09:00
Issue #80 - Split out GetShapedWord template function
This commit is contained in:
parent
cd9055ddce
commit
9e45084e77
4 changed files with 84 additions and 64 deletions
80
gfx/thebes/gfxFont-Impl.h
Normal file
80
gfx/thebes/gfxFont-Impl.h
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef GFX_FONT_IMPL_H
|
||||
#define GFX_FONT_IMPL_H
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define GFX_MAYBE_UNUSED __attribute__((unused))
|
||||
#else
|
||||
#define GFX_MAYBE_UNUSED
|
||||
#endif
|
||||
|
||||
template<typename T>
|
||||
gfxShapedWord*
|
||||
gfxFont::GetShapedWord(DrawTarget *aDrawTarget,
|
||||
const T *aText,
|
||||
uint32_t aLength,
|
||||
uint32_t aHash,
|
||||
Script aRunScript,
|
||||
bool aVertical,
|
||||
int32_t aAppUnitsPerDevUnit,
|
||||
uint32_t aFlags,
|
||||
gfxTextPerfMetrics *aTextPerf GFX_MAYBE_UNUSED)
|
||||
{
|
||||
// if the cache is getting too big, flush it and start over
|
||||
uint32_t wordCacheMaxEntries =
|
||||
gfxPlatform::GetPlatform()->WordCacheMaxEntries();
|
||||
if (mWordCache->Count() > wordCacheMaxEntries) {
|
||||
NS_WARNING("flushing shaped-word cache");
|
||||
ClearCachedWords();
|
||||
}
|
||||
|
||||
// if there's a cached entry for this word, just return it
|
||||
CacheHashKey key(aText, aLength, aHash,
|
||||
aRunScript,
|
||||
aAppUnitsPerDevUnit,
|
||||
aFlags);
|
||||
|
||||
CacheHashEntry *entry = mWordCache->PutEntry(key);
|
||||
if (!entry) {
|
||||
NS_WARNING("failed to create word cache entry - expect missing text");
|
||||
return nullptr;
|
||||
}
|
||||
gfxShapedWord* sw = entry->mShapedWord.get();
|
||||
|
||||
if (sw) {
|
||||
sw->ResetAge();
|
||||
#ifndef RELEASE_OR_BETA
|
||||
if (aTextPerf) {
|
||||
aTextPerf->current.wordCacheHit++;
|
||||
}
|
||||
#endif
|
||||
return sw;
|
||||
}
|
||||
|
||||
#ifndef RELEASE_OR_BETA
|
||||
if (aTextPerf) {
|
||||
aTextPerf->current.wordCacheMiss++;
|
||||
}
|
||||
#endif
|
||||
|
||||
sw = gfxShapedWord::Create(aText, aLength, aRunScript, aAppUnitsPerDevUnit,
|
||||
aFlags);
|
||||
entry->mShapedWord.reset(sw);
|
||||
if (!sw) {
|
||||
NS_WARNING("failed to create gfxShapedWord - expect missing text");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DebugOnly<bool> ok =
|
||||
ShapeText(aDrawTarget, aText, 0, aLength, aRunScript, aVertical, sw);
|
||||
|
||||
NS_WARNING_ASSERTION(ok, "failed to shape word - expect garbled text");
|
||||
|
||||
return sw;
|
||||
}
|
||||
|
||||
#endif // GFX_FONT_IMPL_H
|
||||
|
|
@ -4,6 +4,7 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "gfxFont.h"
|
||||
#include "gfxFont-Impl.h"
|
||||
|
||||
#include "mozilla/BinarySearch.h"
|
||||
#include "mozilla/DebugOnly.h"
|
||||
|
|
@ -2544,70 +2545,7 @@ IsBoundarySpace(char16_t aChar, char16_t aNextChar)
|
|||
#define GFX_MAYBE_UNUSED
|
||||
#endif
|
||||
|
||||
template<typename T>
|
||||
gfxShapedWord*
|
||||
gfxFont::GetShapedWord(DrawTarget *aDrawTarget,
|
||||
const T *aText,
|
||||
uint32_t aLength,
|
||||
uint32_t aHash,
|
||||
Script aRunScript,
|
||||
bool aVertical,
|
||||
int32_t aAppUnitsPerDevUnit,
|
||||
uint32_t aFlags,
|
||||
gfxTextPerfMetrics *aTextPerf GFX_MAYBE_UNUSED)
|
||||
{
|
||||
// if the cache is getting too big, flush it and start over
|
||||
uint32_t wordCacheMaxEntries =
|
||||
gfxPlatform::GetPlatform()->WordCacheMaxEntries();
|
||||
if (mWordCache->Count() > wordCacheMaxEntries) {
|
||||
NS_WARNING("flushing shaped-word cache");
|
||||
ClearCachedWords();
|
||||
}
|
||||
|
||||
// if there's a cached entry for this word, just return it
|
||||
CacheHashKey key(aText, aLength, aHash,
|
||||
aRunScript,
|
||||
aAppUnitsPerDevUnit,
|
||||
aFlags);
|
||||
|
||||
CacheHashEntry *entry = mWordCache->PutEntry(key);
|
||||
if (!entry) {
|
||||
NS_WARNING("failed to create word cache entry - expect missing text");
|
||||
return nullptr;
|
||||
}
|
||||
gfxShapedWord* sw = entry->mShapedWord.get();
|
||||
|
||||
if (sw) {
|
||||
sw->ResetAge();
|
||||
#ifndef RELEASE_OR_BETA
|
||||
if (aTextPerf) {
|
||||
aTextPerf->current.wordCacheHit++;
|
||||
}
|
||||
#endif
|
||||
return sw;
|
||||
}
|
||||
|
||||
#ifndef RELEASE_OR_BETA
|
||||
if (aTextPerf) {
|
||||
aTextPerf->current.wordCacheMiss++;
|
||||
}
|
||||
#endif
|
||||
|
||||
sw = gfxShapedWord::Create(aText, aLength, aRunScript, aAppUnitsPerDevUnit,
|
||||
aFlags);
|
||||
entry->mShapedWord.reset(sw);
|
||||
if (!sw) {
|
||||
NS_WARNING("failed to create gfxShapedWord - expect missing text");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DebugOnly<bool> ok =
|
||||
ShapeText(aDrawTarget, aText, 0, aLength, aRunScript, aVertical, sw);
|
||||
|
||||
NS_WARNING_ASSERTION(ok, "failed to shape word - expect garbled text");
|
||||
|
||||
return sw;
|
||||
}
|
||||
/* GetShapedWord is in gfxFont-Impl.h */
|
||||
|
||||
bool
|
||||
gfxFont::CacheHashEntry::KeyEquals(const KeyTypePointer aKey) const
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
#include "nsString.h"
|
||||
#include "gfxPoint.h"
|
||||
#include "gfxFont.h"
|
||||
#include "gfxFont-Impl.h"
|
||||
#include "gfxFontConstants.h"
|
||||
#include "nsTArray.h"
|
||||
#include "gfxSkipChars.h"
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ EXPORTS += [
|
|||
'gfxDrawable.h',
|
||||
'gfxEnv.h',
|
||||
'gfxFailure.h',
|
||||
'gfxFont-Impl.h',
|
||||
'gfxFont.h',
|
||||
'gfxFontConstants.h',
|
||||
'gfxFontEntry.h',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue