Skip to content
  • Dennis Nienhüser's avatar
    More flexible rendering order in GeometryLayer/GeoGraphicsScene · ae7ac56e
    Dennis Nienhüser authored
    The Vector OSM map theme has some rendering order problems right now
    that result in some item combinations to look odd. This patch provides
    a more fine-granular control of the rendering order. It also refactors
    the decorators previously used and merges them into that approach.
    
    Extend paint() of GeographicsItem to take another argument, a string
    layer
    Each GeographicsItem specifies a list of such layers it wants to paint
    GeometryLayer defines the order of layers and paints them that way
    E.g. currently a highway behaves like this:
    
    GeoLineStringItem is created, and internally creates a copy of itself
    which is its decorator, assigns a z-value
    GeometryLayer queries all decorators during paint, sorts them by z-value
    GeoLineStringItem tests whether it is a decorator during painting,
    changes rendering based on that
    The patch changes this to
    
    GeoLineStringItem is created and asks for three layers to be rendered:
    .../outline, .../inline and .../label
    GeometryLayer queries all layers during paint, sorts them by render
    order
    GeoLineStringItem changes rendering based on the provided layer name
    This avoids having to treat decorators as special and duplicated items
    internally, and also allows an important render order behavior change:
    It is now possible to render e.g. all visible streets first and all
    their labels afterwards. Previously it was only possible to render one
    street after the other, so e.g. the second street could overpaint the
    label of the first.
    
    Projects: #marble
    
    Differential Revision: https://phabricator.kde.org/D1181
    ae7ac56e