File indexing completed on 2025-02-02 04:11:04
0001 /* 0002 * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <QPixmap> 0010 #include <QImage> 0011 #include <QFileInfo> 0012 #include <QUrl> 0013 0014 #include "model/assets/asset.hpp" 0015 0016 namespace glaxnimate::model { 0017 0018 class Bitmap : public Asset 0019 { 0020 GLAXNIMATE_OBJECT(Bitmap) 0021 GLAXNIMATE_PROPERTY(QByteArray, data, {}, &Bitmap::on_refresh) 0022 GLAXNIMATE_PROPERTY(QString, filename, {}, &Bitmap::on_refresh) 0023 GLAXNIMATE_PROPERTY(QString, url, {}, &Bitmap::on_refresh) 0024 GLAXNIMATE_PROPERTY_RO(QString, format, {}) 0025 GLAXNIMATE_PROPERTY_RO(int, width, -1) 0026 GLAXNIMATE_PROPERTY_RO(int, height, -1) 0027 Q_PROPERTY(bool embedded READ embedded WRITE embed) 0028 Q_PROPERTY(QImage image READ get_image) 0029 0030 public: 0031 using Asset::Asset; 0032 0033 void paint(QPainter* painter) const; 0034 0035 bool embedded() const; 0036 0037 QIcon instance_icon() const override; 0038 0039 QString type_name_human() const override 0040 { 0041 return i18n("Bitmap"); 0042 } 0043 0044 bool from_url(const QUrl& url); 0045 bool from_file(const QString& file); 0046 bool from_base64(const QString& data); 0047 bool from_raw_data(const QByteArray& data); 0048 0049 QUrl to_url() const; 0050 0051 QString object_name() const override; 0052 0053 QFileInfo file_info() const; 0054 0055 const QPixmap& pixmap() const { return image; } 0056 void set_pixmap(const QImage& qimage, const QString& format); 0057 0058 bool remove_if_unused(bool clean_lists) override; 0059 0060 QImage get_image() const 0061 { 0062 return image.toImage(); 0063 } 0064 0065 /** 0066 * \brief If `embedded()` returns `data`, otherwise tries to load the data based on filename 0067 */ 0068 QByteArray image_data() const; 0069 0070 QSize size() const; 0071 0072 public Q_SLOTS: 0073 void refresh(bool rebuild_embedded); 0074 0075 void embed(bool embedded); 0076 0077 private: 0078 QByteArray build_embedded(const QImage& img) const; 0079 0080 private Q_SLOTS: 0081 void on_refresh(); 0082 0083 Q_SIGNALS: 0084 void loaded(); 0085 0086 private: 0087 QPixmap image; 0088 0089 }; 0090 0091 } // namespace glaxnimate::model