Update the ViewRect in checkSizeConstraint()

This commit is contained in:
Robbert van der Helm
2020-12-30 14:35:18 +01:00
parent 8458ea041f
commit 651ebd4db3
5 changed files with 45 additions and 7 deletions
+14
View File
@@ -1001,6 +1001,20 @@ void Vst3Logger::log_response(bool is_host_vst,
});
}
void Vst3Logger::log_response(
bool is_host_vst,
const YaPlugView::CheckSizeConstraintResponse& response) {
log_response_base(is_host_vst, [&](auto& message) {
message << response.result.string();
if (response.result == Steinberg::kResultOk) {
message << ", <ViewRect* with left = " << response.updated_rect.left
<< ", top = " << response.updated_rect.top
<< ", right = " << response.updated_rect.right
<< ", bottom = " << response.updated_rect.bottom << ">";
}
});
}
void Vst3Logger::log_response(bool is_host_vst,
const YaPluginFactory::ConstructArgs& args) {
log_response_base(is_host_vst, [&](auto& message) {
+2
View File
@@ -180,6 +180,8 @@ class Vst3Logger {
void log_response(bool is_host_vst,
const YaEditController::CreateViewResponse&);
void log_response(bool is_host_vst, const YaPlugView::GetSizeResponse&);
void log_response(bool is_host_vst,
const YaPlugView::CheckSizeConstraintResponse&);
void log_response(bool is_host_vst, const YaPluginFactory::ConstructArgs&);
void log_response(bool is_host_vst, const Configuration&);
void log_response(bool is_host_vst,
@@ -320,14 +320,27 @@ class YaPlugView : public Steinberg::IPlugView {
virtual tresult PLUGIN_API canResize() override = 0;
/**
* The result and updated `ViewRect` from a call to
* `IPlugView::checkSizeConstraint(rect)`.
*/
struct CheckSizeConstraintResponse {
UniversalTResult result;
Steinberg::ViewRect updated_rect;
template <typename S>
void serialize(S& s) {
s.object(result);
s.object(updated_rect);
}
};
/**
* Message to pass through a call to `IPlugView::checkSizeConstraint(rect)`
* to the Wine plugin host.
*
* TODO: This should also return the updated ViewRect
*/
struct CheckSizeConstraint {
using Response = UniversalTResult;
using Response = CheckSizeConstraintResponse;
native_size_t owner_instance_id;
@@ -146,8 +146,13 @@ tresult PLUGIN_API Vst3PlugViewProxyImpl::canResize() {
tresult PLUGIN_API
Vst3PlugViewProxyImpl::checkSizeConstraint(Steinberg::ViewRect* rect) {
if (rect) {
return bridge.send_message(YaPlugView::CheckSizeConstraint{
.owner_instance_id = owner_instance_id(), .rect = *rect});
const CheckSizeConstraintResponse response =
bridge.send_message(YaPlugView::CheckSizeConstraint{
.owner_instance_id = owner_instance_id(), .rect = *rect});
*rect = response.updated_rect;
return response.result;
} else {
bridge.logger.log(
"WARNING: Null pointer passed to "
+6 -2
View File
@@ -530,8 +530,12 @@ void Vst3Bridge::run() {
},
[&](YaPlugView::CheckSizeConstraint& request)
-> YaPlugView::CheckSizeConstraint::Response {
return object_instances[request.owner_instance_id]
.plug_view->checkSizeConstraint(&request.rect);
const tresult result =
object_instances[request.owner_instance_id]
.plug_view->checkSizeConstraint(&request.rect);
return YaPlugView::CheckSizeConstraintResponse{
.result = result, .updated_rect = std::move(request.rect)};
},
[&](YaPluginBase::Initialize& request)
-> YaPluginBase::Initialize::Response {