genode/repos/os/run/demo.run
Norman Feske 3778558608 os: reworked nitpicker_gfx/text_painter.h
This patch improves the `Text_painter` utility that is commonly used by
native Genode components to render text:

- Support for subpixel positioning
- Generic interface for accessing font data
- Basic UTF-8 support

Since the change decouples the font format from the 'Text_painter' and
changes the API to use the sub-pixel accurate 'Text_painter::Position'
type, all users of the utility require an adaptation.

Fixes #2716
2018-04-10 11:09:18 +02:00

322 lines
9.5 KiB
Plaintext

#
# Build
#
if {[have_spec odroid_xu] ||
[have_spec wand_quad] ||
([get_cmd_switch --autopilot] && [have_spec linux]) ||
([get_cmd_switch --autopilot] && [have_include "power_on/qemu"])} {
puts "Run script does not support this platform."
exit 0
}
set build_components {
core init
drivers/timer
server/nitpicker app/pointer app/status_bar app/global_keys_handler
app/nit_focus
server/liquid_framebuffer app/launchpad app/scout
test/nitpicker server/nitlog
drivers/framebuffer drivers/input
server/report_rom server/rom_filter
}
proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
return gpio_drv }
source ${genode_dir}/repos/base/run/platform_drv.inc
lappend_if [need_usb_hid] build_components drivers/usb
lappend_if [have_spec gpio] build_components drivers/gpio
append_platform_drv_build_components
build $build_components
create_boot_directory
#
# Generate config
#
append config {
<config>
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="IO_PORT"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
</parent-provides>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>}
append_if [have_spec sdl] config {
<start name="fb_sdl">
<resource name="RAM" quantum="4M"/>
<provides>
<service name="Input"/>
<service name="Framebuffer"/>
</provides>
</start>}
append_platform_drv_config
append_if [have_spec framebuffer] config {
<start name="fb_drv" caps="130">
<provides><service name="Framebuffer"/></provides>}
append_if [expr [have_spec framebuffer] && [have_spec x86]] config {
<resource name="RAM" quantum="4M"/>
<config width="1024" height="768"/>
</start>}
append_if [expr [have_spec framebuffer] && ![have_spec x86]] config {
<resource name="RAM" quantum="5M"/>
<config/>
</start>}
append_if [have_spec gpio] config "
<start name=\"[gpio_drv]\" caps=\"140\">
<resource name=\"RAM\" quantum=\"4M\"/>
<provides><service name=\"Gpio\"/></provides>
<config/>
</start>"
append_if [have_spec imx53] config {
<start name="input_drv">
<resource name="RAM" quantum="1M"/>
<provides><service name="Input"/></provides>
<config/>
</start> }
append_if [have_spec ps2] config {
<start name="ps2_drv">
<resource name="RAM" quantum="1096K"/>
<provides><service name="Input"/></provides>
</start>}
append_if [need_usb_hid] config {
<start name="usb_drv" caps="120">
<resource name="RAM" quantum="12M"/>
<provides><service name="Input"/></provides>
<config ehci="yes" uhci="yes" xhci="no"> <hid/> </config>
</start> }
append config {
<start name="timer">
<resource name="RAM" quantum="1M"/>
<provides><service name="Timer"/></provides>
</start>
<start name="report_rom">
<resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config verbose="no">
<policy label="status_bar -> focus" report="nitpicker -> focus"/>
<policy label="nitpicker_config -> xray" report="global_keys_handler -> xray"/>
<policy label="global_keys_handler -> hover" report="nitpicker -> hover"/>
<policy label="nit_focus -> clicked" report="nitpicker -> clicked"/>
<policy label="nitpicker -> focus" report="nit_focus -> focus"/>
</config>
</start>
<start name="nitpicker_config">
<binary name="rom_filter"/>
<resource name="RAM" quantum="1096K"/>
<provides><service name="ROM"/></provides>
<config>
<input name="xray_enabled" rom="xray" node="xray">
<attribute name="enabled" /> </input>
<output node="config">
<attribute name="focus" value="rom"/>
<inline>
<report focus="yes" xray="yes" hover="yes" keystate="yes"
clicked="yes"/>
<domain name="pointer" layer="1" origin="pointer"
content="client" label="no"/>
<domain name="panel" layer="2"
content="client" label="no" hover="always"/>
</inline>
<if>
<has_value input="xray_enabled" value="no" />
<then>
<inline>
<domain name="launchpad" layer="3"
content="client" label="no" hover="always" focus="click"
ypos="18" height="-18" />
<domain name="" layer="3"
content="client" label="no" hover="always" focus="click"
ypos="18" height="-18" />
</inline>
</then>
<else>
<inline>
<domain name="launchpad" layer="3" color="#dd0000"
content="tinted" label="yes" hover="focused" focus="click"
ypos="18" height="-18" />
<domain name="" layer="3" color="#55dd34"
content="tinted" label="yes" hover="focused" focus="click"
ypos="18" height="-18" />
</inline>
</else>
</if>
<inline>
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="status_bar" domain="panel"/>
<policy label_prefix="scout -> launchpad" domain="launchpad"/>
<default-policy domain=""/>
<global-key name="KEY_SCROLLLOCK" label="global_keys_handler -> input" />
<global-key name="KEY_F1" label="global_keys_handler -> input" />
<global-key name="KEY_F2" label="global_keys_handler -> input" />
</inline>
</output>
</config>
<route>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="global_keys_handler">
<resource name="RAM" quantum="1096K"/>
<config>
<bool name="xray" initial="no"/>
<press name="KEY_SCROLLLOCK" bool="xray" change="toggle"/>
<press name="KEY_F1" bool="xray" change="on"/>
<release name="KEY_F1" bool="xray" change="off"/>
<press name="KEY_F2" bool="xray" change="toggle"/>
<report name="xray" delay_ms="125">
<hovered domain="panel"/>
<bool name="xray"/>
</report>
</config>
<route>
<service name="Report"> <child name="report_rom"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="nitpicker" caps="110">
<resource name="RAM" quantum="1216K"/>
<provides><service name="Nitpicker"/></provides>
<configfile name="nitpicker.config"/>
<route>
<service name="ROM" label="nitpicker.config">
<child name="nitpicker_config"/> </service>
<service name="ROM" label="focus">
<child name="report_rom"/> </service>
<service name="Report">
<child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="pointer">
<resource name="RAM" quantum="1096K"/>
<config/>
</start>
<start name="nit_focus">
<resource name="RAM" quantum="1M"/>
<config> <default-policy focus="yes"/> </config>
<route>
<service name="ROM" label="clicked"> <child name="report_rom"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="status_bar">
<resource name="RAM" quantum="1096K"/>
<route>
<service name="ROM" label="focus"> <child name="report_rom"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="scout" caps="10000">
<resource name="RAM" quantum="64M" />
</start>
</config>}
install_config $config
#
# Create launchpad configuration
#
set launchpad_config_fd [open "bin/launchpad.config" w]
puts $launchpad_config_fd {<config>
<launcher name="testnit" ram_quota="768K" caps="50"/>
<launcher name="scout" ram_quota="41M" caps="200"/>
<launcher name="launchpad" ram_quota="6M" caps="1000">
<configfile name="launchpad.config" />
</launcher>
<launcher name="nitlog" ram_quota="1M" caps="70"/>
<launcher name="liquid_fb" ram_quota="7M" caps="70">
<config resize_handle="on" />
</launcher>
<launcher name="nitpicker" ram_quota="1M" caps="70">
<config>
<domain name="" layer="3" conten="client" label="no" focus="click"/>
<default-policy domain="" />
</config>
</launcher>
</config>}
close $launchpad_config_fd
#
# Boot modules
#
# generic modules
set boot_modules {
core ld.lib.so init
timer
nitpicker pointer status_bar report_rom rom_filter global_keys_handler
nit_focus
liquid_fb launchpad scout testnit nitlog
launchpad.config
}
# platform-specific modules
lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec ps2] boot_modules ps2_drv
lappend_if [have_spec framebuffer] boot_modules fb_drv
lappend_if [need_usb_hid] boot_modules usb_drv
lappend_if [have_spec gpio] boot_modules [gpio_drv]
lappend_if [have_spec imx53] boot_modules input_drv
append_platform_drv_boot_modules
build_boot_image $boot_modules
if {[get_cmd_switch --autopilot]} {
run_genode_until {\[init -> scout\] png is.*\n} 40
grep_output {(requests resources: ram_quota)|(Error)}
# remove Error messages which are not fatal, mostly
unify_output {(?n)^.*platform_drv] Error:.*ACPI table information is wrong.*$} ""
unify_output {(?n)^.*platform_drv] Error: adjust size from.*$} ""
unify_output {(?n)^.*acpi_drv] Error:.*platform_info.*$} ""
unify_output {(?n)^.*ps2_drv] Error: no data available.*$} ""
unify_output {(?n)^.*ps2_drv] Error: failed to read from port.*$} ""
compare_output_to {}
} else {
run_genode_until forever
}