FilterTreeModel.cpp 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2021-2022, Tobias Christiansen <tobyase@serenityos.org>
  3. * Copyright (c) 2021, Mustafa Quraish <mustafa@serenityos.org>
  4. * Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause
  7. */
  8. #include "FilterTreeModel.h"
  9. #include "Filters/Bloom.h"
  10. #include "Filters/BoxBlur3.h"
  11. #include "Filters/BoxBlur5.h"
  12. #include "Filters/FastBoxBlur.h"
  13. #include "Filters/GaussBlur3.h"
  14. #include "Filters/GaussBlur5.h"
  15. #include "Filters/Grayscale.h"
  16. #include "Filters/HueAndSaturation.h"
  17. #include "Filters/Invert.h"
  18. #include "Filters/LaplaceCardinal.h"
  19. #include "Filters/LaplaceDiagonal.h"
  20. #include "Filters/Median.h"
  21. #include "Filters/Sepia.h"
  22. #include "Filters/Sharpen.h"
  23. #include <LibGUI/FileIconProvider.h>
  24. namespace PixelPaint {
  25. ErrorOr<NonnullRefPtr<GUI::TreeViewModel>> create_filter_tree_model(ImageEditor* editor)
  26. {
  27. auto directory_icon = GUI::FileIconProvider::directory_icon();
  28. auto filter_icon = GUI::Icon(TRY(Gfx::Bitmap::try_load_from_file("/res/icons/pixelpaint/filter.png"sv)));
  29. auto filter_tree_model = GUI::TreeViewModel::create();
  30. auto add_filter_node = [&]<typename FilterType>(GUI::TreeViewModel::Node& node) {
  31. auto filter = make_ref_counted<FilterType>(editor);
  32. (void)node.add_node<FilterNode>(filter->filter_name(), filter_icon, move(filter));
  33. };
  34. auto artistic_category = filter_tree_model->add_node("Artistic", directory_icon);
  35. add_filter_node.template operator()<Filters::Bloom>(artistic_category);
  36. auto spatial_category = filter_tree_model->add_node("Spatial", directory_icon);
  37. auto edge_detect_category = spatial_category->add_node("Edge Detection", directory_icon);
  38. add_filter_node.template operator()<Filters::LaplaceCardinal>(edge_detect_category);
  39. add_filter_node.template operator()<Filters::LaplaceDiagonal>(edge_detect_category);
  40. auto blur_category = spatial_category->add_node("Blur & Sharpen", directory_icon);
  41. add_filter_node.template operator()<Filters::FastBoxBlur>(blur_category);
  42. add_filter_node.template operator()<Filters::GaussBlur3>(blur_category);
  43. add_filter_node.template operator()<Filters::GaussBlur5>(blur_category);
  44. add_filter_node.template operator()<Filters::BoxBlur3>(blur_category);
  45. add_filter_node.template operator()<Filters::BoxBlur5>(blur_category);
  46. add_filter_node.template operator()<Filters::Sharpen>(blur_category);
  47. add_filter_node.template operator()<Filters::Median>(blur_category);
  48. auto color_category = filter_tree_model->add_node("Color", directory_icon);
  49. add_filter_node.template operator()<Filters::HueAndSaturation>(color_category);
  50. add_filter_node.template operator()<Filters::Grayscale>(color_category);
  51. add_filter_node.template operator()<Filters::Invert>(color_category);
  52. add_filter_node.template operator()<Filters::Sepia>(color_category);
  53. return filter_tree_model;
  54. }
  55. }