From bdb6b2ced3f6abeb331207e0d859b48993ea147c Mon Sep 17 00:00:00 2001 From: rhin123 Date: Wed, 8 Apr 2020 22:54:06 -0500 Subject: [PATCH] Calendar: Corrected spacing on small resizing --- Applications/Calendar/CalendarWidget.cpp | 48 +++++++++++++++++------- Applications/Calendar/CalendarWidget.h | 1 + 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/Applications/Calendar/CalendarWidget.cpp b/Applications/Calendar/CalendarWidget.cpp index 3f29bee7aa..498f23ee57 100644 --- a/Applications/Calendar/CalendarWidget.cpp +++ b/Applications/Calendar/CalendarWidget.cpp @@ -42,17 +42,16 @@ CalendarWidget::CalendarWidget() set_fill_with_background_color(true); set_layout(); - auto& top_container = add(); - top_container.set_layout(); - top_container.layout()->set_margins({ 4, 4, 4, 4 }); - top_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); - top_container.set_preferred_size(0, 45); + m_top_container = add(); + m_top_container->set_layout(); + m_top_container->layout()->set_margins({ 4, 4, 4, 4 }); + m_top_container->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); + m_top_container->set_preferred_size(0, 45); - auto& top_left_container = top_container.add(); + auto& top_left_container = m_top_container->add(); top_left_container.set_layout(); top_left_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); top_left_container.set_preferred_size(0, 45); - m_selected_date_label = top_left_container.add(m_calendar->selected_date_text()); m_selected_date_label->set_font(Gfx::Font::default_bold_font()); m_selected_date_label->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); @@ -91,7 +90,7 @@ CalendarWidget::CalendarWidget() update_calendar_tiles(m_target_year, m_target_month); }; - auto& top_right_container = top_container.add(); + auto& top_right_container = m_top_container->add(); top_right_container.set_layout(); top_right_container.set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); top_right_container.set_preferred_size(0, 45); @@ -113,8 +112,27 @@ CalendarWidget::~CalendarWidget() } void CalendarWidget::resize_event(GUI::ResizeEvent& event) { + if (event.size().width() < 350) { + if (m_next_month_button->size_policy(Orientation::Horizontal) == GUI::SizePolicy::Fixed) + m_next_month_button->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); + if (m_prev_month_button->size_policy(Orientation::Horizontal) == GUI::SizePolicy::Fixed) + m_prev_month_button->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed); + } else { + if (m_next_month_button->size_policy(Orientation::Horizontal) == GUI::SizePolicy::Fill) + m_next_month_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); + if (m_prev_month_button->size_policy(Orientation::Horizontal) == GUI::SizePolicy::Fill) + m_prev_month_button->set_size_policy(GUI::SizePolicy::Fixed, GUI::SizePolicy::Fixed); + } + + if (m_top_container->height() > event.size().height() / 3) { + if (m_top_container->is_visible()) + m_top_container->set_visible(false); + } else if (!m_top_container->is_visible()) + m_top_container->set_visible(true); + + int top_container_height = (m_top_container->is_visible()) ? 47 : 0; m_tile_width = event.size().width() / 7; - m_tile_height = (event.size().height() - 47) / 5; + m_tile_height = (event.size().height() - top_container_height) / 5; int i = 0; for (int y = 0; y < 5; y++) @@ -220,22 +238,24 @@ void CalendarWidget::CalendarTile::paint_event(GUI::PaintEvent& event) Gfx::Rect day_rect = Gfx::Rect(frame_inner_rect().x(), frame_inner_rect().y(), frame_inner_rect().width(), font().glyph_height() + 4); - if (m_display_weekday_name) { + int weekday_characters_width = (font().glyph_width('0') * (m_weekday_name.length() + 1)) + 4; + if (m_display_weekday_name && (frame_inner_rect().height() > (font().glyph_height() + 4) * 2) && (frame_inner_rect().width() > weekday_characters_width)) { auto weekday_rect = Gfx::Rect(frame_inner_rect().x(), frame_inner_rect().y(), frame_inner_rect().width(), font().glyph_height() + 4); weekday_rect.set_top(frame_inner_rect().y() + 2); painter.draw_text(weekday_rect, m_weekday_name, Gfx::Font::default_bold_font(), Gfx::TextAlignment::Center, palette().base_text()); - day_rect.set_y(frame_inner_rect().y() + 15); } else { day_rect = Gfx::Rect(frame_inner_rect().x(), frame_inner_rect().y(), frame_inner_rect().width(), font().glyph_height() + 4); day_rect.set_y(frame_inner_rect().y() + 4); } + int highlight_rect_width = (font().glyph_width('0') * (m_display_date.length() + 1)) + 2; + auto display_date = (m_date_time.day() == 1 && frame_inner_rect().width() > highlight_rect_width) ? m_display_date : String::number(m_date_time.day()); + if (m_calendar.is_today(m_date_time)) { - int highlight_rect_width = (font().glyph_width('0') * (m_display_date.length() + 1)) + 2; auto highlight_rect = Gfx::Rect(day_rect.width() / 2 - (highlight_rect_width / 2), day_rect.y(), highlight_rect_width, font().glyph_height() + 4); painter.draw_rect(highlight_rect, palette().base_text()); - painter.draw_text(day_rect, m_display_date, Gfx::Font::default_bold_font(), Gfx::TextAlignment::Center, palette().base_text()); + painter.draw_text(day_rect, display_date, Gfx::Font::default_bold_font(), Gfx::TextAlignment::Center, palette().base_text()); } else - painter.draw_text(day_rect, m_display_date, Gfx::TextAlignment::Center, palette().base_text()); + painter.draw_text(day_rect, display_date, Gfx::TextAlignment::Center, palette().base_text()); } diff --git a/Applications/Calendar/CalendarWidget.h b/Applications/Calendar/CalendarWidget.h index 75f6655cb9..9a23846b19 100644 --- a/Applications/Calendar/CalendarWidget.h +++ b/Applications/Calendar/CalendarWidget.h @@ -45,6 +45,7 @@ private: void show_add_event_window(Calendar* calendar); OwnPtr m_calendar; + RefPtr m_top_container; RefPtr m_bottom_container; RefPtr m_selected_date_label; RefPtr m_prev_month_button;