[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