GFrame.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <LibGUI/GFrame.h>
  2. #include <SharedGraphics/StylePainter.h>
  3. #include <LibGUI/GPainter.h>
  4. GFrame::GFrame(GWidget* parent)
  5. : GWidget(parent)
  6. {
  7. }
  8. GFrame::~GFrame()
  9. {
  10. }
  11. void GFrame::paint_event(GPaintEvent& event)
  12. {
  13. if (m_shape == Shape::NoFrame)
  14. return;
  15. GPainter painter(*this);
  16. painter.add_clip_rect(event.rect());
  17. Color top_left_color;
  18. Color bottom_right_color;
  19. Color dark_shade = Color::from_rgb(0x808080);
  20. Color light_shade = Color::from_rgb(0xffffff);
  21. if (m_shadow == Shadow::Raised) {
  22. top_left_color = light_shade;
  23. bottom_right_color = dark_shade;
  24. } else if (m_shadow == Shadow::Sunken) {
  25. top_left_color = dark_shade;
  26. bottom_right_color = light_shade;
  27. } else if (m_shadow == Shadow::Plain) {
  28. top_left_color = dark_shade;
  29. bottom_right_color = dark_shade;
  30. }
  31. if (m_thickness >= 1) {
  32. painter.draw_line(rect().top_left(), rect().top_right(), top_left_color);
  33. painter.draw_line(rect().bottom_left(), rect().bottom_right(), bottom_right_color);
  34. if (m_shape != Shape::Panel || !spans_entire_window_horizontally()) {
  35. painter.draw_line(rect().top_left().translated(0, 1), rect().bottom_left().translated(0, -1), top_left_color);
  36. painter.draw_line(rect().top_right(), rect().bottom_right().translated(0, -1), bottom_right_color);
  37. }
  38. }
  39. if (m_shape == Shape::Container && m_thickness >= 2) {
  40. Color top_left_color;
  41. Color bottom_right_color;
  42. Color dark_shade = Color::from_rgb(0x404040);
  43. Color light_shade = Color::from_rgb(0xc0c0c0);
  44. if (m_shadow == Shadow::Raised) {
  45. top_left_color = light_shade;
  46. bottom_right_color = dark_shade;
  47. } else if (m_shadow == Shadow::Sunken) {
  48. top_left_color = dark_shade;
  49. bottom_right_color = light_shade;
  50. } else if (m_shadow == Shadow::Plain) {
  51. top_left_color = dark_shade;
  52. bottom_right_color = dark_shade;
  53. }
  54. Rect inner_container_frame_rect = rect().shrunken(2, 2);
  55. painter.draw_line(inner_container_frame_rect.top_left(), inner_container_frame_rect.top_right(), top_left_color);
  56. painter.draw_line(inner_container_frame_rect.bottom_left(), inner_container_frame_rect.bottom_right(), bottom_right_color);
  57. painter.draw_line(inner_container_frame_rect.top_left().translated(0, 1), inner_container_frame_rect.bottom_left().translated(0, -1), top_left_color);
  58. painter.draw_line(inner_container_frame_rect.top_right(), inner_container_frame_rect.bottom_right().translated(0, -1), bottom_right_color);
  59. }
  60. }