mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Convert WordWrapper to use std::string_view
This commit is contained in:
parent
f6ca8101e0
commit
4b45bde38f
6 changed files with 16 additions and 15 deletions
|
@ -141,7 +141,7 @@ void WordWrapper::AppendWord(int endIndex, int lastChar, bool addNewline) {
|
||||||
|
|
||||||
// This will include the newline.
|
// This will include the newline.
|
||||||
if (x_ <= maxW_) {
|
if (x_ <= maxW_) {
|
||||||
out_.append(str_ + lastWordStartIndex, str_ + endIndex);
|
out_.append(str_.data() + lastWordStartIndex, str_.data() + endIndex);
|
||||||
} else {
|
} else {
|
||||||
scanForNewline_ = true;
|
scanForNewline_ = true;
|
||||||
}
|
}
|
||||||
|
@ -178,10 +178,10 @@ void WordWrapper::AppendWord(int endIndex, int lastChar, bool addNewline) {
|
||||||
|
|
||||||
void WordWrapper::Wrap() {
|
void WordWrapper::Wrap() {
|
||||||
// First, let's check if it fits as-is.
|
// First, let's check if it fits as-is.
|
||||||
size_t len = strlen(str_);
|
size_t len = str_.length();
|
||||||
if (MeasureWidth(std::string_view(str_, len)) <= maxW_) {
|
if (MeasureWidth(str_) <= maxW_) {
|
||||||
// If it fits, we don't need to go through each character.
|
// If it fits, we don't need to go through each character.
|
||||||
out_ = str_;
|
out_ = std::string(str_);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ void WordWrapper::Wrap() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Measure the entire word for kerning purposes. May not be 100% perfect.
|
// Measure the entire word for kerning purposes. May not be 100% perfect.
|
||||||
float newWordWidth = MeasureWidth(std::string_view(str_ + lastIndex_, afterIndex - lastIndex_));
|
float newWordWidth = MeasureWidth(str_.substr(lastIndex_, afterIndex - lastIndex_));
|
||||||
|
|
||||||
// Is this the end of a word (space)? We'll also output up to a soft hyphen.
|
// Is this the end of a word (space)? We'll also output up to a soft hyphen.
|
||||||
if (wordWidth_ > 0.0f && IsSpaceOrShy(c)) {
|
if (wordWidth_ > 0.0f && IsSpaceOrShy(c)) {
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
class WordWrapper {
|
class WordWrapper {
|
||||||
public:
|
public:
|
||||||
WordWrapper(const char *str, float maxW, int flags)
|
WordWrapper(std::string_view str, float maxW, int flags)
|
||||||
: str_(str), maxW_(maxW), flags_(flags) {
|
: str_(str), maxW_(maxW), flags_(flags) {
|
||||||
}
|
}
|
||||||
virtual ~WordWrapper() {}
|
virtual ~WordWrapper() {}
|
||||||
|
@ -27,7 +27,7 @@ protected:
|
||||||
return IsSpace(c) || IsShy(c);
|
return IsSpace(c) || IsShy(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *const str_;
|
const std::string_view str_;
|
||||||
const float maxW_;
|
const float maxW_;
|
||||||
const int flags_;
|
const int flags_;
|
||||||
std::string out_;
|
std::string out_;
|
||||||
|
|
|
@ -446,7 +446,8 @@ void DrawBuffer::DrawImage2GridH(ImageID atlas_image, float x1, float y1, float
|
||||||
class AtlasWordWrapper : public WordWrapper {
|
class AtlasWordWrapper : public WordWrapper {
|
||||||
public:
|
public:
|
||||||
// Note: maxW may be height if rotated.
|
// Note: maxW may be height if rotated.
|
||||||
AtlasWordWrapper(const AtlasFont &atlasfont, float scale, const char *str, float maxW, int flags) : WordWrapper(str, maxW, flags), atlasfont_(atlasfont), scale_(scale) {
|
AtlasWordWrapper(const AtlasFont &atlasfont, float scale, std::string_view str, float maxW, int flags)
|
||||||
|
: WordWrapper(str, maxW, flags), atlasfont_(atlasfont), scale_(scale) {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -535,7 +536,7 @@ void DrawBuffer::MeasureTextRect(FontID font_id, std::string_view text, const Bo
|
||||||
*h = 0.0f;
|
*h = 0.0f;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AtlasWordWrapper wrapper(*font, fontscalex, toMeasure.c_str(), bounds.w, wrap);
|
AtlasWordWrapper wrapper(*font, fontscalex, toMeasure, bounds.w, wrap);
|
||||||
toMeasure = wrapper.Wrapped();
|
toMeasure = wrapper.Wrapped();
|
||||||
}
|
}
|
||||||
MeasureText(font_id, toMeasure, w, h);
|
MeasureText(font_id, toMeasure, w, h);
|
||||||
|
@ -578,7 +579,7 @@ void DrawBuffer::DrawTextRect(FontID font, const char *text, float x, float y, f
|
||||||
if (!atlasfont)
|
if (!atlasfont)
|
||||||
atlasfont = atlas->getFont(font);
|
atlasfont = atlas->getFont(font);
|
||||||
if (wrap && atlasfont) {
|
if (wrap && atlasfont) {
|
||||||
AtlasWordWrapper wrapper(*atlasfont, fontscalex, toDraw.c_str(), w, wrap);
|
AtlasWordWrapper wrapper(*atlasfont, fontscalex, toDraw, w, wrap);
|
||||||
toDraw = wrapper.Wrapped();
|
toDraw = wrapper.Wrapped();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -610,7 +611,7 @@ void DrawBuffer::DrawTextRect(FontID font, const char *text, float x, float y, f
|
||||||
// ROTATE_* doesn't yet work right.
|
// ROTATE_* doesn't yet work right.
|
||||||
void DrawBuffer::DrawText(FontID font, std::string_view text, float x, float y, Color color, int align) {
|
void DrawBuffer::DrawText(FontID font, std::string_view text, float x, float y, Color color, int align) {
|
||||||
// rough estimate
|
// rough estimate
|
||||||
int textLen = text.length();
|
int textLen = (int)text.length();
|
||||||
if (count_ + textLen * 6 > MAX_VERTS) {
|
if (count_ + textLen * 6 > MAX_VERTS) {
|
||||||
Flush(true);
|
Flush(true);
|
||||||
if (textLen * 6 >= MAX_VERTS) {
|
if (textLen * 6 >= MAX_VERTS) {
|
||||||
|
|
|
@ -26,7 +26,7 @@ float TextDrawerWordWrapper::MeasureWidth(std::string_view str) {
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextDrawer::WrapString(std::string &out, const char *str, float maxW, int flags) {
|
void TextDrawer::WrapString(std::string &out, std::string_view str, float maxW, int flags) {
|
||||||
TextDrawerWordWrapper wrapper(this, str, maxW, flags);
|
TextDrawerWordWrapper wrapper(this, str, maxW, flags);
|
||||||
out = wrapper.Wrapped();
|
out = wrapper.Wrapped();
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ protected:
|
||||||
|
|
||||||
Draw::DrawContext *draw_;
|
Draw::DrawContext *draw_;
|
||||||
virtual void ClearCache() = 0;
|
virtual void ClearCache() = 0;
|
||||||
void WrapString(std::string &out, const char *str, float maxWidth, int flags);
|
void WrapString(std::string &out, std::string_view str, float maxWidth, int flags);
|
||||||
|
|
||||||
struct CacheKey {
|
struct CacheKey {
|
||||||
bool operator < (const CacheKey &other) const {
|
bool operator < (const CacheKey &other) const {
|
||||||
|
@ -90,7 +90,7 @@ protected:
|
||||||
|
|
||||||
class TextDrawerWordWrapper : public WordWrapper {
|
class TextDrawerWordWrapper : public WordWrapper {
|
||||||
public:
|
public:
|
||||||
TextDrawerWordWrapper(TextDrawer *drawer, const char *str, float maxW, int flags)
|
TextDrawerWordWrapper(TextDrawer *drawer, std::string_view str, float maxW, int flags)
|
||||||
: WordWrapper(str, maxW, flags), drawer_(drawer) {}
|
: WordWrapper(str, maxW, flags), drawer_(drawer) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -788,7 +788,7 @@ static bool TestAndroidContentURI() {
|
||||||
|
|
||||||
class UnitTestWordWrapper : public WordWrapper {
|
class UnitTestWordWrapper : public WordWrapper {
|
||||||
public:
|
public:
|
||||||
UnitTestWordWrapper(const char *str, float maxW, int flags)
|
UnitTestWordWrapper(std::string_view str, float maxW, int flags)
|
||||||
: WordWrapper(str, maxW, flags) {
|
: WordWrapper(str, maxW, flags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue