aboutsummaryrefslogtreecommitdiffhomepage
path: root/qt/ScintillaEditBase/PlatQt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt/ScintillaEditBase/PlatQt.cpp')
-rw-r--r--qt/ScintillaEditBase/PlatQt.cpp44
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)