From kde-commits Fri Jul 17 09:09:47 2009 From: Carlo Date: Fri, 17 Jul 2009 09:09:47 +0000 To: kde-commits Subject: Re: KDE/kdelibs/kdeui/icons Message-Id: <3262b6180907170209o3ee132f6p8ba32110ee92e9c9 () mail ! gmail ! com> X-MARC-Message: https://marc.info/?l=kde-commits&m=124782183618441 On Fri, Jul 17, 2009 at 10:47 AM, David Faure wrote: > On Friday 17 July 2009, Carlo Segato wrote: >> SVN commit 998111 by segato: >> >> apparently QApplication::desktop()->paintEngine() is null on windows, so the check for antialiasing support fails >> even if we support it(or at least I hope so), this way we can have smooth icons effects on windows too >> >> >>  M  +10 -1     kiconeffect.cpp >> >> >> --- trunk/KDE/kdelibs/kdeui/icons/kiconeffect.cpp #998110:998111 >> @@ -505,8 +505,10 @@ >>          int width  = img.width(); >>       int height = img.height(); >> >> +#ifndef Q_WS_WIN >>          QPaintEngine* pe = QApplication::desktop()->paintEngine(); >>          if(pe && pe->hasFeature(QPaintEngine::Antialiasing)){ >> +#endif >>              unsigned char *line; >>              for(y=0; y>                  if(QSysInfo::ByteOrder == QSysInfo::BigEndian) >> @@ -518,6 +520,7 @@ >>                      line += 4; >>                  } >>              } >> +#ifndef Q_WS_WIN >>          } >>          else{ >>              for(y=0; y> @@ -526,11 +529,15 @@ >>                      line[x] &= 0x00ffffff; >>              } >>          } >> +#endif >>      } >>      else{ >>          if (img.depth() == 8) { >> +#ifndef Q_WS_WIN >>              QPaintEngine *pe = QApplication::desktop()->paintEngine(); >> -            if (pe && pe->hasFeature(QPaintEngine::Antialiasing)) { >> +            if (pe && pe->hasFeature(QPaintEngine::Antialiasing)) >> +#endif >> +            { >>                  // not running on 8 bit, we can safely install a new colorTable >>                  QVector colorTable = img.colorTable(); >>                  for (int i = 0; i < colorTable.size(); ++i) { >> @@ -595,7 +602,9 @@ >> >>  void KIconEffect::semiTransparent(QPixmap &pix) >>  { >> +#ifndef Q_WS_WIN >>      if (QApplication::desktop()->paintEngine() && QApplication::desktop()->paintEngine()->hasFeature(QPaintEngine::Antialiasing)) >> +#endif > > This code would be cleaner with a helper static function > > static bool painterSupportsAntialiasing() > { > #ifndef Q_WS_WIN >    // apparently QApplication::desktop()->paintEngine() is null on windows >    // but we can assume the paint engine supports antialiasing there, right? >    return true; > #else >    QPaintEngine* const pe = QApplication::desktop()->paintEngine(); >    return pe && pe->hasFeature(QPaintEngine::Antialiasing); > #endif > } > > This way the logic is in a single place and can be changed more easily, > and the "hack" is documented, making the code more understandable > (and fixable, if necessary). > > -- > David Faure, faure@kde.org, sponsored by Qt Software @ Nokia to work on KDE, > Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org). > thanks, I just commited it