~andreas-pokorny/mir/add-pixel-format-to-display-configuration

« back to all changes in this revision

Viewing changes to src/server/graphics/default_display_configuration_policy.cpp

  • Committer: Andreas Pokorny
  • Date: 2014-01-09 17:02:59 UTC
  • Revision ID: andreas.pokorny@canonical.com-20140109170259-2e8ub1ksmuxft62d
more reasonable opaque format selection, and turned chnage into a real API change for the client_types 

Show diffs side-by-side

added added

removed removed

Lines of Context:
39
39
    return mode_index;
40
40
}
41
41
 
42
 
MirPixelFormat select_format(MirPixelFormat format, std::vector<MirPixelFormat> const& formats)
 
42
MirPixelFormat select_opaque_format(MirPixelFormat format, std::vector<MirPixelFormat> const& formats)
43
43
{
44
 
    if (formats.empty())
45
 
        return mir_pixel_format_invalid;
46
 
 
47
 
    if (!mg::contains_alpha(format))
48
 
        return format;
49
 
 
50
 
    auto opaque_pos = std::find_if_not(formats.begin(), formats.end(), mg::contains_alpha);
51
 
 
52
 
    if (opaque_pos == formats.end())
53
 
        return format;
54
 
 
55
 
    return *opaque_pos;
 
44
    auto const format_in_formats = formats.end() != std::find(formats.begin(), formats.end(), format);
 
45
 
 
46
    if (!mg::contains_alpha(format) && format_in_formats)
 
47
        return format;
 
48
 
 
49
    // format is either unavailable or transparent
 
50
    auto const first_opaque = std::find_if_not(formats.begin(), formats.end(), mg::contains_alpha);
 
51
 
 
52
    if (first_opaque != formats.end())
 
53
        return *first_opaque;
 
54
 
 
55
    // only tranparent options - allow choice if available
 
56
    if (format_in_formats)
 
57
        return format;
 
58
 
 
59
    if (formats.size())
 
60
        return formats.at(0);
 
61
 
 
62
    return mir_pixel_format_invalid;
56
63
}
57
64
 
58
65
}
81
88
            }
82
89
 
83
90
            size_t preferred_mode_index{select_mode_index(conf_output.preferred_mode_index, conf_output.modes)};
84
 
            MirPixelFormat format{select_format(conf_output.current_format, conf_output.pixel_formats)};
 
91
            MirPixelFormat format{select_opaque_format(conf_output.current_format, conf_output.pixel_formats)};
85
92
 
86
93
            conf.configure_output(conf_output.id, true, geom::Point(), preferred_mode_index,
87
94
                                  format, default_power_state);