diff --git a/repos/gems/recipes/src/terminal/used_apis b/repos/gems/recipes/src/terminal/used_apis index aec14c9df..8878e7c4c 100644 --- a/repos/gems/recipes/src/terminal/used_apis +++ b/repos/gems/recipes/src/terminal/used_apis @@ -3,6 +3,7 @@ os framebuffer_session input_session nitpicker_gfx +nitpicker_session terminal_session timer_session vfs diff --git a/repos/gems/run/sculpt/leitzentrale.config b/repos/gems/run/sculpt/leitzentrale.config index 667be3b29..01e0a143a 100644 --- a/repos/gems/run/sculpt/leitzentrale.config +++ b/repos/gems/run/sculpt/leitzentrale.config @@ -228,17 +228,6 @@ - - - - - - - - - - - @@ -256,7 +245,8 @@ - + + diff --git a/repos/gems/run/terminal_log.run b/repos/gems/run/terminal_log.run index c7ef380e8..0efebeb0d 100644 --- a/repos/gems/run/terminal_log.run +++ b/repos/gems/run/terminal_log.run @@ -4,7 +4,6 @@ import_from_depot [depot_user]/src/[base_src] \ [depot_user]/pkg/[drivers_interactive_pkg] \ [depot_user]/pkg/terminal \ [depot_user]/src/nitpicker \ - [depot_user]/src/nit_fb \ [depot_user]/src/demo \ [depot_user]/src/init @@ -68,23 +67,11 @@ install_config { - - - - - - - - - - - - @@ -108,6 +95,6 @@ install_config { build { server/terminal_log test/nitpicker } -build_boot_image { terminal_log testnit } +build_boot_image { terminal_log testnit terminal } run_genode_until forever diff --git a/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc b/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc index d720b661e..30de92abe 100644 --- a/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc +++ b/repos/gems/src/app/sculpt_manager/runtime/file_browser.cc @@ -24,44 +24,14 @@ namespace Sculpt { fn(Storage_target { device.label, partition.number }); }); }); } - void gen_nit_fb_start(Xml_generator &, Rom_name const &); - void gen_terminal_start(Xml_generator &, Rom_name const &, Rom_name const &, + void gen_terminal_start(Xml_generator &, Rom_name const &, File_browser_version); void gen_noux_start(Xml_generator &, Rom_name const &, Rom_name const &, Storage_devices const &, Ram_fs_state const &, File_browser_version); } -void Sculpt::gen_nit_fb_start(Xml_generator &xml, Rom_name const &name) -{ - gen_common_start_content(xml, name, Cap_quota{100}, Ram_quota{18*1024*1024}); - - gen_named_node(xml, "binary", "nit_fb"); - - xml.node("provides", [&] () { - gen_service_node(xml, [&] () {}); - gen_service_node(xml, [&] () {}); - }); - - xml.node("config", [&] () { }); - - xml.node("route", [&] () { - - gen_service_node(xml, [&] () { - xml.node("parent", [&] () { - xml.attribute("label", String<64>("leitzentrale -> ", name)); }); }); - - gen_parent_rom_route(xml, "nit_fb"); - gen_parent_rom_route(xml, "ld.lib.so"); - gen_parent_route (xml); - gen_parent_route (xml); - gen_parent_route (xml); - }); -} - - void Sculpt::gen_terminal_start(Xml_generator &xml, Rom_name const &name, - Rom_name const &nit_fb_name, File_browser_version version) { xml.attribute("version", version.value); @@ -73,11 +43,9 @@ void Sculpt::gen_terminal_start(Xml_generator &xml, Rom_name const &name, gen_provides(xml); xml.node("route", [&] () { - gen_service_node(xml, [&] () { - gen_named_node(xml, "child", nit_fb_name); }); - - gen_service_node(xml, [&] () { - gen_named_node(xml, "child", nit_fb_name); }); + gen_service_node(xml, [&] () { + xml.node("parent", [&] () { + xml.attribute("label", String<64>("leitzentrale -> ", name)); }); }); gen_parent_rom_route(xml, "terminal"); gen_parent_rom_route(xml, "ld.lib.so"); @@ -214,13 +182,9 @@ void Sculpt::gen_file_browser(Xml_generator &xml, File_browser_version version) { xml.node("start", [&] () { - gen_nit_fb_start(xml, "inspect"); }); + gen_terminal_start(xml, "inspect", version); }); xml.node("start", [&] () { - gen_terminal_start(xml, "inspect terminal", "inspect", - version); }); - - xml.node("start", [&] () { - gen_noux_start(xml, "inspect noux", "inspect terminal", + gen_noux_start(xml, "inspect noux", "inspect ", devices, ram_fs_state, version); }); } diff --git a/repos/gems/src/server/terminal/framebuffer.h b/repos/gems/src/server/terminal/framebuffer.h index 20ef44570..d410a0322 100644 --- a/repos/gems/src/server/terminal/framebuffer.h +++ b/repos/gems/src/server/terminal/framebuffer.h @@ -26,14 +26,22 @@ class Terminal::Framebuffer { private: + typedef Nitpicker::Session::Command Command; + Env &_env; - ::Framebuffer::Connection _fb { _env, ::Framebuffer::Mode() }; + Nitpicker::Connection &_nitpicker; + + ::Framebuffer::Session &_fb + { *_nitpicker.framebuffer() }; Constructible _ds { }; ::Framebuffer::Mode _mode { }; + Nitpicker::Session::View_handle const _view_handle + { _nitpicker.create_view() }; + public: /** @@ -41,10 +49,13 @@ class Terminal::Framebuffer * * \param mode_sigh signal handler to be triggered on mode changes */ - Framebuffer(Env &env, Signal_context_capability mode_sigh) : _env(env) + Framebuffer(Env &env, + Nitpicker::Connection &np, + Signal_context_capability mode_sigh) + : _env(env), _nitpicker(np) { switch_to_new_mode(); - _fb.mode_sigh(mode_sigh); + _nitpicker.mode_sigh(mode_sigh); } unsigned w() const { return _mode.width(); } @@ -64,7 +75,7 @@ class Terminal::Framebuffer */ bool mode_changed() const { - ::Framebuffer::Mode _new_mode = _fb.mode(); + ::Framebuffer::Mode _new_mode = _nitpicker.mode(); return _new_mode.width() != _mode.width() || _new_mode.height() != _mode.height(); @@ -81,10 +92,20 @@ class Terminal::Framebuffer * the dataspace update - the mode information may correspond to * the next pending mode at the server while we are operating on * the old (possibly too small) dataspace. + * + * TODO:clip the geometry down to the nearest character-cell */ - _mode = _fb.mode(); - if (_mode.width() && _mode.height()) + ::Framebuffer::Mode mode = _nitpicker.mode(); + if (mode.width() && mode.height()) { + _nitpicker.buffer(mode, false); + _mode = _fb.mode(); _ds.construct(_env.rm(), _fb.dataspace()); + + using namespace Nitpicker; + Rect rect(Point(0,0), Area(_mode.width(), _mode.height())); + _nitpicker.enqueue(_view_handle, rect); + _nitpicker.execute(); + } } }; diff --git a/repos/gems/src/server/terminal/main.cc b/repos/gems/src/server/terminal/main.cc index 48b8185ff..bb0644b34 100644 --- a/repos/gems/src/server/terminal/main.cc +++ b/repos/gems/src/server/terminal/main.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -77,10 +78,11 @@ struct Terminal::Main : Character_consumer Signal_handler
_config_handler { _env.ep(), *this, &Main::_handle_config }; - Input::Connection _input { _env }; Timer::Connection _timer { _env }; - Framebuffer _framebuffer { _env, _config_handler }; + Nitpicker::Connection _nitpicker { _env }; + + Framebuffer _framebuffer { _env, _nitpicker, _config_handler }; typedef Pixel_rgb565 PT; @@ -143,7 +145,7 @@ struct Terminal::Main : Character_consumer { _timer .sigh(_flush_handler); _config.sigh(_config_handler); - _input .sigh(_input_handler); + _nitpicker.input()->sigh(_input_handler); _handle_config(); @@ -250,7 +252,7 @@ void Terminal::Main::_handle_config() void Terminal::Main::_handle_input() { - _input.for_each_event([&] (Input::Event const &event) { + _nitpicker.input()->for_each_event([&] (Input::Event const &event) { event.handle_press([&] (Input::Keycode, Codepoint codepoint) { diff --git a/repos/ports/run/noux_terminal_fs.run b/repos/ports/run/noux_terminal_fs.run index f6774a9b9..374c57d11 100644 --- a/repos/ports/run/noux_terminal_fs.run +++ b/repos/ports/run/noux_terminal_fs.run @@ -20,7 +20,6 @@ import_from_depot [depot_user]/src/[base_src] \ [depot_user]/pkg/terminal \ [depot_user]/src/init \ [depot_user]/src/nitpicker \ - [depot_user]/src/nit_fb \ [depot_user]/src/libc \ [depot_user]/src/noux \ [depot_user]/src/posix \ @@ -86,34 +85,12 @@ install_config { - - - - - - - - - - - - - - - - - - - - - - @@ -124,8 +101,6 @@ install_config { - -