mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:48:10 +00:00
LibGfx+Everywhere: Change Gfx::Rect
to be endpoint exclusive
Previously, calling `.right()` on a `Gfx::Rect` would return the last column's coordinate still inside the rectangle, or `left + width - 1`. This is called 'endpoint inclusive' and does not make a lot of sense for `Gfx::Rect<float>` where a rectangle of width 5 at position (0, 0) would return 4 as its right side. This same problem exists for `.bottom()`. This changes `Gfx::Rect` to be endpoint exclusive, which gives us the nice property that `width = right - left` and `height = bottom - top`. It enables us to treat `Gfx::Rect<int>` and `Gfx::Rect<float>` exactly the same. All users of `Gfx::Rect` have been updated accordingly.
This commit is contained in:
parent
b7f4363791
commit
f391ccfe53
88 changed files with 524 additions and 518 deletions
|
@ -362,7 +362,7 @@ void WindowFrame::PerScaleRenderedCache::paint(WindowFrame& frame, Gfx::Painter&
|
|||
}
|
||||
if (m_bottom_y < top_bottom_height) {
|
||||
// We have a bottom piece
|
||||
Gfx::IntRect rect_in_frame { frame_rect.x(), window_rect.bottom() + 1, frame_rect.width(), top_bottom_height - m_bottom_y };
|
||||
Gfx::IntRect rect_in_frame { frame_rect.x(), window_rect.bottom(), frame_rect.width(), top_bottom_height - m_bottom_y };
|
||||
auto src_rect = rect.intersected(rect_in_frame);
|
||||
if (!src_rect.is_empty())
|
||||
painter.blit(src_rect.location(), *m_top_bottom, src_rect.translated(-rect_in_frame.x(), -rect_in_frame.y() + m_bottom_y), frame.opacity());
|
||||
|
@ -380,7 +380,7 @@ void WindowFrame::PerScaleRenderedCache::paint(WindowFrame& frame, Gfx::Painter&
|
|||
}
|
||||
if (m_right_x < left_right_width) {
|
||||
// We have a right piece
|
||||
Gfx::IntRect rect_in_frame { window_rect.right() + 1, window_rect.y(), left_right_width - m_right_x, window_rect.height() };
|
||||
Gfx::IntRect rect_in_frame { window_rect.right(), window_rect.y(), left_right_width - m_right_x, window_rect.height() };
|
||||
auto src_rect = rect.intersected(rect_in_frame);
|
||||
if (!src_rect.is_empty())
|
||||
painter.blit(src_rect.location(), *m_left_right, src_rect.translated(-rect_in_frame.x() + m_right_x, -rect_in_frame.y()), frame.opacity());
|
||||
|
@ -525,9 +525,9 @@ void WindowFrame::PerScaleRenderedCache::render(WindowFrame& frame, Screen& scre
|
|||
Gfx::Painter top_bottom_painter(*m_top_bottom);
|
||||
top_bottom_painter.add_clip_rect({ update_location, { frame_rect_to_update.width(), top_bottom_height - update_location.y() - (frame_rect_including_shadow.bottom() - frame_rect_to_update.bottom()) } });
|
||||
if (m_bottom_y > 0)
|
||||
top_bottom_painter.blit({ 0, 0 }, *tmp_bitmap, { 0, 0, frame_rect_including_shadow.width(), m_bottom_y }, 1.0, false);
|
||||
top_bottom_painter.blit({ 0, 0 }, *tmp_bitmap, { 0, 0, frame_rect_including_shadow.width(), m_bottom_y }, 1.f, false);
|
||||
if (m_bottom_y < top_bottom_height)
|
||||
top_bottom_painter.blit({ 0, m_bottom_y }, *tmp_bitmap, { 0, frame_rect_including_shadow.height() - (frame_rect_including_shadow.bottom() - window_rect.bottom()), frame_rect_including_shadow.width(), top_bottom_height - m_bottom_y }, 1.0, false);
|
||||
top_bottom_painter.blit({ 0, m_bottom_y }, *tmp_bitmap, { 0, frame_rect_including_shadow.height() - (frame_rect_including_shadow.bottom() - window_rect.bottom()), frame_rect_including_shadow.width(), top_bottom_height - m_bottom_y }, 1.f, false);
|
||||
} else {
|
||||
m_bottom_y = 0;
|
||||
}
|
||||
|
@ -541,7 +541,7 @@ void WindowFrame::PerScaleRenderedCache::render(WindowFrame& frame, Screen& scre
|
|||
if (m_right_x > 0)
|
||||
left_right_painter.blit({ 0, 0 }, *tmp_bitmap, { 0, m_bottom_y, m_right_x, window_rect.height() }, 1.0, false);
|
||||
if (m_right_x < left_right_width)
|
||||
left_right_painter.blit({ m_right_x, 0 }, *tmp_bitmap, { (window_rect.right() - frame_rect_including_shadow.x()) + 1, m_bottom_y, frame_rect_including_shadow.width() - (frame_rect_including_shadow.right() - window_rect.right()), window_rect.height() }, 1.0, false);
|
||||
left_right_painter.blit({ m_right_x, 0 }, *tmp_bitmap, { window_rect.right() - frame_rect_including_shadow.x(), m_bottom_y, frame_rect_including_shadow.width() - (frame_rect_including_shadow.right() - window_rect.right()), window_rect.height() }, 1.0, false);
|
||||
} else {
|
||||
m_right_x = 0;
|
||||
}
|
||||
|
@ -727,9 +727,9 @@ Optional<HitTestResult> WindowFrame::PerScaleRenderedCache::hit_test(WindowFrame
|
|||
if (m_top_bottom->rect().contains(scaled_relative_point))
|
||||
alpha = m_top_bottom->get_pixel(scaled_relative_point).alpha();
|
||||
}
|
||||
} else if (position.y() > window_rect.bottom()) {
|
||||
} else if (position.y() >= window_rect.bottom()) {
|
||||
if (m_top_bottom) {
|
||||
Gfx::IntPoint scaled_relative_point { window_relative_position.x() * m_top_bottom->scale(), m_bottom_y * m_top_bottom->scale() + position.y() - window_rect.bottom() - 1 };
|
||||
Gfx::IntPoint scaled_relative_point { window_relative_position.x() * m_top_bottom->scale(), m_bottom_y * m_top_bottom->scale() + position.y() - window_rect.bottom() };
|
||||
if (m_top_bottom->rect().contains(scaled_relative_point))
|
||||
alpha = m_top_bottom->get_pixel(scaled_relative_point).alpha();
|
||||
}
|
||||
|
@ -739,9 +739,9 @@ Optional<HitTestResult> WindowFrame::PerScaleRenderedCache::hit_test(WindowFrame
|
|||
if (m_left_right->rect().contains(scaled_relative_point))
|
||||
alpha = m_left_right->get_pixel(scaled_relative_point).alpha();
|
||||
}
|
||||
} else if (position.x() > window_rect.right()) {
|
||||
} else if (position.x() >= window_rect.right()) {
|
||||
if (m_left_right) {
|
||||
Gfx::IntPoint scaled_relative_point { m_right_x * m_left_right->scale() + position.x() - window_rect.right() - 1, (window_relative_position.y() - m_bottom_y) * m_left_right->scale() };
|
||||
Gfx::IntPoint scaled_relative_point { m_right_x * m_left_right->scale() + position.x() - window_rect.right(), (window_relative_position.y() - m_bottom_y) * m_left_right->scale() };
|
||||
if (m_left_right->rect().contains(scaled_relative_point))
|
||||
alpha = m_left_right->get_pixel(scaled_relative_point).alpha();
|
||||
}
|
||||
|
@ -769,7 +769,7 @@ bool WindowFrame::handle_titlebar_icon_mouse_event(MouseEvent const& event)
|
|||
// for the fact that we opened and closed a window in the meanwhile
|
||||
wm.system_menu_doubleclick(m_window, event);
|
||||
|
||||
m_window.popup_window_menu(titlebar_rect().bottom_left().translated(rect().location()), WindowMenuDefaultAction::Close);
|
||||
m_window.popup_window_menu(titlebar_rect().bottom_left().moved_up(1).translated(rect().location()), WindowMenuDefaultAction::Close);
|
||||
return true;
|
||||
} else if (event.type() == Event::MouseUp && event.button() == MouseButton::Primary) {
|
||||
// Since the MouseDown event opened a menu, another MouseUp
|
||||
|
@ -909,7 +909,7 @@ void WindowFrame::open_menubar_menu(Menu& menu)
|
|||
{
|
||||
auto menubar_rect = this->menubar_rect();
|
||||
MenuManager::the().close_everyone();
|
||||
auto position = menu.rect_in_window_menubar().bottom_left().translated(rect().location()).translated(menubar_rect.location());
|
||||
auto position = menu.rect_in_window_menubar().bottom_left().moved_up(1).translated(rect().location()).translated(menubar_rect.location());
|
||||
menu.set_unadjusted_position(position);
|
||||
auto& window = menu.ensure_menu_window(position);
|
||||
auto window_rect = window.rect();
|
||||
|
@ -917,13 +917,12 @@ void WindowFrame::open_menubar_menu(Menu& menu)
|
|||
auto window_border_thickness = 1;
|
||||
|
||||
// If the menu is off the right edge of the screen align its right edge with the edge of the screen.
|
||||
if (window_rect.right() > screen.width()) {
|
||||
position = position.translated(((window_rect.right() - screen.width()) * -1) - window_border_thickness, 0);
|
||||
}
|
||||
if (window_rect.right() - 1 > screen.width())
|
||||
position = position.translated(((window_rect.right() - 1 - screen.width()) * -1) - window_border_thickness, 0);
|
||||
|
||||
// If the menu is below the bottom of the screen move it to appear above the menubar.
|
||||
if (window_rect.bottom() > screen.height()) {
|
||||
if (window_rect.bottom() - 1 > screen.height())
|
||||
position = position.translated(0, (window_rect.height() * -1) - menubar_rect.height());
|
||||
}
|
||||
|
||||
window.set_rect(position.x(), position.y(), window_rect.width(), window_rect.height());
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue