3
0

ImagePreviewer.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #if !defined(Q_MOC_RUN)
  10. #include <AzCore/Memory/SystemAllocator.h>
  11. #include <AzCore/Component/TickBus.h>
  12. #include <AzToolsFramework/AssetBrowser/Previewer/Previewer.h>
  13. #include <Atom/ImageProcessing/ImageObject.h>
  14. #include <QWidget>
  15. #include <QScopedPointer>
  16. #include <QFuture>
  17. #include <QtConcurrent/QtConcurrent>
  18. #endif
  19. namespace Ui
  20. {
  21. class ImagePreviewerClass;
  22. }
  23. namespace AzToolsFramework
  24. {
  25. namespace AssetBrowser
  26. {
  27. class ProductAssetBrowserEntry;
  28. class SourceAssetBrowserEntry;
  29. class AssetBrowserEntry;
  30. }
  31. }
  32. class QResizeEvent;
  33. namespace ImageProcessingAtom
  34. {
  35. namespace Utils
  36. {
  37. class AsyncImageAssetLoader;
  38. }
  39. class ImagePreviewer
  40. : public AzToolsFramework::AssetBrowser::Previewer
  41. , private AZ::SystemTickBus::Handler
  42. {
  43. Q_OBJECT
  44. public:
  45. AZ_CLASS_ALLOCATOR(ImagePreviewer, AZ::SystemAllocator);
  46. explicit ImagePreviewer(QWidget* parent = nullptr);
  47. ~ImagePreviewer();
  48. //! AzToolsFramework::AssetBrowser::Previewer overrides
  49. void Clear() const override;
  50. void Display(const AzToolsFramework::AssetBrowser::AssetBrowserEntry* entry) override;
  51. const QString& GetName() const override;
  52. protected:
  53. void resizeEvent(QResizeEvent * event) override;
  54. private:
  55. void DisplayProduct(const AzToolsFramework::AssetBrowser::ProductAssetBrowserEntry* product);
  56. void DisplaySource(const AzToolsFramework::AssetBrowser::SourceAssetBrowserEntry* source);
  57. QString GetFileSize(const char* path);
  58. void DisplayTextureItem();
  59. template<class CreateFn>
  60. void CreateAndDisplayTextureItemAsync(CreateFn create);
  61. void PreviewSubImage(uint32_t mip);
  62. // QLabel word wrap does not break long words such as filenames, so manual word wrap needed
  63. static QString WordWrap(const QString& string, int maxLength);
  64. // SystemTickBus
  65. void OnSystemTick() override;
  66. QScopedPointer<Ui::ImagePreviewerClass> m_ui;
  67. QString m_fileinfo;
  68. QString m_name = "ImagePreviewer";
  69. // Decompressed image in preview. Cache it so we can preview its sub images
  70. IImageObjectPtr m_previewImageObject;
  71. // Properties for tracking the status of an asynchronous request to display an asset browser entry
  72. using CreateDisplayTextureResult = AZStd::pair<IImageObjectPtr, QString>;
  73. QFuture<CreateDisplayTextureResult> m_createDisplayTextureResult;
  74. AZStd::shared_ptr<Utils::AsyncImageAssetLoader> m_imageAssetLoader;
  75. };
  76. }//namespace ImageProcessingAtom