refining bounds and adding scale to setter

This commit is contained in:
Teddy Stoddard 2017-10-15 11:57:21 -04:00
parent 3e14b41600
commit cc5f9c9aa7

View File

@ -1362,7 +1362,6 @@ void WSRequestHandler::HandleSetSceneItemCrop(WSRequestHandler* req) {
* @return {int} `crop.bottom` The number of pixels cropped off the bottom of the source before scaling. * @return {int} `crop.bottom` The number of pixels cropped off the bottom of the source before scaling.
* @return {int} `crop.left` The number of pixels cropped off the left of the source before scaling. * @return {int} `crop.left` The number of pixels cropped off the left of the source before scaling.
* @return {bool} `visible` If the source is visible. * @return {bool} `visible` If the source is visible.
* @return {bool/Object} `bounds` False if bounds are not turned on. Object if bounds are turned on.
* @return {String} `bounds.type` Type of bounding box. * @return {String} `bounds.type` Type of bounding box.
* @return {int} `bounds.alignment` Alignment of the bounding box. * @return {int} `bounds.alignment` Alignment of the bounding box.
* @return {double} `bounds.width` Width of the bounding box. * @return {double} `bounds.width` Width of the bounding box.
@ -1441,48 +1440,42 @@ void WSRequestHandler::HandleGetSceneItemProperties(WSRequestHandler* req) {
obs_data_t* bounds_data = obs_data_create(); obs_data_t* bounds_data = obs_data_create();
obs_bounds_type bounds_type = obs_sceneitem_get_bounds_type(scene_item); obs_bounds_type bounds_type = obs_sceneitem_get_bounds_type(scene_item);
if (bounds_type == OBS_BOUNDS_NONE) { if (bounds_type == OBS_BOUNDS_NONE) {
obs_data_set_bool(data, "bounds", false); obs_data_set_string(bounds_data, "type", "none");
} }
else { else {
switch(bounds_type) { switch(bounds_type) {
case OBS_BOUNDS_STRETCH: { case OBS_BOUNDS_STRETCH: {
obs_data_set_string(bounds_data, "type", "Stretch"); obs_data_set_string(bounds_data, "type", "stretch");
break; break;
} }
case OBS_BOUNDS_SCALE_INNER: { case OBS_BOUNDS_SCALE_INNER: {
obs_data_set_string(bounds_data, "type", "Inner"); obs_data_set_string(bounds_data, "type", "inner");
break; break;
} }
case OBS_BOUNDS_SCALE_OUTER: { case OBS_BOUNDS_SCALE_OUTER: {
obs_data_set_string(bounds_data, "type", "Outer"); obs_data_set_string(bounds_data, "type", "outer");
break; break;
} }
case OBS_BOUNDS_SCALE_TO_WIDTH: { case OBS_BOUNDS_SCALE_TO_WIDTH: {
obs_data_set_string(bounds_data, "type", "Width"); obs_data_set_string(bounds_data, "type", "width");
break; break;
} }
case OBS_BOUNDS_SCALE_TO_HEIGHT: { case OBS_BOUNDS_SCALE_TO_HEIGHT: {
obs_data_set_string(bounds_data, "type", "Height"); obs_data_set_string(bounds_data, "type", "height");
break; break;
} }
case OBS_BOUNDS_MAX_ONLY: { case OBS_BOUNDS_MAX_ONLY: {
obs_data_set_string(bounds_data, "type", "Max"); obs_data_set_string(bounds_data, "type", "max");
break; break;
} }
} }
// #define OBS_ALIGN_CENTER (0)
// #define OBS_ALIGN_LEFT (1<<0)
// #define OBS_ALIGN_RIGHT (1<<1)
// #define OBS_ALIGN_TOP (1<<2)
// #define OBS_ALIGN_BOTTOM (1<<3)
obs_data_set_int(bounds_data, "alignment", obs_sceneitem_get_bounds_alignment(scene_item)); obs_data_set_int(bounds_data, "alignment", obs_sceneitem_get_bounds_alignment(scene_item));
vec2 bounds; vec2 bounds;
obs_sceneitem_get_bounds(scene_item, &bounds); obs_sceneitem_get_bounds(scene_item, &bounds);
obs_data_set_double(bounds_data, "width", bounds.x); obs_data_set_double(bounds_data, "width", bounds.x);
obs_data_set_double(bounds_data, "height", bounds.y); obs_data_set_double(bounds_data, "height", bounds.y);
obs_data_set_obj(data, "bounds", bounds_data);
} }
obs_data_set_obj(data, "bounds", bounds_data);
// add source width? // add source width?
// add source height? // add source height?
@ -1502,10 +1495,13 @@ void WSRequestHandler::HandleGetSceneItemProperties(WSRequestHandler* req) {
* @param {int} `position.y` * @param {int} `position.y`
* @param {int} `position.alignment` * @param {int} `position.alignment`
* @param {double} `rotation` The new clockwise rotation of the item in degrees * @param {double} `rotation` The new clockwise rotation of the item in degrees
* @param {double} `scale.x`
* @param {double} `scale.y`
* @param {int} `crop.top` * @param {int} `crop.top`
* @param {int} `crop.bottom` * @param {int} `crop.bottom`
* @param {int} `crop.left` * @param {int} `crop.left`
* @param {int} `crop.right` * @param {int} `crop.right`
* @param {bool} `visible`
* *
* @api requests * @api requests
* @name SetSceneItemCrop * @name SetSceneItemCrop
@ -1564,6 +1560,19 @@ void WSRequestHandler::HandleSetSceneItemProperties(WSRequestHandler* req) {
obs_sceneitem_set_rot(scene_item, (float)obs_data_get_double(req->data, "rotation")); obs_sceneitem_set_rot(scene_item, (float)obs_data_get_double(req->data, "rotation"));
} }
if (req->hasField("scale")) {
vec2 old_scale;
obs_sceneitem_get_scale(scene_item, &old_scale);
obs_data_t* req_scale = obs_data_get_obj(req->data, "crop");
vec2 new_scale = old_scale;
if (obs_data_has_user_value(req_scale, "x")) {
new_scale.x = obs_data_get_double(req_scale, "x");
}
if (obs_data_has_user_value(req_scale, "y")) {
new_scale.y = obs_data_get_double(req_scale, "y");
}
}
if (req->hasField("crop")) { if (req->hasField("crop")) {
obs_sceneitem_crop old_crop; obs_sceneitem_crop old_crop;
obs_sceneitem_get_crop(scene_item, &old_crop); obs_sceneitem_get_crop(scene_item, &old_crop);
@ -1584,6 +1593,10 @@ void WSRequestHandler::HandleSetSceneItemProperties(WSRequestHandler* req) {
obs_sceneitem_set_crop(scene_item, &new_crop); obs_sceneitem_set_crop(scene_item, &new_crop);
} }
if (req->hasField("visible")) {
obs_sceneitem_set_visible(scene_item, obs_data_get_bool(req->data, "visible"));
}
obs_sceneitem_release(scene_item); obs_sceneitem_release(scene_item);
req->SendOKResponse(); req->SendOKResponse();
obs_source_release(scene); obs_source_release(scene);