mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-20 17:11:45 +00:00
parent
0f0f8a5be5
commit
ea0c77b647
@ -387,15 +387,16 @@ struct Sculpt::Fb_config
|
||||
});
|
||||
}
|
||||
|
||||
struct Merge_info { Entry::Name name; Area px; };
|
||||
struct Merge_info { Entry::Name name; Area px; Entry::Orientation orientation; };
|
||||
|
||||
void with_merge_info(auto const &fn) const
|
||||
{
|
||||
/* merged screen size and name corresponds to first enabled connector */
|
||||
for (unsigned i = 0; i < _num_merged; i++) {
|
||||
if (_entries[i].present && _entries[i].mode_attr.px.valid()) {
|
||||
fn({ .name = _entries[i].name,
|
||||
.px = _entries[i].mode_attr.px });
|
||||
fn({ .name = _entries[i].name,
|
||||
.px = _entries[i].mode_attr.px,
|
||||
.orientation = _entries[i].orientation });
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -403,11 +404,13 @@ struct Sculpt::Fb_config
|
||||
/* if all merged connectors are switched off, use name of first present one */
|
||||
for (unsigned i = 0; i < _num_merged; i++) {
|
||||
if (_entries[i].present) {
|
||||
fn({ .name = _entries[i].name, .px = { }});
|
||||
fn({ .name = _entries[i].name,
|
||||
.px = { },
|
||||
.orientation = { }});
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void _gen_merge_node(Xml_generator &xml) const
|
||||
{
|
||||
|
@ -58,24 +58,30 @@ struct Sculpt::Panorama_config
|
||||
{
|
||||
int xpos = 0;
|
||||
|
||||
auto append = [&] (auto const &name, auto const area)
|
||||
auto append = [&] (auto const &name, auto const area, auto const orientation)
|
||||
{
|
||||
if (_num_entries == MAX_ENTRIES)
|
||||
return;
|
||||
|
||||
Area area_rotate = area;
|
||||
|
||||
if (orientation.rotate == Fb_connectors::Orientation::Rotate::R90 ||
|
||||
orientation.rotate == Fb_connectors::Orientation::Rotate::R270)
|
||||
area_rotate = { area.h, area.w };
|
||||
|
||||
_entries[_num_entries] = Entry {
|
||||
.name = name,
|
||||
.rect = { .at = { .x = xpos, .y = 0 }, .area = area } };
|
||||
.rect = { .at = { .x = xpos, .y = 0 }, .area = area_rotate } };
|
||||
|
||||
_num_entries++;
|
||||
xpos += area.w;
|
||||
xpos += area_rotate.w;
|
||||
};
|
||||
|
||||
fb_config.with_merge_info([&] (Fb_config::Merge_info const &info) {
|
||||
append(info.name, info.px); });
|
||||
append(info.name, info.px, info.orientation); });
|
||||
|
||||
fb_config.for_each_discrete_entry([&] (Fb_config::Entry const &entry) {
|
||||
append(entry.name, entry.mode_attr.px); });
|
||||
append(entry.name, entry.mode_attr.px, entry.orientation); });
|
||||
}
|
||||
|
||||
void gen_policy_entries(Xml_generator &xml) const
|
||||
|
Loading…
x
Reference in New Issue
Block a user