1 // SPDX-License-Identifier: LGPL-2.1-or-later 2 // 3 // SPDX-FileCopyrightText: 2011 Konstantin Oblaukhov <oblaukhov.konstantin@gmail.com> 4 // 5 6 #ifndef MARBLE_ABSTRACTGEOPOLYGONGRAPHICSITEM_H 7 #define MARBLE_ABSTRACTGEOPOLYGONGRAPHICSITEM_H 8 9 #include "GeoGraphicsItem.h" 10 #include "marble_export.h" 11 12 #include <QImage> 13 #include <QColor> 14 15 namespace Marble 16 { 17 18 class GeoDataLinearRing; 19 class GeoDataPlacemark; 20 class GeoDataPolygon; 21 class GeoDataBuilding; 22 23 class MARBLE_EXPORT AbstractGeoPolygonGraphicsItem : public GeoGraphicsItem 24 { 25 protected: 26 AbstractGeoPolygonGraphicsItem(const GeoDataPlacemark *placemark, const GeoDataPolygon *polygon); 27 AbstractGeoPolygonGraphicsItem(const GeoDataPlacemark *placemark, const GeoDataLinearRing *ring); 28 AbstractGeoPolygonGraphicsItem(const GeoDataPlacemark *placemark, const GeoDataBuilding *building); 29 ~AbstractGeoPolygonGraphicsItem() override; 30 31 public: 32 const GeoDataLatLonAltBox& latLonAltBox() const override; 33 void paint(GeoPainter* painter, const ViewportParams *viewport, const QString &layer, int tileZoomLevel) override; 34 bool contains(const QPoint &screenPosition, const ViewportParams *viewport) const override; 35 36 void setLinearRing(GeoDataLinearRing* ring); 37 void setPolygon(GeoDataPolygon* polygon); 38 39 static const void *s_previousStyle; 40 41 protected: 42 bool configurePainter(GeoPainter* painter, const ViewportParams &viewport) const; 43 inline polygon()44 const GeoDataPolygon *polygon() const { return m_polygon; } 45 inline ring()46 const GeoDataLinearRing *ring() const { return m_ring; } 47 inline building()48 const GeoDataBuilding *building() const { return m_building; } 49 50 static int extractElevation(const GeoDataPlacemark &placemark); 51 52 private: 53 QPixmap texture(const QString &path, const QColor &color) const; 54 55 const GeoDataPolygon * m_polygon; 56 const GeoDataLinearRing * m_ring; 57 const GeoDataBuilding *const m_building; 58 }; 59 60 } 61 62 #endif 63