mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 20:52:45 +00:00 
			
		
		
		
	LibGfx: Move StandardCursor enum to LibGfx
This enum existed both in LibGUI and WindowServer which was silly and error-prone.
This commit is contained in:
		
							parent
							
								
									c063a02979
								
							
						
					
					
						commit
						0f9be82826
					
				
					 23 changed files with 127 additions and 111 deletions
				
			
		|  | @ -274,12 +274,12 @@ void HexEditor::mousemove_event(GUI::MouseEvent& event) | ||||||
|     auto text_end_x = text_start_x + (bytes_per_row() * character_width()); |     auto text_end_x = text_start_x + (bytes_per_row() * character_width()); | ||||||
|     auto text_end_y = text_start_y + 5 + (total_rows() * line_height()); |     auto text_end_y = text_start_y + 5 + (total_rows() * line_height()); | ||||||
| 
 | 
 | ||||||
|     window()->set_override_cursor(GUI::StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|     if ((absolute_x >= hex_start_x && absolute_x <= hex_end_x |     if ((absolute_x >= hex_start_x && absolute_x <= hex_end_x | ||||||
|             && absolute_y >= hex_start_y && absolute_y <= hex_end_y) |             && absolute_y >= hex_start_y && absolute_y <= hex_end_y) | ||||||
|         || (absolute_x >= text_start_x && absolute_x <= text_end_x |         || (absolute_x >= text_start_x && absolute_x <= text_end_x | ||||||
|             && absolute_y >= text_start_y && absolute_y <= text_end_y)) { |             && absolute_y >= text_start_y && absolute_y <= text_end_y)) { | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::IBeam); |         window()->set_override_cursor(Gfx::StandardCursor::IBeam); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (m_in_drag_select) { |     if (m_in_drag_select) { | ||||||
|  | @ -585,5 +585,5 @@ void HexEditor::paint_event(GUI::PaintEvent& event) | ||||||
| void HexEditor::leave_event(Core::Event&) | void HexEditor::leave_event(Core::Event&) | ||||||
| { | { | ||||||
|     ASSERT(window()); |     ASSERT(window()); | ||||||
|     window()->set_override_cursor(GUI::StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -81,16 +81,16 @@ void KeyButton::mousemove_event(GUI::MouseEvent& event) | ||||||
|     Gfx::IntRect c = { rect().x() + 7, rect().y() + 4, rect().width() - 14, rect().height() - 14 }; |     Gfx::IntRect c = { rect().x() + 7, rect().y() + 4, rect().width() - 14, rect().height() - 14 }; | ||||||
| 
 | 
 | ||||||
|     if (c.contains(event.position())) { |     if (c.contains(event.position())) { | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::Hand); |         window()->set_override_cursor(Gfx::StandardCursor::Hand); | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
|     window()->set_override_cursor(GUI::StandardCursor::Arrow); |     window()->set_override_cursor(Gfx::StandardCursor::Arrow); | ||||||
| 
 | 
 | ||||||
|     AbstractButton::mousemove_event(event); |     AbstractButton::mousemove_event(event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void KeyButton::leave_event(Core::Event& event) | void KeyButton::leave_event(Core::Event& event) | ||||||
| { | { | ||||||
|     window()->set_override_cursor(GUI::StandardCursor::Arrow); |     window()->set_override_cursor(Gfx::StandardCursor::Arrow); | ||||||
|     AbstractButton::leave_event(event); |     AbstractButton::leave_event(event); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -52,7 +52,7 @@ void MoveTool::on_mousedown(Layer& layer, GUI::MouseEvent& event, GUI::MouseEven | ||||||
|     m_layer_being_moved = layer; |     m_layer_being_moved = layer; | ||||||
|     m_event_origin = image_event.position(); |     m_event_origin = image_event.position(); | ||||||
|     m_layer_origin = layer.location(); |     m_layer_origin = layer.location(); | ||||||
|     m_editor->window()->set_override_cursor(GUI::StandardCursor::Move); |     m_editor->window()->set_override_cursor(Gfx::StandardCursor::Move); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MoveTool::on_mousemove(Layer&, GUI::MouseEvent&, GUI::MouseEvent& image_event) | void MoveTool::on_mousemove(Layer&, GUI::MouseEvent&, GUI::MouseEvent& image_event) | ||||||
|  | @ -69,7 +69,7 @@ void MoveTool::on_mouseup(Layer&, GUI::MouseEvent& event, GUI::MouseEvent&) | ||||||
|     if (event.button() != GUI::MouseButton::Left) |     if (event.button() != GUI::MouseButton::Left) | ||||||
|         return; |         return; | ||||||
|     m_layer_being_moved = nullptr; |     m_layer_being_moved = nullptr; | ||||||
|     m_editor->window()->set_override_cursor(GUI::StandardCursor::None); |     m_editor->window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void MoveTool::on_keydown(GUI::KeyEvent& event) | void MoveTool::on_keydown(GUI::KeyEvent& event) | ||||||
|  |  | ||||||
|  | @ -515,59 +515,59 @@ int main(int argc, char** argv) | ||||||
|     auto& radio_cursor_none = cursor_group_box.add<GUI::RadioButton>("None"); |     auto& radio_cursor_none = cursor_group_box.add<GUI::RadioButton>("None"); | ||||||
|     radio_cursor_none.set_checked(true); |     radio_cursor_none.set_checked(true); | ||||||
|     radio_cursor_none.on_checked = [&](bool) { |     radio_cursor_none.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::None); |         window->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_arrow = cursor_group_box.add<GUI::RadioButton>("Arrow"); |     auto& radio_cursor_arrow = cursor_group_box.add<GUI::RadioButton>("Arrow"); | ||||||
|     radio_cursor_arrow.on_checked = [&](bool) { |     radio_cursor_arrow.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::Arrow); |         window->set_override_cursor(Gfx::StandardCursor::Arrow); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_i_beam = cursor_group_box.add<GUI::RadioButton>("IBeam"); |     auto& radio_cursor_i_beam = cursor_group_box.add<GUI::RadioButton>("IBeam"); | ||||||
|     radio_cursor_i_beam.on_checked = [&](bool) { |     radio_cursor_i_beam.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::IBeam); |         window->set_override_cursor(Gfx::StandardCursor::IBeam); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_resize_horizontal = cursor_group_box.add<GUI::RadioButton>("ResizeHorizontal"); |     auto& radio_cursor_resize_horizontal = cursor_group_box.add<GUI::RadioButton>("ResizeHorizontal"); | ||||||
|     radio_cursor_resize_horizontal.on_checked = [&](bool) { |     radio_cursor_resize_horizontal.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::ResizeHorizontal); |         window->set_override_cursor(Gfx::StandardCursor::ResizeHorizontal); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_resize_vertical = cursor_group_box.add<GUI::RadioButton>("ResizeVertical"); |     auto& radio_cursor_resize_vertical = cursor_group_box.add<GUI::RadioButton>("ResizeVertical"); | ||||||
|     radio_cursor_resize_vertical.on_checked = [&](bool) { |     radio_cursor_resize_vertical.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::ResizeVertical); |         window->set_override_cursor(Gfx::StandardCursor::ResizeVertical); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_resize_diagonal_tlbr = cursor_group_box.add<GUI::RadioButton>("ResizeDiagonalTLBR"); |     auto& radio_cursor_resize_diagonal_tlbr = cursor_group_box.add<GUI::RadioButton>("ResizeDiagonalTLBR"); | ||||||
|     radio_cursor_resize_diagonal_tlbr.on_checked = [&](bool) { |     radio_cursor_resize_diagonal_tlbr.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::ResizeDiagonalTLBR); |         window->set_override_cursor(Gfx::StandardCursor::ResizeDiagonalTLBR); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_resize_diagonal_bltr = cursor_group_box.add<GUI::RadioButton>("ResizeDiagonalBLTR"); |     auto& radio_cursor_resize_diagonal_bltr = cursor_group_box.add<GUI::RadioButton>("ResizeDiagonalBLTR"); | ||||||
|     radio_cursor_resize_diagonal_bltr.on_checked = [&](bool) { |     radio_cursor_resize_diagonal_bltr.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::ResizeDiagonalBLTR); |         window->set_override_cursor(Gfx::StandardCursor::ResizeDiagonalBLTR); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_resize_column = cursor_group_box.add<GUI::RadioButton>("ResizeColumn"); |     auto& radio_cursor_resize_column = cursor_group_box.add<GUI::RadioButton>("ResizeColumn"); | ||||||
|     radio_cursor_resize_column.on_checked = [&](bool) { |     radio_cursor_resize_column.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::ResizeColumn); |         window->set_override_cursor(Gfx::StandardCursor::ResizeColumn); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_resize_row = cursor_group_box.add<GUI::RadioButton>("ResizeRow"); |     auto& radio_cursor_resize_row = cursor_group_box.add<GUI::RadioButton>("ResizeRow"); | ||||||
|     radio_cursor_resize_row.on_checked = [&](bool) { |     radio_cursor_resize_row.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::ResizeRow); |         window->set_override_cursor(Gfx::StandardCursor::ResizeRow); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_hand = cursor_group_box.add<GUI::RadioButton>("Hand"); |     auto& radio_cursor_hand = cursor_group_box.add<GUI::RadioButton>("Hand"); | ||||||
|     radio_cursor_hand.on_checked = [&](bool) { |     radio_cursor_hand.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::Hand); |         window->set_override_cursor(Gfx::StandardCursor::Hand); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_help = cursor_group_box.add<GUI::RadioButton>("Help"); |     auto& radio_cursor_help = cursor_group_box.add<GUI::RadioButton>("Help"); | ||||||
|     radio_cursor_help.on_checked = [&](bool) { |     radio_cursor_help.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::Help); |         window->set_override_cursor(Gfx::StandardCursor::Help); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_drag = cursor_group_box.add<GUI::RadioButton>("Drag"); |     auto& radio_cursor_drag = cursor_group_box.add<GUI::RadioButton>("Drag"); | ||||||
|     radio_cursor_drag.on_checked = [&](bool) { |     radio_cursor_drag.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::Drag); |         window->set_override_cursor(Gfx::StandardCursor::Drag); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_move = cursor_group_box.add<GUI::RadioButton>("Move"); |     auto& radio_cursor_move = cursor_group_box.add<GUI::RadioButton>("Move"); | ||||||
|     radio_cursor_move.on_checked = [&](bool) { |     radio_cursor_move.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::Move); |         window->set_override_cursor(Gfx::StandardCursor::Move); | ||||||
|     }; |     }; | ||||||
|     auto& radio_cursor_wait = cursor_group_box.add<GUI::RadioButton>("Wait"); |     auto& radio_cursor_wait = cursor_group_box.add<GUI::RadioButton>("Wait"); | ||||||
|     radio_cursor_wait.on_checked = [&](bool) { |     radio_cursor_wait.on_checked = [&](bool) { | ||||||
|         window->set_override_cursor(GUI::StandardCursor::Wait); |         window->set_override_cursor(Gfx::StandardCursor::Wait); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     app->set_menubar(move(menubar)); |     app->set_menubar(move(menubar)); | ||||||
|  |  | ||||||
|  | @ -209,9 +209,9 @@ void Editor::mousemove_event(GUI::MouseEvent& event) | ||||||
|     auto ruler_line_rect = ruler_content_rect(text_position.line()); |     auto ruler_line_rect = ruler_content_rect(text_position.line()); | ||||||
|     auto hovering_lines_ruler = (event.position().x() < ruler_line_rect.width()); |     auto hovering_lines_ruler = (event.position().x() < ruler_line_rect.width()); | ||||||
|     if (hovering_lines_ruler && !is_in_drag_select()) |     if (hovering_lines_ruler && !is_in_drag_select()) | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::Arrow); |         window()->set_override_cursor(Gfx::StandardCursor::Arrow); | ||||||
|     else if (m_hovering_editor) |     else if (m_hovering_editor) | ||||||
|         window()->set_override_cursor(m_hovering_link && m_holding_ctrl ? GUI::StandardCursor::Hand : GUI::StandardCursor::IBeam); |         window()->set_override_cursor(m_hovering_link && m_holding_ctrl ? Gfx::StandardCursor::Hand : Gfx::StandardCursor::IBeam); | ||||||
| 
 | 
 | ||||||
|     for (auto& span : document().spans()) { |     for (auto& span : document().spans()) { | ||||||
|         if (span.range.contains(m_previous_text_position) && !span.range.contains(text_position)) { |         if (span.range.contains(m_previous_text_position) && !span.range.contains(text_position)) { | ||||||
|  |  | ||||||
|  | @ -497,22 +497,22 @@ void VBForm::set_cursor_type_from_grabber(Direction grabber) | ||||||
|     switch (grabber) { |     switch (grabber) { | ||||||
|     case Direction::Up: |     case Direction::Up: | ||||||
|     case Direction::Down: |     case Direction::Down: | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::ResizeVertical); |         window()->set_override_cursor(Gfx::StandardCursor::ResizeVertical); | ||||||
|         break; |         break; | ||||||
|     case Direction::Left: |     case Direction::Left: | ||||||
|     case Direction::Right: |     case Direction::Right: | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::ResizeHorizontal); |         window()->set_override_cursor(Gfx::StandardCursor::ResizeHorizontal); | ||||||
|         break; |         break; | ||||||
|     case Direction::UpLeft: |     case Direction::UpLeft: | ||||||
|     case Direction::DownRight: |     case Direction::DownRight: | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::ResizeDiagonalTLBR); |         window()->set_override_cursor(Gfx::StandardCursor::ResizeDiagonalTLBR); | ||||||
|         break; |         break; | ||||||
|     case Direction::UpRight: |     case Direction::UpRight: | ||||||
|     case Direction::DownLeft: |     case Direction::DownLeft: | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::ResizeDiagonalBLTR); |         window()->set_override_cursor(Gfx::StandardCursor::ResizeDiagonalBLTR); | ||||||
|         break; |         break; | ||||||
|     case Direction::None: |     case Direction::None: | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::None); |         window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -100,11 +100,11 @@ void ColorInput::mouseup_event(MouseEvent& event) | ||||||
| void ColorInput::mousemove_event(MouseEvent& event) | void ColorInput::mousemove_event(MouseEvent& event) | ||||||
| { | { | ||||||
|     if (color_rect().contains(event.position())) { |     if (color_rect().contains(event.position())) { | ||||||
|         window()->set_override_cursor(StandardCursor::Hand); |         window()->set_override_cursor(Gfx::StandardCursor::Hand); | ||||||
|         event.accept(); |         event.accept(); | ||||||
|         return; |         return; | ||||||
|     } else { |     } else { | ||||||
|         window()->set_override_cursor(StandardCursor::IBeam); |         window()->set_override_cursor(Gfx::StandardCursor::IBeam); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     TextEditor::mousemove_event(event); |     TextEditor::mousemove_event(event); | ||||||
|  |  | ||||||
|  | @ -180,7 +180,7 @@ void HeaderView::mousemove_event(MouseEvent& event) | ||||||
|         bool found_hovered_header = false; |         bool found_hovered_header = false; | ||||||
|         for (int i = 0; i < section_count; ++i) { |         for (int i = 0; i < section_count; ++i) { | ||||||
|             if (section_resize_grabbable_rect(i).contains(event.position())) { |             if (section_resize_grabbable_rect(i).contains(event.position())) { | ||||||
|                 window()->set_override_cursor(StandardCursor::ResizeColumn); |                 window()->set_override_cursor(Gfx::StandardCursor::ResizeColumn); | ||||||
|                 set_hovered_section(-1); |                 set_hovered_section(-1); | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
|  | @ -192,7 +192,7 @@ void HeaderView::mousemove_event(MouseEvent& event) | ||||||
|         if (!found_hovered_header) |         if (!found_hovered_header) | ||||||
|             set_hovered_section(-1); |             set_hovered_section(-1); | ||||||
|     } |     } | ||||||
|     window()->set_override_cursor(StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void HeaderView::mouseup_event(MouseEvent& event) | void HeaderView::mouseup_event(MouseEvent& event) | ||||||
|  | @ -200,7 +200,7 @@ void HeaderView::mouseup_event(MouseEvent& event) | ||||||
|     if (event.button() == MouseButton::Left) { |     if (event.button() == MouseButton::Left) { | ||||||
|         if (m_in_section_resize) { |         if (m_in_section_resize) { | ||||||
|             if (!section_resize_grabbable_rect(m_resizing_section).contains(event.position())) |             if (!section_resize_grabbable_rect(m_resizing_section).contains(event.position())) | ||||||
|                 window()->set_override_cursor(StandardCursor::None); |                 window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|             m_in_section_resize = false; |             m_in_section_resize = false; | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  | @ -337,7 +337,7 @@ void HeaderView::leave_event(Core::Event& event) | ||||||
| { | { | ||||||
|     Widget::leave_event(event); |     Widget::leave_event(event); | ||||||
|     set_hovered_section(-1); |     set_hovered_section(-1); | ||||||
|     window()->set_override_cursor(StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Gfx::TextAlignment HeaderView::section_alignment(int section) const | Gfx::TextAlignment HeaderView::section_alignment(int section) const | ||||||
|  |  | ||||||
|  | @ -112,13 +112,13 @@ void ResizeCorner::mousedown_event(MouseEvent& event) | ||||||
| 
 | 
 | ||||||
| void ResizeCorner::enter_event(Core::Event& event) | void ResizeCorner::enter_event(Core::Event& event) | ||||||
| { | { | ||||||
|     window()->set_override_cursor(StandardCursor::ResizeDiagonalTLBR); |     window()->set_override_cursor(Gfx::StandardCursor::ResizeDiagonalTLBR); | ||||||
|     Widget::enter_event(event); |     Widget::enter_event(event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ResizeCorner::leave_event(Core::Event& event) | void ResizeCorner::leave_event(Core::Event& event) | ||||||
| { | { | ||||||
|     window()->set_override_cursor(StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|     Widget::leave_event(event); |     Widget::leave_event(event); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -62,12 +62,12 @@ void Splitter::override_cursor(bool do_override) | ||||||
| { | { | ||||||
|     if (do_override) { |     if (do_override) { | ||||||
|         if (!m_overriding_cursor) { |         if (!m_overriding_cursor) { | ||||||
|             window()->set_override_cursor(m_orientation == Orientation::Horizontal ? StandardCursor::ResizeColumn : StandardCursor::ResizeRow); |             window()->set_override_cursor(m_orientation == Orientation::Horizontal ? Gfx::StandardCursor::ResizeColumn : Gfx::StandardCursor::ResizeRow); | ||||||
|             m_overriding_cursor = true; |             m_overriding_cursor = true; | ||||||
|         } |         } | ||||||
|     } else { |     } else { | ||||||
|         if (m_overriding_cursor) { |         if (m_overriding_cursor) { | ||||||
|             window()->set_override_cursor(StandardCursor::None); |             window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|             m_overriding_cursor = false; |             m_overriding_cursor = false; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | @ -198,7 +198,7 @@ void Splitter::mouseup_event(MouseEvent& event) | ||||||
|     m_first_resizee = nullptr; |     m_first_resizee = nullptr; | ||||||
|     m_second_resizee = nullptr; |     m_second_resizee = nullptr; | ||||||
|     if (!rect().contains(event.position())) |     if (!rect().contains(event.position())) | ||||||
|         window()->set_override_cursor(StandardCursor::None); |         window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1343,7 +1343,7 @@ void TextEditor::enter_event(Core::Event&) | ||||||
| { | { | ||||||
|     ASSERT(window()); |     ASSERT(window()); | ||||||
|     if (!is_displayonly()) |     if (!is_displayonly()) | ||||||
|         window()->set_override_cursor(StandardCursor::IBeam); |         window()->set_override_cursor(Gfx::StandardCursor::IBeam); | ||||||
| 
 | 
 | ||||||
|     m_automatic_selection_scroll_timer->stop(); |     m_automatic_selection_scroll_timer->stop(); | ||||||
| } | } | ||||||
|  | @ -1351,7 +1351,7 @@ void TextEditor::enter_event(Core::Event&) | ||||||
| void TextEditor::leave_event(Core::Event&) | void TextEditor::leave_event(Core::Event&) | ||||||
| { | { | ||||||
|     ASSERT(window()); |     ASSERT(window()); | ||||||
|     window()->set_override_cursor(StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| 
 | 
 | ||||||
|     if (m_in_drag_select) |     if (m_in_drag_select) | ||||||
|         m_automatic_selection_scroll_timer->start(); |         m_automatic_selection_scroll_timer->start(); | ||||||
|  |  | ||||||
|  | @ -93,7 +93,7 @@ void Window::show() | ||||||
| 
 | 
 | ||||||
|     auto* parent_window = find_parent_window(); |     auto* parent_window = find_parent_window(); | ||||||
| 
 | 
 | ||||||
|     m_override_cursor = StandardCursor::None; |     m_override_cursor = Gfx::StandardCursor::None; | ||||||
|     auto response = WindowServerConnection::the().send_sync<Messages::WindowServer::CreateWindow>( |     auto response = WindowServerConnection::the().send_sync<Messages::WindowServer::CreateWindow>( | ||||||
|         m_rect_when_windowless, |         m_rect_when_windowless, | ||||||
|         !m_moved_by_client, |         !m_moved_by_client, | ||||||
|  | @ -138,7 +138,7 @@ void Window::server_did_destroy() | ||||||
|     m_pending_paint_event_rects.clear(); |     m_pending_paint_event_rects.clear(); | ||||||
|     m_back_bitmap = nullptr; |     m_back_bitmap = nullptr; | ||||||
|     m_front_bitmap = nullptr; |     m_front_bitmap = nullptr; | ||||||
|     m_override_cursor = StandardCursor::None; |     m_override_cursor = Gfx::StandardCursor::None; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Window::hide() | void Window::hide() | ||||||
|  | @ -226,7 +226,7 @@ void Window::set_window_type(WindowType window_type) | ||||||
|     m_window_type = window_type; |     m_window_type = window_type; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Window::set_override_cursor(StandardCursor cursor) | void Window::set_override_cursor(Gfx::StandardCursor cursor) | ||||||
| { | { | ||||||
|     if (!is_visible()) |     if (!is_visible()) | ||||||
|         return; |         return; | ||||||
|  |  | ||||||
|  | @ -36,26 +36,10 @@ | ||||||
| #include <LibGfx/Color.h> | #include <LibGfx/Color.h> | ||||||
| #include <LibGfx/Forward.h> | #include <LibGfx/Forward.h> | ||||||
| #include <LibGfx/Rect.h> | #include <LibGfx/Rect.h> | ||||||
|  | #include <LibGfx/StandardCursor.h> | ||||||
| 
 | 
 | ||||||
| namespace GUI { | namespace GUI { | ||||||
| 
 | 
 | ||||||
| enum class StandardCursor { |  | ||||||
|     None = 0, |  | ||||||
|     Arrow, |  | ||||||
|     IBeam, |  | ||||||
|     ResizeHorizontal, |  | ||||||
|     ResizeVertical, |  | ||||||
|     ResizeDiagonalTLBR, |  | ||||||
|     ResizeDiagonalBLTR, |  | ||||||
|     ResizeColumn, |  | ||||||
|     ResizeRow, |  | ||||||
|     Hand, |  | ||||||
|     Help, |  | ||||||
|     Drag, |  | ||||||
|     Move, |  | ||||||
|     Wait, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class Window : public Core::Object { | class Window : public Core::Object { | ||||||
|     C_OBJECT(Window) |     C_OBJECT(Window) | ||||||
| public: | public: | ||||||
|  | @ -184,7 +168,7 @@ public: | ||||||
|     void set_no_resize_aspect_ratio() { set_resize_aspect_ratio({}); } |     void set_no_resize_aspect_ratio() { set_resize_aspect_ratio({}); } | ||||||
|     void set_resize_aspect_ratio(const Optional<Gfx::IntSize>& ratio); |     void set_resize_aspect_ratio(const Optional<Gfx::IntSize>& ratio); | ||||||
| 
 | 
 | ||||||
|     void set_override_cursor(StandardCursor); |     void set_override_cursor(Gfx::StandardCursor); | ||||||
|     void set_override_cursor(const Gfx::Bitmap&); |     void set_override_cursor(const Gfx::Bitmap&); | ||||||
| 
 | 
 | ||||||
|     void set_icon(const Gfx::Bitmap*); |     void set_icon(const Gfx::Bitmap*); | ||||||
|  | @ -257,7 +241,7 @@ private: | ||||||
|     Gfx::IntSize m_base_size; |     Gfx::IntSize m_base_size; | ||||||
|     Color m_background_color { Color::WarmGray }; |     Color m_background_color { Color::WarmGray }; | ||||||
|     WindowType m_window_type { WindowType::Normal }; |     WindowType m_window_type { WindowType::Normal }; | ||||||
|     StandardCursor m_override_cursor { StandardCursor::None }; |     Gfx::StandardCursor m_override_cursor { Gfx::StandardCursor::None }; | ||||||
|     bool m_is_active { false }; |     bool m_is_active { false }; | ||||||
|     bool m_is_active_input { false }; |     bool m_is_active_input { false }; | ||||||
|     bool m_has_alpha_channel { false }; |     bool m_has_alpha_channel { false }; | ||||||
|  |  | ||||||
							
								
								
									
										48
									
								
								Libraries/LibGfx/StandardCursor.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								Libraries/LibGfx/StandardCursor.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,48 @@ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org> | ||||||
|  |  * All rights reserved. | ||||||
|  |  * | ||||||
|  |  * Redistribution and use in source and binary forms, with or without | ||||||
|  |  * modification, are permitted provided that the following conditions are met: | ||||||
|  |  * | ||||||
|  |  * 1. Redistributions of source code must retain the above copyright notice, this | ||||||
|  |  *    list of conditions and the following disclaimer. | ||||||
|  |  * | ||||||
|  |  * 2. Redistributions in binary form must reproduce the above copyright notice, | ||||||
|  |  *    this list of conditions and the following disclaimer in the documentation | ||||||
|  |  *    and/or other materials provided with the distribution. | ||||||
|  |  * | ||||||
|  |  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | ||||||
|  |  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  |  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||||||
|  |  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE | ||||||
|  |  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||||
|  |  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||||||
|  |  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||||
|  |  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||||||
|  |  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||||||
|  |  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | namespace Gfx { | ||||||
|  | 
 | ||||||
|  | enum class StandardCursor { | ||||||
|  |     None = 0, | ||||||
|  |     Arrow, | ||||||
|  |     IBeam, | ||||||
|  |     ResizeHorizontal, | ||||||
|  |     ResizeVertical, | ||||||
|  |     ResizeDiagonalTLBR, | ||||||
|  |     ResizeDiagonalBLTR, | ||||||
|  |     ResizeColumn, | ||||||
|  |     ResizeRow, | ||||||
|  |     Hand, | ||||||
|  |     Help, | ||||||
|  |     Drag, | ||||||
|  |     Move, | ||||||
|  |     Wait, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | @ -629,9 +629,9 @@ void TerminalWidget::mousemove_event(GUI::MouseEvent& event) | ||||||
|             m_hovered_href = {}; |             m_hovered_href = {}; | ||||||
|         } |         } | ||||||
|         if (!m_hovered_href.is_empty()) |         if (!m_hovered_href.is_empty()) | ||||||
|             window()->set_override_cursor(GUI::StandardCursor::Hand); |             window()->set_override_cursor(Gfx::StandardCursor::Hand); | ||||||
|         else |         else | ||||||
|             window()->set_override_cursor(GUI::StandardCursor::None); |             window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|         update(); |         update(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -667,7 +667,7 @@ void TerminalWidget::mousemove_event(GUI::MouseEvent& event) | ||||||
| 
 | 
 | ||||||
| void TerminalWidget::leave_event(Core::Event&) | void TerminalWidget::leave_event(Core::Event&) | ||||||
| { | { | ||||||
|     window()->set_override_cursor(GUI::StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|     bool should_update = !m_hovered_href.is_empty(); |     bool should_update = !m_hovered_href.is_empty(); | ||||||
|     m_hovered_href = {}; |     m_hovered_href = {}; | ||||||
|     m_hovered_href_id = {}; |     m_hovered_href_id = {}; | ||||||
|  |  | ||||||
|  | @ -150,7 +150,7 @@ void InProcessWebView::page_did_change_selection() | ||||||
|     update(); |     update(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void InProcessWebView::page_did_request_cursor_change(GUI::StandardCursor cursor) | void InProcessWebView::page_did_request_cursor_change(Gfx::StandardCursor cursor) | ||||||
| { | { | ||||||
|     if (window()) |     if (window()) | ||||||
|         window()->set_override_cursor(cursor); |         window()->set_override_cursor(cursor); | ||||||
|  | @ -358,7 +358,7 @@ void InProcessWebView::load_html(const StringView& html, const URL& url) | ||||||
| bool InProcessWebView::load(const URL& url) | bool InProcessWebView::load(const URL& url) | ||||||
| { | { | ||||||
|     if (window()) |     if (window()) | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::None); |         window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| 
 | 
 | ||||||
|     return page().main_frame().loader().load(url, FrameLoader::Type::Navigation); |     return page().main_frame().loader().load(url, FrameLoader::Type::Navigation); | ||||||
| } | } | ||||||
|  | @ -378,7 +378,7 @@ LayoutDocument* InProcessWebView::layout_root() | ||||||
| void InProcessWebView::page_did_request_scroll_into_view(const Gfx::IntRect& rect) | void InProcessWebView::page_did_request_scroll_into_view(const Gfx::IntRect& rect) | ||||||
| { | { | ||||||
|     scroll_into_view(rect, true, true); |     scroll_into_view(rect, true, true); | ||||||
|     window()->set_override_cursor(GUI::StandardCursor::None); |     window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void InProcessWebView::load_empty_document() | void InProcessWebView::load_empty_document() | ||||||
|  |  | ||||||
|  | @ -91,7 +91,7 @@ private: | ||||||
|     virtual void page_did_set_document_in_main_frame(DOM::Document*) override; |     virtual void page_did_set_document_in_main_frame(DOM::Document*) override; | ||||||
|     virtual void page_did_start_loading(const URL&) override; |     virtual void page_did_start_loading(const URL&) override; | ||||||
|     virtual void page_did_change_selection() override; |     virtual void page_did_change_selection() override; | ||||||
|     virtual void page_did_request_cursor_change(GUI::StandardCursor) override; |     virtual void page_did_request_cursor_change(Gfx::StandardCursor) override; | ||||||
|     virtual void page_did_request_context_menu(const Gfx::IntPoint&) override; |     virtual void page_did_request_context_menu(const Gfx::IntPoint&) override; | ||||||
|     virtual void page_did_request_link_context_menu(const Gfx::IntPoint&, const URL&, const String& target, unsigned modifiers) override; |     virtual void page_did_request_link_context_menu(const Gfx::IntPoint&, const URL&, const String& target, unsigned modifiers) override; | ||||||
|     virtual void page_did_click_link(const URL&, const String& target, unsigned modifiers) override; |     virtual void page_did_click_link(const URL&, const String& target, unsigned modifiers) override; | ||||||
|  |  | ||||||
|  | @ -138,7 +138,7 @@ void OutOfProcessWebView::notify_server_did_request_scroll_into_view(Badge<WebCo | ||||||
| void OutOfProcessWebView::notify_server_did_hover_link(Badge<WebContentClient>, const URL& url) | void OutOfProcessWebView::notify_server_did_hover_link(Badge<WebContentClient>, const URL& url) | ||||||
| { | { | ||||||
|     if (window()) |     if (window()) | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::Hand); |         window()->set_override_cursor(Gfx::StandardCursor::Hand); | ||||||
|     if (on_link_hover) |     if (on_link_hover) | ||||||
|         on_link_hover(url); |         on_link_hover(url); | ||||||
| } | } | ||||||
|  | @ -146,7 +146,7 @@ void OutOfProcessWebView::notify_server_did_hover_link(Badge<WebContentClient>, | ||||||
| void OutOfProcessWebView::notify_server_did_unhover_link(Badge<WebContentClient>) | void OutOfProcessWebView::notify_server_did_unhover_link(Badge<WebContentClient>) | ||||||
| { | { | ||||||
|     if (window()) |     if (window()) | ||||||
|         window()->set_override_cursor(GUI::StandardCursor::None); |         window()->set_override_cursor(Gfx::StandardCursor::None); | ||||||
|     if (on_link_hover) |     if (on_link_hover) | ||||||
|         on_link_hover({}); |         on_link_hover({}); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -216,11 +216,11 @@ bool EventHandler::handle_mousemove(const Gfx::IntPoint& position, unsigned butt | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (is_hovering_link) |     if (is_hovering_link) | ||||||
|         page_client.page_did_request_cursor_change(GUI::StandardCursor::Hand); |         page_client.page_did_request_cursor_change(Gfx::StandardCursor::Hand); | ||||||
|     else if (is_hovering_text) |     else if (is_hovering_text) | ||||||
|         page_client.page_did_request_cursor_change(GUI::StandardCursor::IBeam); |         page_client.page_did_request_cursor_change(Gfx::StandardCursor::IBeam); | ||||||
|     else |     else | ||||||
|         page_client.page_did_request_cursor_change(GUI::StandardCursor::None); |         page_client.page_did_request_cursor_change(Gfx::StandardCursor::None); | ||||||
| 
 | 
 | ||||||
|     if (hovered_node_changed) { |     if (hovered_node_changed) { | ||||||
|         RefPtr<HTML::HTMLElement> hovered_html_element = document.hovered_node() ? document.hovered_node()->enclosing_html_element() : nullptr; |         RefPtr<HTML::HTMLElement> hovered_html_element = document.hovered_node() ? document.hovered_node()->enclosing_html_element() : nullptr; | ||||||
|  |  | ||||||
|  | @ -82,7 +82,7 @@ public: | ||||||
|     virtual void page_did_change_title(const String&) { } |     virtual void page_did_change_title(const String&) { } | ||||||
|     virtual void page_did_start_loading(const URL&) { } |     virtual void page_did_start_loading(const URL&) { } | ||||||
|     virtual void page_did_change_selection() { } |     virtual void page_did_change_selection() { } | ||||||
|     virtual void page_did_request_cursor_change(GUI::StandardCursor) { } |     virtual void page_did_request_cursor_change(Gfx::StandardCursor) { } | ||||||
|     virtual void page_did_request_context_menu(const Gfx::IntPoint&) { } |     virtual void page_did_request_context_menu(const Gfx::IntPoint&) { } | ||||||
|     virtual void page_did_request_link_context_menu(const Gfx::IntPoint&, const URL&, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { } |     virtual void page_did_request_link_context_menu(const Gfx::IntPoint&, const URL&, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { } | ||||||
|     virtual void page_did_click_link(const URL&, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { } |     virtual void page_did_click_link(const URL&, [[maybe_unused]] const String& target, [[maybe_unused]] unsigned modifiers) { } | ||||||
|  |  | ||||||
|  | @ -610,7 +610,7 @@ OwnPtr<Messages::WindowServer::SetWindowOverrideCursorResponse> ClientConnection | ||||||
|         return nullptr; |         return nullptr; | ||||||
|     } |     } | ||||||
|     auto& window = *(*it).value; |     auto& window = *(*it).value; | ||||||
|     window.set_override_cursor(Cursor::create((StandardCursor)message.cursor_type())); |     window.set_override_cursor(Cursor::create((Gfx::StandardCursor)message.cursor_type())); | ||||||
|     Compositor::the().invalidate_cursor(); |     Compositor::the().invalidate_cursor(); | ||||||
|     return make<Messages::WindowServer::SetWindowOverrideCursorResponse>(); |     return make<Messages::WindowServer::SetWindowOverrideCursorResponse>(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -49,36 +49,36 @@ NonnullRefPtr<Cursor> Cursor::create(NonnullRefPtr<Gfx::Bitmap>&& bitmap, const | ||||||
|     return adopt(*new Cursor(move(bitmap), hotspot)); |     return adopt(*new Cursor(move(bitmap), hotspot)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| RefPtr<Cursor> Cursor::create(StandardCursor standard_cursor) | RefPtr<Cursor> Cursor::create(Gfx::StandardCursor standard_cursor) | ||||||
| { | { | ||||||
|     switch (standard_cursor) { |     switch (standard_cursor) { | ||||||
|     case StandardCursor::None: |     case Gfx::StandardCursor::None: | ||||||
|         return nullptr; |         return nullptr; | ||||||
|     case StandardCursor::Arrow: |     case Gfx::StandardCursor::Arrow: | ||||||
|         return WindowManager::the().arrow_cursor(); |         return WindowManager::the().arrow_cursor(); | ||||||
|     case StandardCursor::IBeam: |     case Gfx::StandardCursor::IBeam: | ||||||
|         return WindowManager::the().i_beam_cursor(); |         return WindowManager::the().i_beam_cursor(); | ||||||
|     case StandardCursor::ResizeHorizontal: |     case Gfx::StandardCursor::ResizeHorizontal: | ||||||
|         return WindowManager::the().resize_horizontally_cursor(); |         return WindowManager::the().resize_horizontally_cursor(); | ||||||
|     case StandardCursor::ResizeVertical: |     case Gfx::StandardCursor::ResizeVertical: | ||||||
|         return WindowManager::the().resize_vertically_cursor(); |         return WindowManager::the().resize_vertically_cursor(); | ||||||
|     case StandardCursor::ResizeDiagonalTLBR: |     case Gfx::StandardCursor::ResizeDiagonalTLBR: | ||||||
|         return WindowManager::the().resize_diagonally_tlbr_cursor(); |         return WindowManager::the().resize_diagonally_tlbr_cursor(); | ||||||
|     case StandardCursor::ResizeDiagonalBLTR: |     case Gfx::StandardCursor::ResizeDiagonalBLTR: | ||||||
|         return WindowManager::the().resize_diagonally_bltr_cursor(); |         return WindowManager::the().resize_diagonally_bltr_cursor(); | ||||||
|     case StandardCursor::ResizeColumn: |     case Gfx::StandardCursor::ResizeColumn: | ||||||
|         return WindowManager::the().resize_column_cursor(); |         return WindowManager::the().resize_column_cursor(); | ||||||
|     case StandardCursor::ResizeRow: |     case Gfx::StandardCursor::ResizeRow: | ||||||
|         return WindowManager::the().resize_row_cursor(); |         return WindowManager::the().resize_row_cursor(); | ||||||
|     case StandardCursor::Hand: |     case Gfx::StandardCursor::Hand: | ||||||
|         return WindowManager::the().hand_cursor(); |         return WindowManager::the().hand_cursor(); | ||||||
|     case StandardCursor::Help: |     case Gfx::StandardCursor::Help: | ||||||
|         return WindowManager::the().help_cursor(); |         return WindowManager::the().help_cursor(); | ||||||
|     case StandardCursor::Drag: |     case Gfx::StandardCursor::Drag: | ||||||
|         return WindowManager::the().drag_cursor(); |         return WindowManager::the().drag_cursor(); | ||||||
|     case StandardCursor::Move: |     case Gfx::StandardCursor::Move: | ||||||
|         return WindowManager::the().move_cursor(); |         return WindowManager::the().move_cursor(); | ||||||
|     case StandardCursor::Wait: |     case Gfx::StandardCursor::Wait: | ||||||
|         return WindowManager::the().wait_cursor(); |         return WindowManager::the().wait_cursor(); | ||||||
|     } |     } | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
|  |  | ||||||
|  | @ -27,31 +27,15 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <LibGfx/Bitmap.h> | #include <LibGfx/Bitmap.h> | ||||||
|  | #include <LibGfx/StandardCursor.h> | ||||||
| 
 | 
 | ||||||
| namespace WindowServer { | namespace WindowServer { | ||||||
| 
 | 
 | ||||||
| enum class StandardCursor { |  | ||||||
|     None = 0, |  | ||||||
|     Arrow, |  | ||||||
|     IBeam, |  | ||||||
|     ResizeHorizontal, |  | ||||||
|     ResizeVertical, |  | ||||||
|     ResizeDiagonalTLBR, |  | ||||||
|     ResizeDiagonalBLTR, |  | ||||||
|     ResizeColumn, |  | ||||||
|     ResizeRow, |  | ||||||
|     Hand, |  | ||||||
|     Help, |  | ||||||
|     Drag, |  | ||||||
|     Move, |  | ||||||
|     Wait, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class Cursor : public RefCounted<Cursor> { | class Cursor : public RefCounted<Cursor> { | ||||||
| public: | public: | ||||||
|     static NonnullRefPtr<Cursor> create(NonnullRefPtr<Gfx::Bitmap>&&, const Gfx::IntPoint& hotspot); |     static NonnullRefPtr<Cursor> create(NonnullRefPtr<Gfx::Bitmap>&&, const Gfx::IntPoint& hotspot); | ||||||
|     static NonnullRefPtr<Cursor> create(NonnullRefPtr<Gfx::Bitmap>&&); |     static NonnullRefPtr<Cursor> create(NonnullRefPtr<Gfx::Bitmap>&&); | ||||||
|     static RefPtr<Cursor> create(StandardCursor); |     static RefPtr<Cursor> create(Gfx::StandardCursor); | ||||||
|     ~Cursor(); |     ~Cursor(); | ||||||
| 
 | 
 | ||||||
|     Gfx::IntPoint hotspot() const { return m_hotspot; } |     Gfx::IntPoint hotspot() const { return m_hotspot; } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling