diff options
-rw-r--r-- | qt/ScintillaEditBase/PlatQt.cpp | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/qt/ScintillaEditBase/PlatQt.cpp b/qt/ScintillaEditBase/PlatQt.cpp index 9b63b30de..009c54a5a 100644 --- a/qt/ScintillaEditBase/PlatQt.cpp +++ b/qt/ScintillaEditBase/PlatQt.cpp @@ -769,6 +769,7 @@ public: virtual void RegisterImage(int type, const char *xpmData); virtual void RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage); + virtual void RegisterQPixmapImage(int type, const QPixmap& pm); virtual void ClearRegisteredImages(); virtual void SetDoubleClickAction(CallBackAction action, void *data); virtual void SetList(const char *list, char separator, char typesep); @@ -831,6 +832,16 @@ void ListBoxImpl::Create(Window &parent, list->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); list->move(location.x, location.y); + int maxIconWidth = 0; + int maxIconHeight = 0; + foreach (QPixmap im, images) { + if (maxIconWidth < im.width()) + maxIconWidth = im.width(); + if (maxIconHeight < im.height()) + maxIconHeight = im.height(); + } + list->setIconSize(QSize(maxIconWidth, maxIconHeight)); + wid = list; } @@ -882,9 +893,16 @@ int ListBoxImpl::CaretFromEdge() maxIconWidth = im.width(); } - // The '7' is from trial and error on Windows - there may be + int extra; + // The 12 is from trial and error on OS X and the 7 + // is from trial and error on Windows - there may be // a better programmatic way to find any padding factors. - return maxIconWidth + (2 * list->frameWidth()) + 7; +#ifdef Q_OS_DARWIN + extra = 12; +#else + extra = 7; +#endif + return maxIconWidth + (2 * list->frameWidth()) + extra; } void ListBoxImpl::Clear() @@ -956,21 +974,39 @@ void ListBoxImpl::GetValue(int n, char *value, int len) value[len-1] = '\0'; } +void ListBoxImpl::RegisterQPixmapImage(int type, const QPixmap& pm) +{ + images[type] = pm; + + ListWidget *list = static_cast<ListWidget *>(wid); + if (list != NULL) { + QSize iconSize = list->iconSize(); + if (pm.width() > iconSize.width() || pm.height() > iconSize.height()) + list->setIconSize(QSize(qMax(pm.width(), iconSize.width()), + qMax(pm.height(), iconSize.height()))); + } + +} + void ListBoxImpl::RegisterImage(int type, const char *xpmData) { - images[type] = QPixmap(reinterpret_cast<const char * const *>(xpmData)); + RegisterQPixmapImage(type, QPixmap(reinterpret_cast<const char * const *>(xpmData))); } void ListBoxImpl::RegisterRGBAImage(int type, int width, int height, const unsigned char *pixelsImage) { std::vector<unsigned char> imageBytes = ImageByteSwapped(width, height, pixelsImage); QImage image(&imageBytes[0], width, height, QImage::Format_ARGB32); - images[type] = QPixmap::fromImage(image); + RegisterQPixmapImage(type, QPixmap::fromImage(image)); } void ListBoxImpl::ClearRegisteredImages() { images.clear(); + + ListWidget *list = static_cast<ListWidget *>(wid); + if (list != NULL) + list->setIconSize(QSize(0, 0)); } void ListBoxImpl::SetDoubleClickAction(CallBackAction action, void *data) |