New upstream version 25.0.3+dfsg1

This commit is contained in:
Sebastian Ramacher 2020-03-25 09:07:22 +01:00
parent 04fe0efc67
commit 8b2e5f2130
569 changed files with 62491 additions and 5875 deletions

View file

@ -8,6 +8,7 @@
#include <algorithm>
#include <string>
#include <memory>
#include <locale>
using namespace std;
using namespace Gdiplus;
@ -80,6 +81,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 +125,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 */
@ -657,10 +660,28 @@ void TextSource::LoadFileText()
void TextSource::TransformText()
{
const locale loc = locale(obs_get_locale());
const ctype<wchar_t> &f = use_facet<ctype<wchar_t>>(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());
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
@ -951,6 +972,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);
@ -1012,13 +1035,43 @@ static obs_properties_t *get_properties(void *data)
return props;
}
static void defaults(obs_data_t *settings, int ver)
{
obs_data_t *font_obj = obs_data_create();
obs_data_set_default_string(font_obj, "face", "Arial");
obs_data_set_default_int(font_obj, "size", ver == 1 ? 36 : 256);
obs_data_set_default_obj(settings, S_FONT, font_obj);
obs_data_set_default_string(settings, S_ALIGN, S_ALIGN_LEFT);
obs_data_set_default_string(settings, S_VALIGN, S_VALIGN_TOP);
obs_data_set_default_int(settings, S_COLOR, 0xFFFFFF);
obs_data_set_default_int(settings, S_OPACITY, 100);
obs_data_set_default_int(settings, S_GRADIENT_COLOR, 0xFFFFFF);
obs_data_set_default_int(settings, S_GRADIENT_OPACITY, 100);
obs_data_set_default_double(settings, S_GRADIENT_DIR, 90.0);
obs_data_set_default_int(settings, S_BKCOLOR, 0x000000);
obs_data_set_default_int(settings, S_BKOPACITY, 0);
obs_data_set_default_int(settings, S_OUTLINE_SIZE, 2);
obs_data_set_default_int(settings, S_OUTLINE_COLOR, 0xFFFFFF);
obs_data_set_default_int(settings, S_OUTLINE_OPACITY, 100);
obs_data_set_default_int(settings, S_CHATLOG_LINES, 6);
obs_data_set_default_bool(settings, S_EXTENTS_WRAP, true);
obs_data_set_default_int(settings, S_EXTENTS_CX, 100);
obs_data_set_default_int(settings, S_EXTENTS_CY, 100);
obs_data_set_default_int(settings, S_TRANSFORM, S_TRANSFORM_NONE);
obs_data_release(font_obj);
};
bool obs_module_load(void)
{
obs_source_info si = {};
si.id = "text_gdiplus";
si.type = OBS_SOURCE_TYPE_INPUT;
si.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW;
si.output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW |
OBS_SOURCE_CAP_OBSOLETE;
si.get_properties = get_properties;
si.icon_type = OBS_ICON_TYPE_TEXT;
si.get_name = [](void *) { return obs_module_text("TextGDIPlus"); };
si.create = [](obs_data_t *settings, obs_source_t *source) {
@ -1033,33 +1086,7 @@ bool obs_module_load(void)
si.get_height = [](void *data) {
return reinterpret_cast<TextSource *>(data)->cy;
};
si.get_defaults = [](obs_data_t *settings) {
obs_data_t *font_obj = obs_data_create();
obs_data_set_default_string(font_obj, "face", "Arial");
obs_data_set_default_int(font_obj, "size", 36);
obs_data_set_default_obj(settings, S_FONT, font_obj);
obs_data_set_default_string(settings, S_ALIGN, S_ALIGN_LEFT);
obs_data_set_default_string(settings, S_VALIGN, S_VALIGN_TOP);
obs_data_set_default_int(settings, S_COLOR, 0xFFFFFF);
obs_data_set_default_int(settings, S_OPACITY, 100);
obs_data_set_default_int(settings, S_GRADIENT_COLOR, 0xFFFFFF);
obs_data_set_default_int(settings, S_GRADIENT_OPACITY, 100);
obs_data_set_default_double(settings, S_GRADIENT_DIR, 90.0);
obs_data_set_default_int(settings, S_BKCOLOR, 0x000000);
obs_data_set_default_int(settings, S_BKOPACITY, 0);
obs_data_set_default_int(settings, S_OUTLINE_SIZE, 2);
obs_data_set_default_int(settings, S_OUTLINE_COLOR, 0xFFFFFF);
obs_data_set_default_int(settings, S_OUTLINE_OPACITY, 100);
obs_data_set_default_int(settings, S_CHATLOG_LINES, 6);
obs_data_set_default_bool(settings, S_EXTENTS_WRAP, true);
obs_data_set_default_int(settings, S_EXTENTS_CX, 100);
obs_data_set_default_int(settings, S_EXTENTS_CY, 100);
obs_data_set_default_int(settings, S_TRANSFORM,
S_TRANSFORM_NONE);
obs_data_release(font_obj);
};
si.get_defaults = [](obs_data_t *settings) { defaults(settings, 1); };
si.update = [](void *data, obs_data_t *settings) {
reinterpret_cast<TextSource *>(data)->Update(settings);
};
@ -1070,7 +1097,15 @@ bool obs_module_load(void)
reinterpret_cast<TextSource *>(data)->Render();
};
obs_source_info si_v2 = si;
si_v2.version = 2;
si_v2.output_flags &= ~OBS_SOURCE_CAP_OBSOLETE;
si_v2.get_defaults = [](obs_data_t *settings) {
defaults(settings, 2);
};
obs_register_source(&si);
obs_register_source(&si_v2);
const GdiplusStartupInput gdip_input;
GdiplusStartup(&gdip_token, &gdip_input, nullptr);