summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Libraries/LibGUI/GMenu.cpp4
-rw-r--r--Libraries/LibGUI/GMenu.h5
-rw-r--r--Libraries/LibGUI/GMenuBar.cpp5
-rw-r--r--Libraries/LibGUI/GMenuBar.h6
-rw-r--r--Libraries/LibGUI/GTextEditor.cpp61
-rw-r--r--Libraries/LibGUI/GTextEditor.h9
-rw-r--r--Libraries/LibGUI/GToolBar.h3
7 files changed, 46 insertions, 47 deletions
diff --git a/Libraries/LibGUI/GMenu.cpp b/Libraries/LibGUI/GMenu.cpp
index 4ab05d3038..b6d0da5a8e 100644
--- a/Libraries/LibGUI/GMenu.cpp
+++ b/Libraries/LibGUI/GMenu.cpp
@@ -80,7 +80,7 @@ int GMenu::realize_menu()
#endif
ASSERT(m_menu_id > 0);
for (int i = 0; i < m_items.size(); ++i) {
- auto& item = *m_items[i];
+ auto& item = m_items[i];
item.set_menu_id({}, m_menu_id);
item.set_identifier({}, i);
if (item.type() == GMenuItem::Separator) {
@@ -136,5 +136,5 @@ GAction* GMenu::action_at(int index)
{
if (index >= m_items.size())
return nullptr;
- return m_items[index]->action();
+ return m_items[index].action();
}
diff --git a/Libraries/LibGUI/GMenu.h b/Libraries/LibGUI/GMenu.h
index 4848f7a9fc..2ddd6f41f2 100644
--- a/Libraries/LibGUI/GMenu.h
+++ b/Libraries/LibGUI/GMenu.h
@@ -1,9 +1,8 @@
#pragma once
#include <AK/Function.h>
-#include <AK/RefCounted.h>
+#include <AK/NonnullOwnPtrVector.h>
#include <AK/NonnullRefPtr.h>
-#include <AK/Vector.h>
#include <LibGUI/GMenuItem.h>
class GAction;
@@ -35,5 +34,5 @@ private:
int m_menu_id { -1 };
String m_name;
- Vector<OwnPtr<GMenuItem>> m_items;
+ NonnullOwnPtrVector<GMenuItem> m_items;
};
diff --git a/Libraries/LibGUI/GMenuBar.cpp b/Libraries/LibGUI/GMenuBar.cpp
index f57d9dc896..a48e094a11 100644
--- a/Libraries/LibGUI/GMenuBar.cpp
+++ b/Libraries/LibGUI/GMenuBar.cpp
@@ -10,7 +10,7 @@ GMenuBar::~GMenuBar()
unrealize_menubar();
}
-void GMenuBar::add_menu(OwnPtr<GMenu>&& menu)
+void GMenuBar::add_menu(NonnullOwnPtr<GMenu>&& menu)
{
m_menus.append(move(menu));
}
@@ -40,8 +40,7 @@ void GMenuBar::notify_added_to_application(Badge<GApplication>)
m_menubar_id = realize_menubar();
ASSERT(m_menubar_id != -1);
for (auto& menu : m_menus) {
- ASSERT(menu);
- int menu_id = menu->realize_menu();
+ int menu_id = menu.realize_menu();
ASSERT(menu_id != -1);
WSAPI_ClientMessage request;
request.type = WSAPI_ClientMessage::Type::AddMenuToMenubar;
diff --git a/Libraries/LibGUI/GMenuBar.h b/Libraries/LibGUI/GMenuBar.h
index 88f98eed7b..5802177cb9 100644
--- a/Libraries/LibGUI/GMenuBar.h
+++ b/Libraries/LibGUI/GMenuBar.h
@@ -1,7 +1,7 @@
#pragma once
#include <AK/Badge.h>
-#include <AK/Vector.h>
+#include <AK/NonnullOwnPtrVector.h>
#include <LibGUI/GMenu.h>
class GApplication;
@@ -11,7 +11,7 @@ public:
GMenuBar();
~GMenuBar();
- void add_menu(OwnPtr<GMenu>&&);
+ void add_menu(NonnullOwnPtr<GMenu>&&);
void notify_added_to_application(Badge<GApplication>);
void notify_removed_from_application(Badge<GApplication>);
@@ -21,5 +21,5 @@ private:
void unrealize_menubar();
int m_menubar_id { -1 };
- Vector<OwnPtr<GMenu>> m_menus;
+ NonnullOwnPtrVector<GMenu> m_menus;
};
diff --git a/Libraries/LibGUI/GTextEditor.cpp b/Libraries/LibGUI/GTextEditor.cpp
index 9661a51097..468495af9e 100644
--- a/Libraries/LibGUI/GTextEditor.cpp
+++ b/Libraries/LibGUI/GTextEditor.cpp
@@ -68,7 +68,7 @@ void GTextEditor::create_actions()
void GTextEditor::set_text(const StringView& text)
{
- if (is_single_line() && text.length() == m_lines[0]->length() && !memcmp(text.characters_without_null_termination(), m_lines[0]->characters(), text.length()))
+ if (is_single_line() && text.length() == m_lines[0].length() && !memcmp(text.characters_without_null_termination(), m_lines[0].characters(), text.length()))
return;
m_selection.clear();
@@ -91,7 +91,7 @@ void GTextEditor::set_text(const StringView& text)
add_line(i);
update_content_size();
if (is_single_line())
- set_cursor(0, m_lines[0]->length());
+ set_cursor(0, m_lines[0].length());
else
set_cursor(0, 0);
did_update_selection();
@@ -102,7 +102,7 @@ void GTextEditor::update_content_size()
{
int content_width = 0;
for (auto& line : m_lines)
- content_width = max(line->width(font()), content_width);
+ content_width = max(line.width(font()), content_width);
content_width += m_horizontal_content_padding * 2;
if (is_right_text_alignment(m_text_alignment))
content_width = max(frame_inner_rect().width(), content_width);
@@ -133,7 +133,7 @@ GTextPosition GTextEditor::text_position_at(const Point& a_position) const
ASSERT_NOT_REACHED();
}
- column_index = max(0, min(column_index, m_lines[line_index]->length()));
+ column_index = max(0, min(column_index, m_lines[line_index].length()));
return { line_index, column_index };
}
@@ -147,7 +147,7 @@ void GTextEditor::doubleclick_event(GMouseEvent& event)
auto start = text_position_at(event.position());
auto end = start;
- auto& line = *m_lines[start.line()];
+ auto& line = m_lines[start.line()];
while (start.column() > 0) {
if (isspace(line.characters()[start.column() - 1]))
break;
@@ -181,11 +181,11 @@ void GTextEditor::mousedown_event(GMouseEvent& event)
if (is_multi_line()) {
// select *current* line
start = GTextPosition(m_cursor.line(), 0);
- end = GTextPosition(m_cursor.line(), m_lines[m_cursor.line()]->length());
+ end = GTextPosition(m_cursor.line(), m_lines[m_cursor.line()].length());
} else {
// select *whole* line
start = GTextPosition(0, 0);
- end = GTextPosition(line_count() - 1, m_lines[line_count() - 1]->length());
+ end = GTextPosition(line_count() - 1, m_lines[line_count() - 1].length());
}
m_selection.set(start, end);
@@ -302,7 +302,7 @@ void GTextEditor::paint_event(GPaintEvent& event)
painter.add_clip_rect({ m_ruler_visible ? (ruler_rect.right() + frame_thickness() + 1) : frame_thickness(), frame_thickness(), width() - width_occupied_by_vertical_scrollbar() - ruler_width(), height() - height_occupied_by_horizontal_scrollbar() });
for (int i = first_visible_line; i <= last_visible_line; ++i) {
- auto& line = *m_lines[i];
+ auto& line = m_lines[i];
auto line_rect = line_content_rect(i);
// FIXME: Make sure we always fill the entire line.
//line_rect.set_width(exposed_width);
@@ -316,7 +316,6 @@ void GTextEditor::paint_event(GPaintEvent& event)
int selection_left = content_x_for_position({ i, selection_start_column_on_line });
int selection_right = content_x_for_position({ i, selection_end_column_on_line });
- ;
Rect selection_rect { selection_left, line_rect.y(), selection_right - selection_left, line_rect.height() };
painter.fill_rect(selection_rect, Color::from_rgb(0x955233));
@@ -347,7 +346,7 @@ void GTextEditor::toggle_selection_if_needed_for_event(const GKeyEvent& event)
void GTextEditor::select_all()
{
GTextPosition start_of_document { 0, 0 };
- GTextPosition end_of_document { line_count() - 1, m_lines[line_count() - 1]->length() };
+ GTextPosition end_of_document { line_count() - 1, m_lines[line_count() - 1].length() };
m_selection.set(start_of_document, end_of_document);
did_update_selection();
set_cursor(end_of_document);
@@ -373,7 +372,7 @@ void GTextEditor::keydown_event(GKeyEvent& event)
if (event.key() == KeyCode::Key_Up) {
if (m_cursor.line() > 0) {
int new_line = m_cursor.line() - 1;
- int new_column = min(m_cursor.column(), m_lines[new_line]->length());
+ int new_column = min(m_cursor.column(), m_lines[new_line].length());
toggle_selection_if_needed_for_event(event);
set_cursor(new_line, new_column);
if (m_selection.start().is_valid()) {
@@ -386,7 +385,7 @@ void GTextEditor::keydown_event(GKeyEvent& event)
if (event.key() == KeyCode::Key_Down) {
if (m_cursor.line() < (m_lines.size() - 1)) {
int new_line = m_cursor.line() + 1;
- int new_column = min(m_cursor.column(), m_lines[new_line]->length());
+ int new_column = min(m_cursor.column(), m_lines[new_line].length());
toggle_selection_if_needed_for_event(event);
set_cursor(new_line, new_column);
if (m_selection.start().is_valid()) {
@@ -399,7 +398,7 @@ void GTextEditor::keydown_event(GKeyEvent& event)
if (event.key() == KeyCode::Key_PageUp) {
if (m_cursor.line() > 0) {
int new_line = max(0, m_cursor.line() - visible_content_rect().height() / line_height());
- int new_column = min(m_cursor.column(), m_lines[new_line]->length());
+ int new_column = min(m_cursor.column(), m_lines[new_line].length());
toggle_selection_if_needed_for_event(event);
set_cursor(new_line, new_column);
if (m_selection.start().is_valid()) {
@@ -412,7 +411,7 @@ void GTextEditor::keydown_event(GKeyEvent& event)
if (event.key() == KeyCode::Key_PageDown) {
if (m_cursor.line() < (m_lines.size() - 1)) {
int new_line = min(line_count() - 1, m_cursor.line() + visible_content_rect().height() / line_height());
- int new_column = min(m_cursor.column(), m_lines[new_line]->length());
+ int new_column = min(m_cursor.column(), m_lines[new_line].length());
toggle_selection_if_needed_for_event(event);
set_cursor(new_line, new_column);
if (m_selection.start().is_valid()) {
@@ -433,7 +432,7 @@ void GTextEditor::keydown_event(GKeyEvent& event)
}
} else if (m_cursor.line() > 0) {
int new_line = m_cursor.line() - 1;
- int new_column = m_lines[new_line]->length();
+ int new_column = m_lines[new_line].length();
toggle_selection_if_needed_for_event(event);
set_cursor(new_line, new_column);
if (m_selection.start().is_valid()) {
@@ -493,7 +492,7 @@ void GTextEditor::keydown_event(GKeyEvent& event)
}
if (event.ctrl() && event.key() == KeyCode::Key_End) {
toggle_selection_if_needed_for_event(event);
- set_cursor(line_count() - 1, m_lines[line_count() - 1]->length());
+ set_cursor(line_count() - 1, m_lines[line_count() - 1].length());
if (m_selection.start().is_valid()) {
m_selection.set_end(m_cursor);
did_update_selection();
@@ -522,7 +521,7 @@ void GTextEditor::keydown_event(GKeyEvent& event)
}
if (m_cursor.column() == 0 && m_cursor.line() != 0) {
// Backspace at column 0; merge with previous line
- auto& previous_line = *m_lines[m_cursor.line() - 1];
+ auto& previous_line = m_lines[m_cursor.line() - 1];
int previous_length = previous_line.length();
previous_line.append(current_line().characters(), current_line().length());
m_lines.remove(m_cursor.line());
@@ -582,7 +581,7 @@ void GTextEditor::do_delete()
}
if (m_cursor.column() == current_line().length() && m_cursor.line() != line_count() - 1) {
// Delete at end of line; merge with next line
- auto& next_line = *m_lines[m_cursor.line() + 1];
+ auto& next_line = m_lines[m_cursor.line() + 1];
int previous_length = current_line().length();
current_line().append(next_line.characters(), next_line.length());
m_lines.remove(m_cursor.line() + 1);
@@ -610,7 +609,7 @@ void GTextEditor::insert_at_cursor(char ch)
String new_line_contents;
if (m_automatic_indentation_enabled && at_tail) {
int leading_spaces = 0;
- auto& old_line = *m_lines[m_cursor.line()];
+ auto& old_line = m_lines[m_cursor.line()];
for (int i = 0; i < old_line.length(); ++i) {
if (old_line.characters()[i] == ' ')
++leading_spaces;
@@ -623,7 +622,7 @@ void GTextEditor::insert_at_cursor(char ch)
m_lines.insert(m_cursor.line() + (at_tail ? 1 : 0), make<Line>(new_line_contents));
update();
did_change();
- set_cursor(m_cursor.line() + 1, m_lines[m_cursor.line() + 1]->length());
+ set_cursor(m_cursor.line() + 1, m_lines[m_cursor.line() + 1].length());
return;
}
auto new_line = make<Line>();
@@ -652,7 +651,7 @@ void GTextEditor::insert_at_cursor(char ch)
int GTextEditor::content_x_for_position(const GTextPosition& position) const
{
- auto& line = *m_lines[position.line()];
+ auto& line = m_lines[position.line()];
switch (m_text_alignment) {
case TextAlignment::CenterLeft:
return m_horizontal_content_padding + position.column() * glyph_width();
@@ -696,14 +695,14 @@ void GTextEditor::scroll_cursor_into_view()
auto rect = cursor_content_rect();
if (m_cursor.column() == 0)
rect.set_x(content_x_for_position({ m_cursor.line(), 0 }) - 2);
- else if (m_cursor.column() == m_lines[m_cursor.line()]->length())
- rect.set_x(content_x_for_position({ m_cursor.line(), m_lines[m_cursor.line()]->length() }) + 2);
+ else if (m_cursor.column() == m_lines[m_cursor.line()].length())
+ rect.set_x(content_x_for_position({ m_cursor.line(), m_lines[m_cursor.line()].length() }) + 2);
scroll_into_view(rect, true, true);
}
Rect GTextEditor::line_content_rect(int line_index) const
{
- auto& line = *m_lines[line_index];
+ auto& line = m_lines[line_index];
if (is_single_line()) {
Rect line_rect = { content_x_for_position({ line_index, 0 }), 0, line.length() * glyph_width(), font().glyph_height() + 2 };
line_rect.center_vertically_within({ {}, frame_inner_rect().size() });
@@ -731,7 +730,7 @@ void GTextEditor::set_cursor(const GTextPosition& position)
{
ASSERT(!m_lines.is_empty());
ASSERT(position.line() < m_lines.size());
- ASSERT(position.column() <= m_lines[position.line()]->length());
+ ASSERT(position.column() <= m_lines[position.line()].length());
if (m_cursor != position) {
// NOTE: If the old cursor is no longer valid, repaint everything just in case.
auto old_cursor_line_rect = m_cursor.line() < m_lines.size()
@@ -850,7 +849,7 @@ bool GTextEditor::write_to_file(const StringView& path)
return false;
}
for (int i = 0; i < m_lines.size(); ++i) {
- auto& line = *m_lines[i];
+ auto& line = m_lines[i];
if (line.length()) {
ssize_t nwritten = write(fd, line.characters(), line.length());
if (nwritten < 0) {
@@ -878,7 +877,7 @@ String GTextEditor::text() const
{
StringBuilder builder;
for (int i = 0; i < line_count(); ++i) {
- auto& line = *m_lines[i];
+ auto& line = m_lines[i];
builder.append(line.characters(), line.length());
if (i != line_count() - 1)
builder.append('\n');
@@ -904,7 +903,7 @@ String GTextEditor::selected_text() const
auto selection = normalized_selection();
StringBuilder builder;
for (int i = selection.start().line(); i <= selection.end().line(); ++i) {
- auto& line = *m_lines[i];
+ auto& line = m_lines[i];
int selection_start_column_on_line = selection.start().line() == i ? selection.start().column() : 0;
int selection_end_column_on_line = selection.end().line() == i ? selection.end().column() : line.length();
builder.append(line.characters() + selection_start_column_on_line, selection_end_column_on_line - selection_start_column_on_line);
@@ -930,7 +929,7 @@ void GTextEditor::delete_selection()
if (selection.start().line() == selection.end().line()) {
// Delete within same line.
- auto& line = *m_lines[selection.start().line()];
+ auto& line = m_lines[selection.start().line()];
bool whole_line_is_selected = selection.start().column() == 0 && selection.end().column() == line.length();
if (whole_line_is_selected) {
line.clear();
@@ -945,8 +944,8 @@ void GTextEditor::delete_selection()
} else {
// Delete across a newline, merging lines.
ASSERT(selection.start().line() == selection.end().line() - 1);
- auto& first_line = *m_lines[selection.start().line()];
- auto& second_line = *m_lines[selection.end().line()];
+ auto& first_line = m_lines[selection.start().line()];
+ auto& second_line = m_lines[selection.end().line()];
auto before_selection = String(first_line.characters(), first_line.length()).substring(0, selection.start().column());
auto after_selection = String(second_line.characters(), second_line.length()).substring(selection.end().column(), second_line.length() - selection.end().column());
StringBuilder builder(before_selection.length() + after_selection.length());
diff --git a/Libraries/LibGUI/GTextEditor.h b/Libraries/LibGUI/GTextEditor.h
index 751b6a5428..fcac07ab15 100644
--- a/Libraries/LibGUI/GTextEditor.h
+++ b/Libraries/LibGUI/GTextEditor.h
@@ -2,8 +2,9 @@
#include <AK/Function.h>
#include <AK/HashMap.h>
-#include <LibGUI/GScrollableWidget.h>
+#include <AK/NonnullOwnPtrVector.h>
#include <LibDraw/TextAlignment.h>
+#include <LibGUI/GScrollableWidget.h>
class GAction;
class GMenu;
@@ -193,8 +194,8 @@ private:
void update_cursor();
void set_cursor(int line, int column);
void set_cursor(const GTextPosition&);
- Line& current_line() { return *m_lines[m_cursor.line()]; }
- const Line& current_line() const { return *m_lines[m_cursor.line()]; }
+ Line& current_line() { return m_lines[m_cursor.line()]; }
+ const Line& current_line() const { return m_lines[m_cursor.line()]; }
GTextPosition text_position_at(const Point&) const;
void insert_at_cursor(char);
void insert_at_cursor(const StringView&);
@@ -208,7 +209,7 @@ private:
Type m_type { MultiLine };
- Vector<OwnPtr<Line>> m_lines;
+ NonnullOwnPtrVector<Line> m_lines;
GTextPosition m_cursor;
TextAlignment m_text_alignment { TextAlignment::CenterLeft };
bool m_cursor_state { true };
diff --git a/Libraries/LibGUI/GToolBar.h b/Libraries/LibGUI/GToolBar.h
index bff3f9a49e..8e324b22e8 100644
--- a/Libraries/LibGUI/GToolBar.h
+++ b/Libraries/LibGUI/GToolBar.h
@@ -1,5 +1,6 @@
#pragma once
+#include <AK/NonnullOwnPtrVector.h>
#include <LibGUI/GWidget.h>
class GAction;
@@ -29,6 +30,6 @@ private:
Type type { Invalid };
RefPtr<GAction> action;
};
- Vector<OwnPtr<Item>> m_items;
+ NonnullOwnPtrVector<Item> m_items;
bool m_has_frame { true };
};