[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