Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Unified Diff: ui/views/layout/grid_layout.cc

Issue 2445513002: Remove stl_util's deletion function use from ui/views/. (Closed)
Patch Set: drop Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/layout/grid_layout.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/layout/grid_layout.cc
diff --git a/ui/views/layout/grid_layout.cc b/ui/views/layout/grid_layout.cc
index 1c4844bccbc5c3b5cfb8148532f0e411e36ce58e..b45f1ca474dbdf7a17a9fd3acb1348b99213e9d2 100644
--- a/ui/views/layout/grid_layout.cc
+++ b/ui/views/layout/grid_layout.cc
@@ -8,7 +8,7 @@
#include "base/logging.h"
#include "base/macros.h"
-#include "base/stl_util.h"
+#include "base/memory/ptr_util.h"
#include "ui/views/layout/layout_constants.h"
#include "ui/views/view.h"
#include "ui/views/window/dialog_delegate.h"
@@ -23,24 +23,22 @@ class LayoutElement {
public:
// Invokes ResetSize on all the layout elements.
template <class T>
- static void ResetSizes(std::vector<T*>* elements) {
+ static void ResetSizes(std::vector<std::unique_ptr<T>>* elements) {
// Reset the layout width of each column.
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- (*i)->ResetSize();
- }
+ for (const auto& element : *elements)
+ element->ResetSize();
}
// Sets the location of each element to be the sum of the sizes of the
// preceding elements.
template <class T>
- static void CalculateLocationsFromSize(std::vector<T*>* elements) {
+ static void CalculateLocationsFromSize(
+ std::vector<std::unique_ptr<T>>* elements) {
// Reset the layout width of each column.
int location = 0;
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- (*i)->SetLocation(location);
- location += (*i)->Size();
+ for (const auto& element : *elements) {
+ element->SetLocation(location);
+ location += element->Size();
}
}
@@ -48,16 +46,16 @@ class LayoutElement {
// Each resizable element is given ResizePercent / total_percent * delta
// pixels extra of space.
template <class T>
- static void DistributeDelta(int delta, std::vector<T*>* elements) {
+ static void DistributeDelta(int delta,
+ std::vector<std::unique_ptr<T>>* elements) {
if (delta == 0)
return;
float total_percent = 0;
int resize_count = 0;
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- total_percent += (*i)->ResizePercent();
- if ((*i)->ResizePercent() > 0)
+ for (const auto& element : *elements) {
+ total_percent += element->ResizePercent();
+ if (element->ResizePercent() > 0)
resize_count++;
}
if (total_percent == 0) {
@@ -66,9 +64,7 @@ class LayoutElement {
}
int remaining = delta;
int resized = resize_count;
- for (typename std::vector<T*>::iterator i = elements->begin();
- i != elements->end(); ++i) {
- T* element = *i;
+ for (const auto& element : *elements) {
if (element->ResizePercent() > 0) {
int to_give;
if (--resized == 0) {
@@ -85,7 +81,9 @@ class LayoutElement {
// Returns the sum of the size of the elements from start to start + length.
template <class T>
- static int TotalSize(int start, int length, std::vector<T*>* elements) {
+ static int TotalSize(int start,
+ int length,
+ std::vector<std::unique_ptr<T>>* elements) {
DCHECK(start >= 0 && length > 0 &&
start + length <= static_cast<int>(elements->size()));
int size = 0;
@@ -163,15 +161,15 @@ class Column : public LayoutElement {
int fixed_width,
int min_width,
bool is_padding)
- : LayoutElement(resize_percent),
- h_align_(h_align),
- v_align_(v_align),
- size_type_(size_type),
- same_size_column_(-1),
- fixed_width_(fixed_width),
- min_width_(min_width),
- is_padding_(is_padding),
- master_column_(NULL) {}
+ : LayoutElement(resize_percent),
+ h_align_(h_align),
+ v_align_(v_align),
+ size_type_(size_type),
+ same_size_column_(-1),
+ fixed_width_(fixed_width),
+ min_width_(min_width),
+ is_padding_(is_padding),
+ master_column_(nullptr) {}
~Column() override {}
@@ -224,8 +222,8 @@ void Column::ResetSize() {
}
Column* Column::GetLastMasterColumn() {
- if (master_column_ == NULL) {
- return NULL;
+ if (master_column_ == nullptr) {
+ return nullptr;
}
if (master_column_ == this) {
return this;
@@ -238,16 +236,12 @@ void Column::UnifySameSizedColumnSizes() {
// Accumulate the size first.
int size = 0;
- for (std::vector<Column*>::iterator i = same_size_columns_.begin();
- i != same_size_columns_.end(); ++i) {
- size = std::max(size, (*i)->Size());
- }
+ for (auto column : same_size_columns_)
+ size = std::max(size, column->Size());
// Then apply it.
- for (std::vector<Column*>::iterator i = same_size_columns_.begin();
- i != same_size_columns_.end(); ++i) {
- (*i)->SetSize(size);
- }
+ for (auto column : same_size_columns_)
+ column->SetSize(size);
}
void Column::AdjustSize(int size) {
@@ -278,7 +272,7 @@ class Row : public LayoutElement {
return column_set_;
}
- // Adjusts the size to accomodate the specified ascent/descent.
+ // Adjusts the size to accommodate the specified ascent/descent.
void AdjustSizeForBaseline(int ascent, int descent) {
max_ascent_ = std::max(ascent, max_ascent_);
max_descent_ = std::max(descent, max_descent_);
@@ -364,7 +358,8 @@ static bool CompareByColumnSpan(const ViewState* v1, const ViewState* v2) {
return v1->col_span < v2->col_span;
}
-static bool CompareByRowSpan(const ViewState* v1, const ViewState* v2) {
+static bool CompareByRowSpan(const std::unique_ptr<ViewState>& v1,
+ const ViewState* v2) {
return v1->row_span < v2->row_span;
}
@@ -374,7 +369,6 @@ ColumnSet::ColumnSet(int id) : id_(id) {
}
ColumnSet::~ColumnSet() {
- base::STLDeleteElements(&columns_);
}
void ColumnSet::AddPaddingColumn(float resize_percent, int width) {
@@ -413,55 +407,51 @@ void ColumnSet::AddColumn(GridLayout::Alignment h_align,
int fixed_width,
int min_width,
bool is_padding) {
- Column* column = new Column(h_align, v_align, resize_percent, size_type,
- fixed_width, min_width, is_padding);
- columns_.push_back(column);
+ columns_.push_back(base::MakeUnique<Column>(h_align, v_align, resize_percent,
+ size_type, fixed_width, min_width,
+ is_padding));
}
void ColumnSet::AddViewState(ViewState* view_state) {
// view_states are ordered by column_span (in ascending order).
- std::vector<ViewState*>::iterator i = std::lower_bound(view_states_.begin(),
- view_states_.end(),
- view_state,
- CompareByColumnSpan);
+ auto i = std::lower_bound(view_states_.begin(), view_states_.end(),
+ view_state, CompareByColumnSpan);
view_states_.insert(i, view_state);
}
void ColumnSet::CalculateMasterColumns() {
- for (std::vector<Column*>::iterator i = columns_.begin();
- i != columns_.end(); ++i) {
- Column* column = *i;
+ for (const auto& column : columns_) {
int same_size_column_index = column->same_size_column_;
if (same_size_column_index != -1) {
DCHECK(same_size_column_index >= 0 &&
same_size_column_index < static_cast<int>(columns_.size()));
Column* master_column = column->master_column_;
- Column* same_size_column = columns_[same_size_column_index];
+ Column* same_size_column = columns_[same_size_column_index].get();
Column* same_size_column_master = same_size_column->master_column_;
- if (master_column == NULL) {
+ if (master_column == nullptr) {
// Current column is not linked to any other column.
- if (same_size_column_master == NULL) {
+ if (same_size_column_master == nullptr) {
// Both columns are not linked.
- column->master_column_ = column;
- same_size_column->master_column_ = column;
+ column->master_column_ = column.get();
+ same_size_column->master_column_ = column.get();
column->same_size_columns_.push_back(same_size_column);
- column->same_size_columns_.push_back(column);
+ column->same_size_columns_.push_back(column.get());
} else {
// Column to link to is linked with other columns.
// Add current column to list of linked columns in other columns
// master column.
- same_size_column->GetLastMasterColumn()->
- same_size_columns_.push_back(column);
+ same_size_column->GetLastMasterColumn()->same_size_columns_.push_back(
+ column.get());
// And update the master column for the current column to that
// of the same sized column.
column->master_column_ = same_size_column;
}
} else {
// Current column is already linked with another column.
- if (same_size_column_master == NULL) {
+ if (same_size_column_master == nullptr) {
// Column to link with is not linked to any other columns.
// Update it's master_column.
- same_size_column->master_column_ = column;
+ same_size_column->master_column_ = column.get();
// Add linked column to list of linked column.
column->GetLastMasterColumn()->same_size_columns_.
push_back(same_size_column);
@@ -480,7 +470,8 @@ void ColumnSet::CalculateMasterColumns() {
// The other master is no longer a master, clear its vector of
// linked columns, and reset its master_column.
other_same_size_columns->clear();
- same_size_column->GetLastMasterColumn()->master_column_ = column;
+ same_size_column->GetLastMasterColumn()->master_column_ =
+ column.get();
}
}
}
@@ -490,9 +481,7 @@ void ColumnSet::CalculateMasterColumns() {
void ColumnSet::AccumulateMasterColumns() {
DCHECK(master_columns_.empty());
- for (std::vector<Column*>::iterator i = columns_.begin();
- i != columns_.end(); ++i) {
- Column* column = *i;
+ for (const auto& column : columns_) {
Column* master_column = column->GetLastMasterColumn();
if (master_column &&
std::find(master_columns_.begin(), master_columns_.end(),
@@ -507,10 +496,8 @@ void ColumnSet::AccumulateMasterColumns() {
}
void ColumnSet::UnifySameSizedColumnSizes() {
- for (std::vector<Column*>::iterator i = master_columns_.begin();
- i != master_columns_.end(); ++i) {
- (*i)->UnifySameSizedColumnSizes();
- }
+ for (auto column : master_columns_)
+ column->UnifySameSizedColumnSizes();
}
void ColumnSet::UpdateRemainingWidth(ViewState* view_state) {
@@ -579,10 +566,9 @@ void ColumnSet::DistributeRemainingWidth(ViewState* view_state) {
int ColumnSet::LayoutWidth() {
int width = 0;
- for (std::vector<Column*>::iterator i = columns_.begin();
- i != columns_.end(); ++i) {
- width += (*i)->Size();
- }
+ for (const auto& column : columns_)
+ width += column->Size();
+
return width;
}
@@ -597,9 +583,7 @@ void ColumnSet::ResetColumnXCoordinates() {
void ColumnSet::CalculateSize() {
gfx::Size pref;
// Reset the preferred and remaining sizes.
- for (std::vector<ViewState*>::iterator i = view_states_.begin();
- i != view_states_.end(); ++i) {
- ViewState* view_state = *i;
+ for (const auto& view_state : view_states_) {
if (!view_state->pref_width_fixed || !view_state->pref_height_fixed) {
pref = view_state->view->GetPreferredSize();
if (!view_state->pref_width_fixed)
@@ -615,12 +599,11 @@ void ColumnSet::CalculateSize() {
LayoutElement::ResetSizes(&columns_);
// Distribute the size of each view with a col span == 1.
- std::vector<ViewState*>::iterator view_state_iterator =
- view_states_.begin();
+ auto view_state_iterator = view_states_.begin();
for (; view_state_iterator != view_states_.end() &&
(*view_state_iterator)->col_span == 1; ++view_state_iterator) {
ViewState* view_state = *view_state_iterator;
- Column* column = columns_[view_state->start_col];
+ Column* column = columns_[view_state->start_col].get();
column->AdjustSize(view_state->pref_width);
view_state->remaining_width -= column->Size();
}
@@ -656,15 +639,12 @@ GridLayout::GridLayout(View* host)
remaining_row_span_(0),
current_row_(-1),
next_column_(0),
- current_row_col_set_(NULL),
+ current_row_col_set_(nullptr),
adding_view_(false) {
DCHECK(host);
}
GridLayout::~GridLayout() {
- base::STLDeleteElements(&column_sets_);
- base::STLDeleteElements(&view_states_);
- base::STLDeleteElements(&rows_);
}
// static
@@ -684,20 +664,18 @@ void GridLayout::SetInsets(const gfx::Insets& insets) {
}
ColumnSet* GridLayout::AddColumnSet(int id) {
- DCHECK(GetColumnSet(id) == NULL);
- ColumnSet* column_set = new ColumnSet(id);
- column_sets_.push_back(column_set);
- return column_set;
+ DCHECK(GetColumnSet(id) == nullptr);
+ column_sets_.push_back(base::WrapUnique(new ColumnSet(id)));
+ return column_sets_.back().get();
}
ColumnSet* GridLayout::GetColumnSet(int id) {
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- if ((*i)->id_ == id) {
- return *i;
+ for (const auto& column_set : column_sets_) {
+ if (column_set->id_ == id) {
+ return column_set.get();
}
}
- return NULL;
+ return nullptr;
}
void GridLayout::StartRowWithPadding(float vertical_resize, int column_set_id,
@@ -709,11 +687,11 @@ void GridLayout::StartRowWithPadding(float vertical_resize, int column_set_id,
void GridLayout::StartRow(float vertical_resize, int column_set_id) {
ColumnSet* column_set = GetColumnSet(column_set_id);
DCHECK(column_set);
- AddRow(new Row(0, vertical_resize, column_set));
+ AddRow(base::MakeUnique<Row>(0, vertical_resize, column_set));
}
void GridLayout::AddPaddingRow(float vertical_resize, int pixel_count) {
- AddRow(new Row(pixel_count, vertical_resize, NULL));
+ AddRow(base::MakeUnique<Row>(pixel_count, vertical_resize, nullptr));
}
void GridLayout::SkipColumns(int col_count) {
@@ -731,7 +709,7 @@ void GridLayout::AddView(View* view) {
void GridLayout::AddView(View* view, int col_span, int row_span) {
DCHECK(current_row_col_set_ &&
next_column_ < current_row_col_set_->num_columns());
- Column* column = current_row_col_set_->columns_[next_column_];
+ Column* column = current_row_col_set_->columns_[next_column_].get();
AddView(view, col_span, row_span, column->h_align(), column->v_align());
}
@@ -748,11 +726,9 @@ void GridLayout::AddView(View* view, int col_span, int row_span,
// We don't support baseline alignment of views spanning rows. Please add if
// you need it.
DCHECK(v_align != BASELINE || row_span == 1);
- ViewState* state =
- new ViewState(current_row_col_set_, view, next_column_, current_row_,
- col_span, row_span, h_align, v_align, pref_width,
- pref_height);
- AddViewState(state);
+ AddViewState(base::MakeUnique<ViewState>(
+ current_row_col_set_, view, next_column_, current_row_, col_span,
+ row_span, h_align, v_align, pref_width, pref_height));
}
static void CalculateSize(int pref_size, GridLayout::Alignment alignment,
@@ -799,11 +775,9 @@ void GridLayout::Layout(View* host) {
SizeRowsAndColumns(true, host_->width(), host_->height(), &pref);
// Size each view.
- for (std::vector<ViewState*>::iterator i = view_states_.begin();
- i != view_states_.end(); ++i) {
- ViewState* view_state = *i;
+ for (const auto& view_state : view_states_) {
ColumnSet* column_set = view_state->column_set;
- View* view = (*i)->view;
+ View* view = view_state->view;
DCHECK(view);
int x = column_set->columns_[view_state->start_col]->Location() +
insets_.left();
@@ -851,22 +825,20 @@ void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
// Calculate the preferred width of each of the columns. Some views'
// preferred heights are derived from their width, as such we need to
// calculate the size of the columns first.
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- (*i)->CalculateSize();
- pref->set_width(std::max(pref->width(), (*i)->LayoutWidth()));
+ for (const auto& column_set : column_sets_) {
+ column_set->CalculateSize();
+ pref->set_width(std::max(pref->width(), column_set->LayoutWidth()));
}
pref->set_width(pref->width() + insets_.width());
// Go over the columns again and set them all to the size we settled for.
width = width ? width : pref->width();
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- // We're doing a layout, divy up any extra space.
- (*i)->Resize(width - (*i)->LayoutWidth() - insets_.left() -
- insets_.right());
+ for (const auto& column_set : column_sets_) {
+ // We're doing a layout, divvy up any extra space.
+ column_set->Resize(width - column_set->LayoutWidth() - insets_.left() -
+ insets_.right());
// And reset the x coordinates.
- (*i)->ResetColumnXCoordinates();
+ column_set->ResetColumnXCoordinates();
}
// Reset the height of each row.
@@ -878,9 +850,7 @@ void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
// . Reset the remaining_height of each view state.
// . If the width the view will be given is different than it's pref, ask
// for the height given a particularly width.
- for (std::vector<ViewState*>::iterator i= view_states_.begin();
- i != view_states_.end() ; ++i) {
- ViewState* view_state = *i;
+ for (const auto& view_state : view_states_) {
view_state->remaining_height = view_state->pref_height;
if (view_state->v_align == BASELINE)
@@ -904,11 +874,11 @@ void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
}
// Update the height/ascent/descent of each row from the views.
- std::vector<ViewState*>::iterator view_states_iterator = view_states_.begin();
+ auto view_states_iterator = view_states_.begin();
for (; view_states_iterator != view_states_.end() &&
(*view_states_iterator)->row_span == 1; ++view_states_iterator) {
- ViewState* view_state = *view_states_iterator;
- Row* row = rows_[view_state->start_row];
+ ViewState* view_state = view_states_iterator->get();
+ Row* row = rows_[view_state->start_row].get();
row->AdjustSize(view_state->remaining_height);
if (view_state->baseline != -1 &&
view_state->baseline <= view_state->pref_height) {
@@ -920,7 +890,7 @@ void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
// Distribute the height of each view with a row span > 1.
for (; view_states_iterator != view_states_.end(); ++view_states_iterator) {
- ViewState* view_state = *view_states_iterator;
+ ViewState* view_state = view_states_iterator->get();
// Update the remaining_width from columns this view_state touches.
UpdateRemainingHeightFromRows(view_state);
@@ -938,7 +908,7 @@ void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
if (layout && height != pref->height()) {
// We're doing a layout, and the height differs from the preferred height,
- // divy up the extra space.
+ // divvy up the extra space.
LayoutElement::DistributeDelta(height - pref->height(), &rows_);
// Reset y locations.
@@ -949,15 +919,14 @@ void GridLayout::SizeRowsAndColumns(bool layout, int width, int height,
void GridLayout::CalculateMasterColumnsIfNecessary() const {
if (!calculated_master_columns_) {
calculated_master_columns_ = true;
- for (std::vector<ColumnSet*>::iterator i = column_sets_.begin();
- i != column_sets_.end(); ++i) {
- (*i)->CalculateMasterColumns();
+ for (const auto& column_set : column_sets_) {
+ column_set->CalculateMasterColumns();
}
}
}
-void GridLayout::AddViewState(ViewState* view_state) {
- DCHECK(view_state->view && (view_state->view->parent() == NULL ||
+void GridLayout::AddViewState(std::unique_ptr<ViewState> view_state) {
+ DCHECK(view_state->view && (view_state->view->parent() == nullptr ||
view_state->view->parent() == host_));
if (!view_state->view->parent()) {
adding_view_ = true;
@@ -966,28 +935,25 @@ void GridLayout::AddViewState(ViewState* view_state) {
}
remaining_row_span_ = std::max(remaining_row_span_, view_state->row_span);
next_column_ += view_state->col_span;
- current_row_col_set_->AddViewState(view_state);
+ current_row_col_set_->AddViewState(view_state.get());
// view_states are ordered by row_span (in ascending order).
- std::vector<ViewState*>::iterator i = std::lower_bound(view_states_.begin(),
- view_states_.end(),
- view_state,
- CompareByRowSpan);
- view_states_.insert(i, view_state);
+ auto i = std::lower_bound(view_states_.begin(), view_states_.end(),
+ view_state.get(), CompareByRowSpan);
+ view_states_.insert(i, std::move(view_state));
SkipPaddingColumns();
}
-void GridLayout::AddRow(Row* row) {
+void GridLayout::AddRow(std::unique_ptr<Row> row) {
current_row_++;
remaining_row_span_--;
// GridLayout requires that if you add a View with a row span you use the same
// column set for each of the rows the view lands it. This DCHECK verifies
// that.
- DCHECK(remaining_row_span_ <= 0 ||
- row->column_set() == NULL ||
+ DCHECK(remaining_row_span_ <= 0 || row->column_set() == nullptr ||
row->column_set() == GetLastValidColumnSet());
next_column_ = 0;
- rows_.push_back(row);
current_row_col_set_ = row->column_set();
+ rows_.push_back(std::move(row));
SkipPaddingColumns();
}
@@ -1027,7 +993,7 @@ void GridLayout::DistributeRemainingHeight(ViewState* view_state) const {
}
}
} else {
- // None of the rows are resizable, divy the remaining height up equally
+ // None of the rows are resizable, divvy the remaining height up equally
// among all rows the view touches.
int each_row_height = height / view_state->row_span;
for (int i = start_row; i < max_row; ++i) {
@@ -1054,7 +1020,7 @@ ColumnSet* GridLayout::GetLastValidColumnSet() {
if (rows_[i]->column_set())
return rows_[i]->column_set();
}
- return NULL;
+ return nullptr;
}
} // namespace views
« no previous file with comments | « ui/views/layout/grid_layout.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698