diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index a5914744..018b2638 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -84,6 +84,8 @@ const QHash WSRequestHandler::messageMap { { "SetCurrentTransition", &WSRequestHandler::SetCurrentTransition }, { "SetTransitionDuration", &WSRequestHandler::SetTransitionDuration }, { "GetTransitionDuration", &WSRequestHandler::GetTransitionDuration }, + { "SetTBarPosition", &WSRequestHandler::SetTBarPosition }, + { "GetTransitionPosition", &WSRequestHandler::GetTransitionPosition }, { "SetVolume", &WSRequestHandler::SetVolume }, { "GetVolume", &WSRequestHandler::GetVolume }, @@ -130,7 +132,6 @@ const QHash WSRequestHandler::messageMap { { "EnableStudioMode", &WSRequestHandler::EnableStudioMode }, { "DisableStudioMode", &WSRequestHandler::DisableStudioMode }, { "ToggleStudioMode", &WSRequestHandler::ToggleStudioMode }, - { "SetTBarPosition", &WSRequestHandler::SetTBarPosition }, { "SetTextGDIPlusProperties", &WSRequestHandler::SetTextGDIPlusProperties }, { "GetTextGDIPlusProperties", &WSRequestHandler::GetTextGDIPlusProperties }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index a644bca4..5dc30894 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -99,6 +99,10 @@ class WSRequestHandler { RpcResponse GetTransitionList(const RpcRequest&); RpcResponse GetCurrentTransition(const RpcRequest&); RpcResponse SetCurrentTransition(const RpcRequest&); + RpcResponse SetTransitionDuration(const RpcRequest&); + RpcResponse GetTransitionDuration(const RpcRequest&); + RpcResponse SetTBarPosition(const RpcRequest&); + RpcResponse GetTransitionPosition(const RpcRequest&); RpcResponse SetVolume(const RpcRequest&); RpcResponse GetVolume(const RpcRequest&); @@ -138,9 +142,6 @@ class WSRequestHandler { RpcResponse SendCaptions(const RpcRequest&); #endif - RpcResponse SetTransitionDuration(const RpcRequest&); - RpcResponse GetTransitionDuration(const RpcRequest&); - RpcResponse GetStudioModeStatus(const RpcRequest&); RpcResponse GetPreviewScene(const RpcRequest&); RpcResponse SetPreviewScene(const RpcRequest&); @@ -148,7 +149,6 @@ class WSRequestHandler { RpcResponse EnableStudioMode(const RpcRequest&); RpcResponse DisableStudioMode(const RpcRequest&); RpcResponse ToggleStudioMode(const RpcRequest&); - RpcResponse SetTBarPosition(const RpcRequest&); RpcResponse SetTextGDIPlusProperties(const RpcRequest&); RpcResponse GetTextGDIPlusProperties(const RpcRequest&); diff --git a/src/WSRequestHandler_StudioMode.cpp b/src/WSRequestHandler_StudioMode.cpp index cd103c83..042db61b 100644 --- a/src/WSRequestHandler_StudioMode.cpp +++ b/src/WSRequestHandler_StudioMode.cpp @@ -176,31 +176,4 @@ RpcResponse WSRequestHandler::ToggleStudioMode(const RpcRequest& request) { }, nullptr, true); return request.success(); -} - -/** - * Set the position of the T-Bar (in Studio Mode) to the specified value. Will return an error if OBS is not in studio mode - * or if the current transition doesn't support T-Bar control. - * - * @param {double} `position` T-Bar position. This value will be clamped between 0.0 and 1.0. - * - * @api requests - * @name SetTBarPosition - * @category studio mode - * @since 4.8.0 - */ -RpcResponse WSRequestHandler::SetTBarPosition(const RpcRequest& request) { - if (!obs_frontend_preview_program_mode_active()) { - return request.failed("studio mode not enabled"); - } - - OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); - if (obs_transition_fixed(currentTransition)) { - return request.failed("current transition doesn't support t-bar control"); - } - - double position = obs_data_get_double(request.parameters(), "position"); - obs_transition_set_manual_time(currentTransition, position); - - return request.success(); -} +} \ No newline at end of file diff --git a/src/WSRequestHandler_Transitions.cpp b/src/WSRequestHandler_Transitions.cpp index 7c22687c..a2ba2125 100644 --- a/src/WSRequestHandler_Transitions.cpp +++ b/src/WSRequestHandler_Transitions.cpp @@ -120,3 +120,53 @@ RpcResponse WSRequestHandler::GetTransitionDuration(const RpcRequest& request) { obs_data_set_int(response, "transition-duration", obs_frontend_get_transition_duration()); return request.success(response); } + +/** + * Set the manual position of the T-Bar (in Studio Mode) to the specified value. Will return an error if OBS is not in studio mode + * or if the current transition doesn't support T-Bar control. + * + * @param {double} `position` T-Bar position. This value must be between 0.0 and 1.0. + * + * @api requests + * @name SetTBarPosition + * @category transitions + * @since 4.8.0 + */ +RpcResponse WSRequestHandler::SetTBarPosition(const RpcRequest& request) { + if (!obs_frontend_preview_program_mode_active()) { + return request.failed("studio mode not enabled"); + } + + OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); + if (obs_transition_fixed(currentTransition)) { + return request.failed("current transition doesn't support t-bar control"); + } + + double position = obs_data_get_double(request.parameters(), "position"); + if (position < 0.0 || position > 1.0) { + return request.failed("position is out of range"); + } + + obs_transition_set_manual_time(currentTransition, position); + + return request.success(); +} + +/** + * Get the position of the current transition. + * + * @return {double} `position` current transition position. This value will be between 0.0 and 1.0. Note: Transition returns 1.0 when not active. + * + * @api requests + * @name GetTransitionPosition + * @category transitions + * @since 4.8.0 + */ +RpcResponse WSRequestHandler::GetTransitionPosition(const RpcRequest& request) { + OBSSourceAutoRelease currentTransition = obs_frontend_get_current_transition(); + + OBSDataAutoRelease response = obs_data_create(); + obs_data_set_double(response, "position", obs_transition_get_time(currentTransition)); + + return request.success(response); +} \ No newline at end of file