diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/redraw_fixer.cpp | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/redraw_fixer.cpp b/src/redraw_fixer.cpp deleted file mode 100644 index 94964af..0000000 --- a/src/redraw_fixer.cpp +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "wayland.hpp" - -#include <algorithm> -#include <chrono> -#include <thread> - -using namespace std::chrono_literals; - -// pretend we are a WM ... -namespace wm { - -struct App { - controller_hooks chooks; - std::unique_ptr<wl::display> display; - std::unique_ptr<genivi::controller> controller; - std::vector<std::unique_ptr<wl::output>> outputs; - - App(); - void commit(); - void surface_visibility(uint32_t surface_id, uint32_t v); - void surface_destination_rectangle(uint32_t surface_id, uint32_t x, - uint32_t y, uint32_t w, uint32_t h); - void try_fix(uint32_t surface_id); -}; - -void controller_hooks::surface_created(uint32_t /*surface_id*/) {} - -void controller_hooks::surface_removed(uint32_t /*surface_id*/) {} - -void controller_hooks::surface_visibility(uint32_t surface_id, uint32_t v) { - this->app->surface_visibility(surface_id, v); -} - -void controller_hooks::surface_destination_rectangle(uint32_t surface_id, - uint32_t x, uint32_t y, - uint32_t w, uint32_t h) { - this->app->surface_destination_rectangle(surface_id, x, y, w, h); -} - -App::App() : chooks{this}, display{new wl::display}, controller{}, outputs{} { - // The same init, the WM does, at least we can reuse the wayland stuff - if (!this->display->ok()) { - return; - } - - this->display->add_global_handler( - "wl_output", [this](wl_registry *r, uint32_t name, uint32_t v) { - this->outputs.emplace_back(std::make_unique<wl::output>(r, name, v)); - }); - - this->display->add_global_handler( - "ivi_controller", [this](wl_registry *r, uint32_t name, uint32_t v) { - this->controller = - std::make_unique<struct genivi::controller>(r, name, v); - - // Init controller hooks - this->controller->chooks = &this->chooks; - - this->controller->add_proxy_to_id_mapping( - this->outputs.back()->proxy.get(), - wl_proxy_get_id(reinterpret_cast<struct wl_proxy *>( - this->outputs.back()->proxy.get()))); - }); - - for (int i : {1, 2, 3}) { - this->display->roundtrip(); -} -} - -void App::commit() { - this->controller->commit_changes(); - this->display->roundtrip(); // read: flush()++ -} - -void App::surface_visibility(uint32_t surface_id, uint32_t v) { - fprintf(stderr, "surface %u visibility %u\n", surface_id, v); - - if (v == 1) { - this->try_fix(surface_id); - } -} - -void App::surface_destination_rectangle(uint32_t surface_id, uint32_t x, - uint32_t y, uint32_t w, uint32_t h) { - fprintf(stderr, "surface %u dst %u %u %u %u\n", surface_id, x, y, w, h); - - if (w != 1 && h != 1 && this->controller->sprops[surface_id].visibility != 0) { - this->try_fix(surface_id); - } -} - -void App::try_fix(uint32_t surface_id) { - this->controller->surfaces[surface_id]->set_opacity(255); - this->commit(); - std::this_thread::sleep_for(200ms); - this->controller->surfaces[surface_id]->set_opacity(256); - this->commit(); -} - -} // namespace wm - -int main(int /*argc*/, char ** /*argv*/) { - wm::App app; - if (!app.display->ok()) { - fputs("Could not init wayland display\n", stderr); - return 1; - } - while (app.display->dispatch() != -1) { - ; - } - return 0; -} |