New upstream version 25.0.3+dfsg1
This commit is contained in:
parent
04fe0efc67
commit
8b2e5f2130
569 changed files with 62491 additions and 5875 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue