[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdeedu/kstars/kstars/skycomponents
From: Alexey Khudyakov <alexey.skladnoy () gmail ! com>
Date: 2010-02-09 22:34:01
Message-ID: 1265754841.035837.3112.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1087991 by khudyakov:
* Fix race condition. KStars attempted to draw flags when images
are not loaded yet. This lead to segfault
Fix have side effect. Flags are not visible immediately after redraw
* Clean up code
M +20 -38 flagcomponent.cpp
--- trunk/KDE/kdeedu/kstars/kstars/skycomponents/flagcomponent.cpp #1087990:1087991
@@ -116,33 +116,25 @@
void FlagComponent::draw( QPainter& psky )
{
- if( ! selected() )
+ if( !selected() )
return;
SkyMap *map = SkyMap::Instance();
KStarsData *data = KStarsData::Instance();
- SkyPoint *p;
- QPointF o;
- QImage flagImage;
- double epoch;
- long double jd;
- int i;
-
- for ( i=0; i<pointList().size(); i++ ) {
+ for(int i=0; i<pointList().size(); i++ ) {
// Get Screen coordinates
- p = pointList().at( i );
- epoch = getEpoch( m_Epoch.at( i ) );
- jd = epochToJd ( epoch );
+ SkyPoint* p = pointList().at( i );
+ double epoch = getEpoch( m_Epoch.at( i ) );
+ long double jd = epochToJd ( epoch );
p->apparentCoord(jd, data->ut().djd() );
p->EquatorialToHorizontal( data->lst(), data->geo()->lat() );
- o = map->toScreen( p, false );
// Draw flag image
- // FIXME: Stop drawing for a while
- // flagImage = m_Images.at( m_FlagImages.at( i ) );
- // o.setX( o.x() - flagImage.width()*0.5 );
- // o.setY( o.y() - flagImage.height()*0.5 );
- // psky.drawImage( o, flagImage );
+ QImage flagImage = m_Images.value( m_FlagImages.at( i ) );
+ QPointF o = map->toScreen( p, false );
+ o.setX( o.x() - flagImage.width()*0.5 );
+ o.setY( o.y() - flagImage.height()*0.5 );
+ psky.drawImage( o, flagImage );
// Draw flag label
o.setX( o.x() + 25.0 );
@@ -201,28 +193,18 @@
m_LabelColors.removeAt( index );
}
-void FlagComponent::slotLoadImages( KIO::Job* job, const KIO::UDSEntryList& list ) {
- int index = 0;
- QImage flagImage;
-
+void FlagComponent::slotLoadImages( KIO::Job*, const KIO::UDSEntryList& list ) {
m_Names.append( i18n ("Default" ) );
- flagImage.load( KStandardDirs::locate( "appdata", "defaultflag.gif" ) );
- m_Images.append( flagImage );
-
- for ( KIO::UDSEntryList::ConstIterator it = list.begin(); it != list.end(); ++it ) {
- KFileItem* item = new KFileItem(*it, m_Job->url(), false, true);
- if ( item->name().startsWith( QLatin1String( "_flag" ) ) ) {
- QStringList fileNameLst = item->name().split( '.' );
- fileNameLst.removeLast();
- QString fileName = fileNameLst.join( "." );
- fileName = fileName.right( fileName.size() - 5 );
- fileName = fileName.replace( '_', ' ' );
+ m_Images.append( QImage( KStandardDirs::locate( "appdata", "defaultflag.gif" ) ));
+ foreach( KIO::UDSEntry entry, list) {
+ KFileItem item(entry, m_Job->url(), false, true);
+ if( item.name().startsWith( "_flag" ) ) {
+ QString fileName = item.name()
+ .replace(QRegExp("\\.[^.]*$"), QString())
+ .replace(QRegExp("^_flag"), QString())
+ .replace('_',' ');
m_Names.append( fileName );
-
- flagImage.load( item->localPath() );
- m_Images.append( flagImage );
-
- index++;
+ m_Images.append( QImage( item.localPath() ));
}
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic