Icon.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2021, Julius Heijmen <julius.heijmen@gmail.com>
  4. * Copyright (c) 2022, the SerenityOS developers.
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause
  7. */
  8. #pragma once
  9. #include <AK/HashMap.h>
  10. #include <AK/NonnullRefPtr.h>
  11. #include <AK/RefCounted.h>
  12. #include <LibGfx/Bitmap.h>
  13. namespace GUI {
  14. class IconImpl : public RefCounted<IconImpl> {
  15. public:
  16. static NonnullRefPtr<IconImpl> create() { return adopt_ref(*new IconImpl); }
  17. ~IconImpl() = default;
  18. Gfx::Bitmap const* bitmap_for_size(int) const;
  19. void set_bitmap_for_size(int, RefPtr<Gfx::Bitmap>&&);
  20. Vector<int> sizes() const
  21. {
  22. Vector<int> sizes;
  23. for (auto& it : m_bitmaps)
  24. sizes.append(it.key);
  25. return sizes;
  26. }
  27. private:
  28. IconImpl() = default;
  29. HashMap<int, RefPtr<Gfx::Bitmap>> m_bitmaps;
  30. };
  31. class Icon {
  32. public:
  33. Icon();
  34. explicit Icon(RefPtr<Gfx::Bitmap>&&);
  35. explicit Icon(RefPtr<Gfx::Bitmap>&&, RefPtr<Gfx::Bitmap>&&);
  36. explicit Icon(IconImpl const&);
  37. Icon(Icon const&);
  38. ~Icon() = default;
  39. static Icon default_icon(StringView);
  40. static ErrorOr<Icon> try_create_default_icon(StringView);
  41. Icon& operator=(Icon const& other)
  42. {
  43. if (this != &other)
  44. m_impl = other.m_impl;
  45. return *this;
  46. }
  47. Gfx::Bitmap const* bitmap_for_size(int size) const { return m_impl->bitmap_for_size(size); }
  48. void set_bitmap_for_size(int size, RefPtr<Gfx::Bitmap>&& bitmap) { m_impl->set_bitmap_for_size(size, move(bitmap)); }
  49. IconImpl const& impl() const { return *m_impl; }
  50. Vector<int> sizes() const { return m_impl->sizes(); }
  51. private:
  52. NonnullRefPtr<IconImpl> m_impl;
  53. };
  54. }