[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/marble/marble-gsoc-2009/src/plugins/render
From:       Bastian Holst <bastianholst () gmx ! de>
Date:       2009-06-28 15:37:05
Message-ID: 1246203425.096378.23130.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 988755 by bholst:

* Showing little wikipedia icons on WikipediaItems of Marble now even if
there is a picture available.
* Don't try to download from empty urls.


 M  +1 -4      weather/WeatherItem.cpp  
 M  +25 -7     wikipedia/WikipediaItem.cpp  
 M  +3 -5      wikipedia/WikipediaItem.h  
 M  +4 -19     wikipedia/WikipediaModel.cpp  
 M  +0 -1      wikipedia/WikipediaModel.h  


--- branches/marble/marble-gsoc-2009/src/plugins/render/weather/WeatherItem.cpp #988754:988755
@@ -35,8 +35,7 @@
         : m_priority( 0 ),
           m_action( new QAction( "Weather", parent ) ),
           m_parent( parent ),
-          m_temperatureSize(),
-          m_initialized( false )
+          m_temperatureSize()
     {
     }
     
@@ -66,7 +65,6 @@
     WeatherItem *m_parent;
     QSize m_temperatureSize;
     QString m_stationName;
-    bool m_initialized;
     
     static QFont s_font;
 };
@@ -174,7 +172,6 @@
         = metrics.boundingRect( weather.temperatureString() ).size()
           + QSize( 4, 0 );
     d->updateSize();
-    d->m_initialized = true;
     update();
 }
 
--- branches/marble/marble-gsoc-2009/src/plugins/render/wikipedia/WikipediaItem.cpp #988754:988755
@@ -26,12 +26,19 @@
 
 using namespace Marble;
 
+// The Wikipedia icon is not a square
+const QRect wikiIconRect( 0, 0, 47, 40 );
+const QSize miniWikiIconSize( 22, 19 );
+const int miniWikiIconBorder = 3;
+
 WikipediaItem::WikipediaItem( QObject *parent )
     : AbstractDataPluginItem( parent ),
-      m_browser( 0 )
+      m_browser( 0 ),
+      m_wikiIcon()
 {
     m_action = new QAction( this );
     connect( m_action, SIGNAL( triggered() ), this, SLOT( openBrowser() ) );
+    setCacheMode( MarbleGraphicsItem::ItemCoordinateCache );
 }
 
 WikipediaItem::~WikipediaItem() {
@@ -71,10 +78,22 @@
     Q_UNUSED( layer )
 
     if ( m_thumbnail.isNull() ) {
-        painter->drawPixmap( 0, 0, m_pixmap );
+        m_wikiIcon.paint( painter, wikiIconRect );
     }
     else {
         painter->drawPixmap( 0, 0, m_thumbnail );
+        QSize minSize = miniWikiIconSize;
+        minSize *= 2;
+        QSize thumbnailSize = m_thumbnail.size();
+
+        if ( thumbnailSize.width() >= minSize.width()
+             && thumbnailSize.height() >= minSize.height() )
+        {
+            QRect wikiRect( QPoint( 0, 0 ), miniWikiIconSize );
+            wikiRect.moveBottomRight( QPoint( m_thumbnail.width() - miniWikiIconBorder,
+                                              m_thumbnail.height() - miniWikiIconBorder ) );
+            m_wikiIcon.paint( painter, wikiRect );
+        }
     }
 }
 
@@ -129,14 +148,13 @@
     connect( m_browser, SIGNAL( titleChanged(QString) ),
              m_browser, SLOT( setWindowTitle(QString) ) );
 }
-
-void WikipediaItem::setPixmap( const QPixmap& pixmap ) {
-    m_pixmap = pixmap;
-    setSize( m_pixmap.size() );
-}
     
 void WikipediaItem::setIcon( const QIcon& icon ) {
     m_action->setIcon( icon );
+    m_wikiIcon = icon;
+    if ( m_thumbnail.isNull() ) {
+        setSize( wikiIconRect.size() );
+    }
 }
 
 #include "WikipediaItem.moc"
--- branches/marble/marble-gsoc-2009/src/plugins/render/wikipedia/WikipediaItem.h #988754:988755
@@ -15,9 +15,9 @@
 
 #include <QtCore/QUrl>
 #include <QtGui/QPixmap>
+#include <QtGui/QIcon>
 
 class QAction;
-class QIcon;
 class QWebView;
 
 namespace Marble {
@@ -61,8 +61,6 @@
     
     QAction *action();
     
-    void setPixmap( const QPixmap& pixmap );
-    
     void setIcon( const QIcon& icon );
     
  public Q_SLOTS:
@@ -73,9 +71,9 @@
     QUrl m_thumbnailImageUrl;
     QWebView *m_browser;
     QAction *m_action;
-    
-    QPixmap m_pixmap;
+
     QPixmap m_thumbnail;
+    QIcon m_wikiIcon;
 };
     
 }
--- branches/marble/marble-gsoc-2009/src/plugins/render/wikipedia/WikipediaModel.cpp #988754:988755
@@ -33,25 +33,10 @@
 
 using namespace Marble;
 
-// The Wikipedia icon is not a square
-const int wikipediaIconWidth = 47;
-const int wikipediaIconHeight = 40;
-const int wikipediaSmallIconSize = 16;
-
 WikipediaModel::WikipediaModel( QObject *parent )
     : AbstractDataPluginModel( "wikipedia", parent ),
       m_showThumbnail( true )
 {
-    // Rendering of the wikipedia icon from svg
-    QSvgRenderer svgObj( MarbleDirs::path( "svg/wikipedia.svg" ), this );
-    QImage wikipediaImage( wikipediaIconWidth,
-                           wikipediaIconHeight,
-                           QImage::Format_ARGB32 );
-    wikipediaImage.fill( QColor( 0, 0, 0, 0 ).rgba() );
-    QPainter painter( &wikipediaImage );
-    svgObj.render( &painter );
-    m_wikipediaPixmap = QPixmap::fromImage( wikipediaImage );
-    
     m_wikipediaIcon.addFile( MarbleDirs::path( "svg/wikipedia.svg" ) );
 }
 
@@ -99,13 +84,13 @@
             delete (*it);
             continue;
         }
-        
-        (*it)->setPixmap( m_wikipediaPixmap );
+
         (*it)->setIcon( m_wikipediaIcon );
         // Currently all wikipedia articles with geotags are on earth
         (*it)->setTarget( "earth" );
-        if ( m_showThumbnail ) {
-            downloadItemData( (*it)->thumbnailImageUrl(), "thumbnail", (*it) );
+        QUrl thumbnailImageUrl = (*it)->thumbnailImageUrl();
+        if ( m_showThumbnail && !thumbnailImageUrl.isEmpty() ) {
+            downloadItemData( thumbnailImageUrl, "thumbnail", (*it) );
         }
         else {
             addItemToList( *it );
--- branches/marble/marble-gsoc-2009/src/plugins/render/wikipedia/WikipediaModel.h #988754:988755
@@ -49,7 +49,6 @@
     void parseFile( const QByteArray& file );
     
  private:
-    QPixmap m_wikipediaPixmap;
     QIcon m_wikipediaIcon;
 
     bool m_showThumbnail;
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic