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 {
-
-