diff --git a/repos/gems/src/app/sculpt_manager/model/fb_config.h b/repos/gems/src/app/sculpt_manager/model/fb_config.h index 10a1e0c144..18de6e09a0 100644 --- a/repos/gems/src/app/sculpt_manager/model/fb_config.h +++ b/repos/gems/src/app/sculpt_manager/model/fb_config.h @@ -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 { diff --git a/repos/gems/src/app/sculpt_manager/model/panorama_config.h b/repos/gems/src/app/sculpt_manager/model/panorama_config.h index 36aa10ed47..bf9f19540e 100644 --- a/repos/gems/src/app/sculpt_manager/model/panorama_config.h +++ b/repos/gems/src/app/sculpt_manager/model/panorama_config.h @@ -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