Marble

KmlScreenOverlayWriter.cpp
1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2012 Mayank Madan <[email protected]>
4 //
5 
6 #include "KmlScreenOverlayWriter.h"
7 
8 #include "GeoDataScreenOverlay.h"
9 #include "GeoDataTypes.h"
10 #include "GeoWriter.h"
11 #include "GeoTagWriter.h"
12 #include "KmlElementDictionary.h"
13 
14 namespace Marble
15 {
16 static GeoTagWriterRegistrar s_writerLookAt(
17  GeoTagWriter::QualifiedName( GeoDataTypes::GeoDataScreenOverlayType,
18  kml::kmlTag_nameSpaceOgc22 ),
19  new KmlScreenOverlayWriter );
20 
21 KmlScreenOverlayWriter::KmlScreenOverlayWriter() : KmlOverlayTagWriter( kml::kmlTag_ScreenOverlay )
22 {
23  // nothing to do
24 }
25 
26 
27 bool KmlScreenOverlayWriter::writeMid( const GeoNode *node, GeoWriter& writer ) const
28 {
29  KmlOverlayTagWriter::writeMid( node, writer );
30 
31  const GeoDataScreenOverlay *screenOverlay = static_cast<const GeoDataScreenOverlay*>( node );
32  writeVec2( kml::kmlTag_overlayXY, screenOverlay->overlayXY(), writer );
33  writeVec2( kml::kmlTag_screenXY, screenOverlay->screenXY(), writer );
34  writeVec2( kml::kmlTag_rotationXY, screenOverlay->rotationXY(), writer );
35  writeVec2( kml::kmlTag_size, screenOverlay->size(), writer );
36  QString const rotation = QString::number(screenOverlay->rotation());
37  writer.writeOptionalElement( kml::kmlTag_rotation, rotation, "0" );
38  return true;
39 }
40 
41 void KmlScreenOverlayWriter::writeVec2( const QString &element, const GeoDataVec2 &vec2, GeoWriter &writer )
42 {
43  writer.writeStartElement( element );
44  writer.writeAttribute( "x", QString::number( vec2.x() ) );
45  writer.writeAttribute( "xunits", unitToString( vec2.xunit() ) );
46  writer.writeAttribute( "y", QString::number( vec2.y() ) );
47  writer.writeAttribute( "yunits", unitToString( vec2.yunit() ) );
48  writer.writeEndElement();
49 }
50 
51 QString KmlScreenOverlayWriter::unitToString( GeoDataVec2::Unit unit )
52 {
53  switch( unit ) {
54  case GeoDataVec2::Fraction: return "fraction";
55  case GeoDataVec2::Pixels: return "pixels";
56  case GeoDataVec2::InsetPixels: return "insetPixels";
57  }
58 
59  Q_ASSERT(false);
60  return "fraction";
61 }
62 
63 }
QString number(int n, int base)
QPair< QString, QString > QualifiedName
Object Name and Namespace Pair This type is intended to be used in a similar way to.
Definition: GeoTagWriter.h:44
Binds a QML item to a specific geodetic location in screen coordinates.
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Wed Oct 4 2023 04:09:42 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.