From fd879e56f0b5dfdaefd7f1155b135fc5d4c55cab Mon Sep 17 00:00:00 2001 From: Exeldro Date: Sat, 21 Sep 2019 19:53:07 +0200 Subject: [PATCH 1/2] obs-text: text transform add locale Support transform accented characters --- plugins/obs-text/gdiplus/obs-text.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/obs-text/gdiplus/obs-text.cpp b/plugins/obs-text/gdiplus/obs-text.cpp index c4528214b..106220b08 100644 --- a/plugins/obs-text/gdiplus/obs-text.cpp +++ b/plugins/obs-text/gdiplus/obs-text.cpp @@ -657,10 +657,12 @@ void TextSource::LoadFileText() void TextSource::TransformText() { + const locale loc = locale(obs_get_locale()); + const ctype &f = use_facet>(loc); if (text_transform == S_TRANSFORM_UPPERCASE) - transform(text.begin(), text.end(), text.begin(), towupper); + f.toupper(&text[0], &text[0] + text.size()); else if (text_transform == S_TRANSFORM_LOWERCASE) - transform(text.begin(), text.end(), text.begin(), towlower); + f.tolower(&text[0], &text[0] + text.size()); } #define obs_data_get_uint32 (uint32_t) obs_data_get_int From ffb58f51d57f6b9b5185209c49843ebc305860a5 Mon Sep 17 00:00:00 2001 From: Exeldro Date: Sat, 21 Sep 2019 21:26:07 +0200 Subject: [PATCH 2/2] obs-text: text transform add start case Add option to transform to start case --- plugins/obs-text/data/locale/en-US.ini | 1 + plugins/obs-text/gdiplus/obs-text.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/plugins/obs-text/data/locale/en-US.ini b/plugins/obs-text/data/locale/en-US.ini index 260243b0e..f44f94511 100644 --- a/plugins/obs-text/data/locale/en-US.ini +++ b/plugins/obs-text/data/locale/en-US.ini @@ -35,3 +35,4 @@ Transform="Text Transform" Transform.None="None" Transform.Uppercase="Uppercase" Transform.Lowercase="Lowercase" +Transform.Startcase="Start Case" diff --git a/plugins/obs-text/gdiplus/obs-text.cpp b/plugins/obs-text/gdiplus/obs-text.cpp index 106220b08..c4f760f02 100644 --- a/plugins/obs-text/gdiplus/obs-text.cpp +++ b/plugins/obs-text/gdiplus/obs-text.cpp @@ -80,6 +80,7 @@ using namespace Gdiplus; #define S_TRANSFORM_NONE 0 #define S_TRANSFORM_UPPERCASE 1 #define S_TRANSFORM_LOWERCASE 2 +#define S_TRANSFORM_STARTCASE 3 #define T_(v) obs_module_text(v) #define T_FONT T_("Font") @@ -123,6 +124,7 @@ using namespace Gdiplus; #define T_TRANSFORM_NONE T_("Transform.None") #define T_TRANSFORM_UPPERCASE T_("Transform.Uppercase") #define T_TRANSFORM_LOWERCASE T_("Transform.Lowercase") +#define T_TRANSFORM_STARTCASE T_("Transform.Startcase") /* clang-format on */ @@ -663,6 +665,22 @@ void TextSource::TransformText() f.toupper(&text[0], &text[0] + text.size()); else if (text_transform == S_TRANSFORM_LOWERCASE) f.tolower(&text[0], &text[0] + text.size()); + else if (text_transform == S_TRANSFORM_STARTCASE) { + bool upper = true; + for (wstring::iterator it = text.begin(); it != text.end(); + ++it) { + const wchar_t upper_char = f.toupper(*it); + const wchar_t lower_char = f.tolower(*it); + if (upper && lower_char != upper_char) { + upper = false; + *it = upper_char; + } else if (lower_char != upper_char) { + *it = lower_char; + } else { + upper = iswspace(*it); + } + } + } } #define obs_data_get_uint32 (uint32_t) obs_data_get_int @@ -953,6 +971,8 @@ static obs_properties_t *get_properties(void *data) S_TRANSFORM_UPPERCASE); obs_property_list_add_int(p, T_TRANSFORM_LOWERCASE, S_TRANSFORM_LOWERCASE); + obs_property_list_add_int(p, T_TRANSFORM_STARTCASE, + S_TRANSFORM_STARTCASE); obs_properties_add_bool(props, S_VERTICAL, T_VERTICAL); obs_properties_add_color(props, S_COLOR, T_COLOR);