From 0cdfa6e7f6c8c5e56852a05457a9b2b96bfdd82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Sun, 23 Dec 2018 18:16:44 +0100 Subject: [PATCH 1/7] sources: import ft2 methods + fix them --- src/WSRequestHandler.cpp | 3 + src/WSRequestHandler.h | 4 + src/WSRequestHandler_Sources.cpp | 182 ++++++++++++++++++++++++++++++- 3 files changed, 188 insertions(+), 1 deletion(-) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 85882848..91edcf1f 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -114,6 +114,9 @@ QHash WSRequestHandler::messageMap { { "SetTextGDIPlusProperties", WSRequestHandler::HandleSetTextGDIPlusProperties }, { "GetTextGDIPlusProperties", WSRequestHandler::HandleGetTextGDIPlusProperties }, + { "SetTextFreetype2Properties", WSRequestHandler::HandleSetTextFreetype2Properties }, + { "GetTextFreetype2Properties", WSRequestHandler::HandleGetTextFreetype2Properties }, + { "GetBrowserSourceProperties", WSRequestHandler::HandleGetBrowserSourceProperties }, { "SetBrowserSourceProperties", WSRequestHandler::HandleSetBrowserSourceProperties } }; diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 2b74ee76..65987f56 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -141,6 +141,10 @@ class WSRequestHandler : public QObject { static void HandleSetTextGDIPlusProperties(WSRequestHandler* req); static void HandleGetTextGDIPlusProperties(WSRequestHandler* req); + + static void HandleSetTextFreetype2Properties(WSRequestHandler* req); + static void HandleGetTextFreetype2Properties(WSRequestHandler* req); + static void HandleSetBrowserSourceProperties(WSRequestHandler* req); static void HandleGetBrowserSourceProperties(WSRequestHandler* req); }; diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index bf62bbdf..51cc9212 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -582,7 +582,7 @@ void WSRequestHandler::HandleSetSourceSettings(WSRequestHandler* req) { } /** - * Get the current properties of a Text GDI Plus source. + * Set the current properties of a Text GDI Plus source. * * @param {String (optional)} `scene-name` Name of the scene to retrieve. Defaults to the current scene. * @param {String} `source` Name of the source. @@ -808,6 +808,186 @@ void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) { } } +/** + * Get the current properties of a Text Freetype 2 source. + * + * @param {String} `source` Name of the source. + * + * @return {String} `source` Source name + * @return {int} `color1` Gradient top color. + * @return {int} `color2` Gradient bottom color. + * @return {int} `custom_width` Custom width (0 to disable). + * @return {boolean} `drop_shadow` Drop shadow. + * @return {Object} `font` Holds data for the font. Ex: `"font": { "face": "Arial", "flags": 0, "size": 150, "style": "" }` + * @return {String} `font.face` Font face. + * @return {int} `font.flags` Font text styling flag. `Bold=1, Italic=2, Bold Italic=3, Underline=5, Strikeout=8` + * @return {int} `font.size` Font text size. + * @return {String} `font.style` Font Style (unknown function). + * @return {boolean} `from_file` Read text from the specified file. + * @return {boolean} `log_mode` Chat log. + * @return {boolean} `outline` Outline. + * @return {String} `text` Text content to be displayed. + * @return {String} `text_file` File path. + * @return {boolean} `word_wrap` Word wrap. + * + * @api requests + * @name GetTextFreetype2Properties + * @category sources + * @since 4.x.x + */ +void WSRequestHandler::HandleGetTextFreetype2Properties(WSRequestHandler* req) { + const char* sourceName = obs_data_get_string(req->data, "source"); + if (!sourceName) { + req->SendErrorResponse("invalid request parameters"); + return; + } + + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } + + QString sourceId = obs_source_get_id(source); + if (!source.equals("text_ft2_source")) { + req->SendErrorResponse("not a freetype 2 source"); + return; + } + + OBSDataAutoRelease response = obs_source_get_settings(source); + obs_data_set_string(response, "source", itemName); + + req->SendOKResponse(response); +} + +/** + * Set the current properties of a Text Freetype 2 source. + * + * @param {String} `source` Name of the source. + * @param {int (optional)} `color1` Gradient top color. + * @param {int (optional)} `color2` Gradient bottom color. + * @param {int (optional)} `custom_width` Custom width (0 to disable). + * @param {boolean (optional)} `drop_shadow` Drop shadow. + * @param {Object (optional)} `font` Holds data for the font. Ex: `"font": { "face": "Arial", "flags": 0, "size": 150, "style": "" }` + * @param {String (optional)} `font.face` Font face. + * @param {int (optional)} `font.flags` Font text styling flag. `Bold=1, Italic=2, Bold Italic=3, Underline=5, Strikeout=8` + * @param {int (optional)} `font.size` Font text size. + * @param {String (optional)} `font.style` Font Style (unknown function). + * @param {boolean (optional)} `from_file` Read text from the specified file. + * @param {boolean (optional)} `log_mode` Chat log. + * @param {boolean (optional)} `outline` Outline. + * @param {String (optional)} `text` Text content to be displayed. + * @param {String (optional)} `text_file` File path. + * @param {boolean (optional)} `word_wrap` Word wrap. + * + * @api requests + * @name SetTextFreetype2Properties + * @category sources + * @since 4.x.x + */ +void WSRequestHandler::HandleSetTextFreetype2Properties(WSRequestHandler* req) { + const char* sourceName = obs_data_get_string(req->data, "source"); + if (!sourceName) { + req->SendErrorResponse("invalid request parameters"); + return; + } + + OBSSourceAutoRelease source = obs_get_source_by_name(sourceName); + if (!source) { + req->SendErrorResponse("specified source doesn't exist"); + return; + } + + QString sourceId = obs_source_get_id(source); + if (!sourceId.equals("text_ft2_source")) { + req->SendErrorResponse("not text freetype 2 source"); + return; + } + + OBSDataAutoRelease settings = obs_source_get_settings(sceneItemSource); + + if (req->hasField("color1")) { + obs_data_set_int(settings, "color1", + obs_data_get_int(req->data, "color1")); + } + + if (req->hasField("color2")) { + obs_data_set_int(settings, "color2", + obs_data_get_int(req->data, "color2")); + } + + if (req->hasField("custom_width")) { + obs_data_set_int(settings, "custom_width", + obs_data_get_int(req->data, "custom_width")); + } + + if (req->hasField("drop_shadow")) { + obs_data_set_bool(settings, "drop_shadow", + obs_data_get_bool(req->data, "drop_shadow")); + } + + if (req->hasField("font")) { + OBSDataAutoRelease font_obj = obs_data_get_obj(settings, "font"); + if (font_obj) { + OBSDataAutoRelease req_font_obj = obs_data_get_obj(req->data, "font"); + + if (obs_data_has_user_value(req_font_obj, "face")) { + obs_data_set_string(font_obj, "face", + obs_data_get_string(req_font_obj, "face")); + } + + if (obs_data_has_user_value(req_font_obj, "flags")) { + obs_data_set_int(font_obj, "flags", + obs_data_get_int(req_font_obj, "flags")); + } + + if (obs_data_has_user_value(req_font_obj, "size")) { + obs_data_set_int(font_obj, "size", + obs_data_get_int(req_font_obj, "size")); + } + + if (obs_data_has_user_value(req_font_obj, "style")) { + obs_data_set_string(font_obj, "style", + obs_data_get_string(req_font_obj, "style")); + } + } + } + + if (req->hasField("from_file")) { + obs_data_set_bool(settings, "from_file", + obs_data_get_bool(req->data, "from_file")); + } + + if (req->hasField("log_mode")) { + obs_data_set_bool(settings, "log_mode", + obs_data_get_bool(req->data, "log_mode")); + } + + if (req->hasField("outline")) { + obs_data_set_bool(settings, "outline", + obs_data_get_bool(req->data, "outline")); + } + + if (req->hasField("text")) { + obs_data_set_string(settings, "text", + obs_data_get_string(req->data, "text")); + } + + if (req->hasField("text_file")) { + obs_data_set_string(settings, "text_file", + obs_data_get_string(req->data, "text_file")); + } + + if (req->hasField("word_wrap")) { + obs_data_set_bool(settings, "word_wrap", + obs_data_get_bool(req->data, "word_wrap")); + } + + obs_source_update(source, settings); + + req->SendOKResponse(); +} + /** * Get current properties for a Browser Source. * From 7aff773e2cd4ca7e98b986fd721ec0decb7c3cd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Sun, 23 Dec 2018 18:19:29 +0100 Subject: [PATCH 2/7] sources: fix ft2 method indents --- src/WSRequestHandler_Sources.cpp | 42 +++++++++++--------------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 51cc9212..382206b9 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -907,23 +907,19 @@ void WSRequestHandler::HandleSetTextFreetype2Properties(WSRequestHandler* req) { OBSDataAutoRelease settings = obs_source_get_settings(sceneItemSource); if (req->hasField("color1")) { - obs_data_set_int(settings, "color1", - obs_data_get_int(req->data, "color1")); + obs_data_set_int(settings, "color1", obs_data_get_int(req->data, "color1")); } if (req->hasField("color2")) { - obs_data_set_int(settings, "color2", - obs_data_get_int(req->data, "color2")); + obs_data_set_int(settings, "color2", obs_data_get_int(req->data, "color2")); } if (req->hasField("custom_width")) { - obs_data_set_int(settings, "custom_width", - obs_data_get_int(req->data, "custom_width")); + obs_data_set_int(settings, "custom_width", obs_data_get_int(req->data, "custom_width")); } if (req->hasField("drop_shadow")) { - obs_data_set_bool(settings, "drop_shadow", - obs_data_get_bool(req->data, "drop_shadow")); + obs_data_set_bool(settings, "drop_shadow", obs_data_get_bool(req->data, "drop_shadow")); } if (req->hasField("font")) { @@ -932,55 +928,45 @@ void WSRequestHandler::HandleSetTextFreetype2Properties(WSRequestHandler* req) { OBSDataAutoRelease req_font_obj = obs_data_get_obj(req->data, "font"); if (obs_data_has_user_value(req_font_obj, "face")) { - obs_data_set_string(font_obj, "face", - obs_data_get_string(req_font_obj, "face")); + obs_data_set_string(font_obj, "face", obs_data_get_string(req_font_obj, "face")); } if (obs_data_has_user_value(req_font_obj, "flags")) { - obs_data_set_int(font_obj, "flags", - obs_data_get_int(req_font_obj, "flags")); + obs_data_set_int(font_obj, "flags", obs_data_get_int(req_font_obj, "flags")); } if (obs_data_has_user_value(req_font_obj, "size")) { - obs_data_set_int(font_obj, "size", - obs_data_get_int(req_font_obj, "size")); + obs_data_set_int(font_obj, "size", obs_data_get_int(req_font_obj, "size")); } if (obs_data_has_user_value(req_font_obj, "style")) { - obs_data_set_string(font_obj, "style", - obs_data_get_string(req_font_obj, "style")); + obs_data_set_string(font_obj, "style", obs_data_get_string(req_font_obj, "style")); } } } if (req->hasField("from_file")) { - obs_data_set_bool(settings, "from_file", - obs_data_get_bool(req->data, "from_file")); + obs_data_set_bool(settings, "from_file", obs_data_get_bool(req->data, "from_file")); } if (req->hasField("log_mode")) { - obs_data_set_bool(settings, "log_mode", - obs_data_get_bool(req->data, "log_mode")); + obs_data_set_bool(settings, "log_mode", obs_data_get_bool(req->data, "log_mode")); } if (req->hasField("outline")) { - obs_data_set_bool(settings, "outline", - obs_data_get_bool(req->data, "outline")); + obs_data_set_bool(settings, "outline", obs_data_get_bool(req->data, "outline")); } if (req->hasField("text")) { - obs_data_set_string(settings, "text", - obs_data_get_string(req->data, "text")); + obs_data_set_string(settings, "text", obs_data_get_string(req->data, "text")); } if (req->hasField("text_file")) { - obs_data_set_string(settings, "text_file", - obs_data_get_string(req->data, "text_file")); + obs_data_set_string(settings, "text_file", obs_data_get_string(req->data, "text_file")); } if (req->hasField("word_wrap")) { - obs_data_set_bool(settings, "word_wrap", - obs_data_get_bool(req->data, "word_wrap")); + obs_data_set_bool(settings, "word_wrap", obs_data_get_bool(req->data, "word_wrap")); } obs_source_update(source, settings); From ae2f90c5c2b9b8a7b01c68c0df9cb81b5cd423a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Sun, 23 Dec 2018 18:20:45 +0100 Subject: [PATCH 3/7] sources: fix indents --- src/WSRequestHandler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 91edcf1f..fbdccc97 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -115,7 +115,7 @@ QHash WSRequestHandler::messageMap { { "GetTextGDIPlusProperties", WSRequestHandler::HandleGetTextGDIPlusProperties }, { "SetTextFreetype2Properties", WSRequestHandler::HandleSetTextFreetype2Properties }, - { "GetTextFreetype2Properties", WSRequestHandler::HandleGetTextFreetype2Properties }, + { "GetTextFreetype2Properties", WSRequestHandler::HandleGetTextFreetype2Properties }, { "GetBrowserSourceProperties", WSRequestHandler::HandleGetBrowserSourceProperties }, { "SetBrowserSourceProperties", WSRequestHandler::HandleSetBrowserSourceProperties } From 8a40f355c86847f364c2ecf5d3abab03f6cd0d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Sun, 23 Dec 2018 18:21:31 +0100 Subject: [PATCH 4/7] sources: fix indents again --- src/WSRequestHandler.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index 65987f56..ad3b779e 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -143,7 +143,7 @@ class WSRequestHandler : public QObject { static void HandleGetTextGDIPlusProperties(WSRequestHandler* req); static void HandleSetTextFreetype2Properties(WSRequestHandler* req); - static void HandleGetTextFreetype2Properties(WSRequestHandler* req); + static void HandleGetTextFreetype2Properties(WSRequestHandler* req); static void HandleSetBrowserSourceProperties(WSRequestHandler* req); static void HandleGetBrowserSourceProperties(WSRequestHandler* req); From 14b311f6abb923607a31db58995ff9a2d0f2ca13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Sun, 23 Dec 2018 18:26:57 +0100 Subject: [PATCH 5/7] sources(ft2): fix errors --- src/WSRequestHandler_Sources.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 382206b9..c12fa672 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -849,13 +849,13 @@ void WSRequestHandler::HandleGetTextFreetype2Properties(WSRequestHandler* req) { } QString sourceId = obs_source_get_id(source); - if (!source.equals("text_ft2_source")) { + if (sourceId != QString("text_ft2_source")) { req->SendErrorResponse("not a freetype 2 source"); return; } OBSDataAutoRelease response = obs_source_get_settings(source); - obs_data_set_string(response, "source", itemName); + obs_data_set_string(response, "source", sourceName); req->SendOKResponse(response); } @@ -899,12 +899,12 @@ void WSRequestHandler::HandleSetTextFreetype2Properties(WSRequestHandler* req) { } QString sourceId = obs_source_get_id(source); - if (!sourceId.equals("text_ft2_source")) { + if (sourceId != QString("text_ft2_source")) { req->SendErrorResponse("not text freetype 2 source"); return; } - OBSDataAutoRelease settings = obs_source_get_settings(sceneItemSource); + OBSDataAutoRelease settings = obs_source_get_settings(source); if (req->hasField("color1")) { obs_data_set_int(settings, "color1", obs_data_get_int(req->data, "color1")); From 682c349831cc089927c8ab2b98f6e8beb0fdaa82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Sun, 23 Dec 2018 18:30:27 +0100 Subject: [PATCH 6/7] sources(ft2): simplified qstring compare --- src/WSRequestHandler_Sources.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index c12fa672..0b039c5d 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -849,7 +849,7 @@ void WSRequestHandler::HandleGetTextFreetype2Properties(WSRequestHandler* req) { } QString sourceId = obs_source_get_id(source); - if (sourceId != QString("text_ft2_source")) { + if (sourceId != "text_ft2_source") { req->SendErrorResponse("not a freetype 2 source"); return; } @@ -899,7 +899,7 @@ void WSRequestHandler::HandleSetTextFreetype2Properties(WSRequestHandler* req) { } QString sourceId = obs_source_get_id(source); - if (sourceId != QString("text_ft2_source")) { + if (sourceId != "text_ft2_source") { req->SendErrorResponse("not text freetype 2 source"); return; } From e8fbb18a71be6968ca78938bf945b98ffc86d307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Sun, 23 Dec 2018 23:00:33 +0100 Subject: [PATCH 7/7] sources(ft2): fix docs --- src/WSRequestHandler_Sources.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WSRequestHandler_Sources.cpp b/src/WSRequestHandler_Sources.cpp index 0b039c5d..ee21bef8 100644 --- a/src/WSRequestHandler_Sources.cpp +++ b/src/WSRequestHandler_Sources.cpp @@ -811,7 +811,7 @@ void WSRequestHandler::HandleSetTextGDIPlusProperties(WSRequestHandler* req) { /** * Get the current properties of a Text Freetype 2 source. * - * @param {String} `source` Name of the source. + * @param {String} `source` Source name. * * @return {String} `source` Source name * @return {int} `color1` Gradient top color. @@ -863,7 +863,7 @@ void WSRequestHandler::HandleGetTextFreetype2Properties(WSRequestHandler* req) { /** * Set the current properties of a Text Freetype 2 source. * - * @param {String} `source` Name of the source. + * @param {String} `source` Source name. * @param {int (optional)} `color1` Gradient top color. * @param {int (optional)} `color2` Gradient bottom color. * @param {int (optional)} `custom_width` Custom width (0 to disable).