DiffViewer.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
  3. * Copyright (c) 2022, the SerenityOS developers.
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/String.h>
  9. #include <AK/Vector.h>
  10. #include <LibDiff/Hunks.h>
  11. #include <LibGUI/AbstractScrollableWidget.h>
  12. namespace HackStudio {
  13. class DiffViewer final : public GUI::AbstractScrollableWidget {
  14. C_OBJECT(DiffViewer)
  15. public:
  16. virtual ~DiffViewer() override = default;
  17. void set_content(String const& original, String const& diff);
  18. private:
  19. DiffViewer(String const& original, String const& diff);
  20. DiffViewer();
  21. void setup_properties();
  22. virtual void paint_event(GUI::PaintEvent&) override;
  23. virtual void resize_event(GUI::ResizeEvent&) override;
  24. void update_content_size();
  25. enum class LinePosition {
  26. Left,
  27. Right,
  28. Both,
  29. };
  30. enum class LineType {
  31. Normal,
  32. Diff,
  33. Missing,
  34. };
  35. void draw_line(GUI::Painter&, String const& line, size_t y_offset, LinePosition, LineType);
  36. static Vector<String> split_to_lines(String const& text);
  37. static Gfx::Color red_background();
  38. static Gfx::Color green_background();
  39. static Gfx::Color gray_background();
  40. size_t line_height() const;
  41. Gfx::IntRect separator_rect() const;
  42. Vector<String> m_original_lines;
  43. Vector<Diff::Hunk> m_hunks;
  44. };
  45. }