* Set the overlay view. It will be hidden from the normal workspace layers * and shown on top of the workspace wall. The overlay view's position is * not animated together with the workspace transition, but its alpha is. * * Note: if the view disappears, the caller is responsible for resetting the * overlay view. * * @param view The desired overlay view, or NULL
| 187 | * to be unset. |
| 188 | */ |
| 189 | virtual void set_overlay_view(wayfire_toplevel_view view) |
| 190 | { |
| 191 | if (this->overlay_view == view) |
| 192 | { |
| 193 | /* Nothing to do */ |
| 194 | return; |
| 195 | } |
| 196 | |
| 197 | /* Reset old view */ |
| 198 | if (this->overlay_view) |
| 199 | { |
| 200 | wf::scene::set_node_enabled(overlay_view->get_transformed_node(), true); |
| 201 | overlay_view->get_transformed_node()->rem_transformer( |
| 202 | vswitch_view_transformer_name); |
| 203 | |
| 204 | wf::scene::remove_child(overlay_view_node); |
| 205 | overlay_view_node.reset(); |
| 206 | } |
| 207 | |
| 208 | /* Set new view */ |
| 209 | this->overlay_view = view; |
| 210 | if (view) |
| 211 | { |
| 212 | view->get_transformed_node()->add_transformer( |
| 213 | std::make_shared<wf::scene::view_2d_transformer_t>(view), |
| 214 | wf::TRANSFORMER_2D, vswitch_view_transformer_name); |
| 215 | wf::scene::set_node_enabled(view->get_transformed_node(), false); |
| 216 | |
| 217 | // Render as an overlay, but make sure it is translated to the local output |
| 218 | auto vswitch_overlay = std::make_shared<vswitch_overlay_node_t>(view); |
| 219 | |
| 220 | overlay_view_node = std::make_shared<scene::translation_node_t>(); |
| 221 | overlay_view_node->set_children_list({vswitch_overlay}); |
| 222 | overlay_view_node->set_offset(origin(output->get_layout_geometry())); |
| 223 | |
| 224 | wf::scene::add_front(wf::get_core().scene(), overlay_view_node); |
| 225 | } |
| 226 | } |
| 227 | |
| 228 | /** @return the current overlay view, might be NULL. */ |
| 229 | virtual wayfire_view get_overlay_view() |
no test coverage detected