#pragma once #include #include class GIconImpl : public Retainable { public: static Retained create() { return adopt(*new GIconImpl); } ~GIconImpl() {} const GraphicsBitmap* bitmap_for_size(int) const; void set_bitmap_for_size(int, RetainPtr&&); private: GIconImpl() {} HashMap> m_bitmaps; }; class GIcon { public: GIcon(); explicit GIcon(RetainPtr&&); explicit GIcon(RetainPtr&&, RetainPtr&&); explicit GIcon(const GIconImpl&); GIcon(const GIcon&); ~GIcon() {} static GIcon default_icon(const StringView&); GIcon& operator=(const GIcon& other) { m_impl = other.m_impl.copy_ref(); return *this; } const GraphicsBitmap* bitmap_for_size(int size) const { return m_impl->bitmap_for_size(size); } void set_bitmap_for_size(int size, RetainPtr&& bitmap) { m_impl->set_bitmap_for_size(size, move(bitmap)); } const GIconImpl& impl() const { return *m_impl; } private: Retained m_impl; };