map_preview_image_provider.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "map_preview_image_provider.h"
  2. #include <QMutexLocker>
  3. MapPreviewImageProvider::MapPreviewImageProvider()
  4. : QQuickImageProvider(QQuickImageProvider::Image) {}
  5. QImage MapPreviewImageProvider::requestImage(const QString &id, QSize *size,
  6. const QSize &requested_size) {
  7. QImage image_copy;
  8. {
  9. QMutexLocker locker(&m_mutex);
  10. if (m_preview_images.contains(id)) {
  11. image_copy = m_preview_images[id];
  12. }
  13. }
  14. if (image_copy.isNull()) {
  15. QImage placeholder(200, 200, QImage::Format_RGBA8888);
  16. placeholder.fill(QColor(40, 40, 40));
  17. if (size) {
  18. *size = placeholder.size();
  19. }
  20. return placeholder;
  21. }
  22. if (size) {
  23. *size = image_copy.size();
  24. }
  25. if (requested_size.isValid() && !requested_size.isEmpty()) {
  26. return image_copy.scaled(requested_size, Qt::KeepAspectRatio,
  27. Qt::SmoothTransformation);
  28. }
  29. return image_copy;
  30. }
  31. void MapPreviewImageProvider::set_preview_image(const QString &map_id,
  32. const QImage &image) {
  33. QMutexLocker locker(&m_mutex);
  34. m_preview_images[map_id] = image;
  35. }
  36. void MapPreviewImageProvider::clear_preview(const QString &map_id) {
  37. QMutexLocker locker(&m_mutex);
  38. m_preview_images.remove(map_id);
  39. }