| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/views/controls/single_split_view.h" | 5 #include "ui/views/controls/single_split_view.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 #include "ui/accessibility/ax_view_state.h" | 8 #include "ui/accessibility/ax_view_state.h" |
| 9 #include "ui/base/cursor/cursor.h" | 9 #include "ui/base/cursor/cursor.h" |
| 10 #include "ui/gfx/canvas.h" | 10 #include "ui/gfx/canvas.h" |
| 11 #include "ui/views/background.h" | 11 #include "ui/views/background.h" |
| 12 #include "ui/views/border.h" |
| 12 #include "ui/views/controls/single_split_view_listener.h" | 13 #include "ui/views/controls/single_split_view_listener.h" |
| 13 #include "ui/views/native_cursor.h" | 14 #include "ui/views/native_cursor.h" |
| 14 | 15 |
| 15 #if defined(OS_WIN) | 16 #if defined(OS_WIN) |
| 16 #include "skia/ext/skia_utils_win.h" | 17 #include "skia/ext/skia_utils_win.h" |
| 17 #endif | 18 #endif |
| 18 | 19 |
| 19 namespace views { | 20 namespace views { |
| 20 | 21 |
| 21 // static | 22 // static |
| (...skipping 16 matching lines...) Expand all Loading... |
| 38 #if defined(OS_WIN) | 39 #if defined(OS_WIN) |
| 39 set_background( | 40 set_background( |
| 40 views::Background::CreateSolidBackground( | 41 views::Background::CreateSolidBackground( |
| 41 skia::COLORREFToSkColor(GetSysColor(COLOR_3DFACE)))); | 42 skia::COLORREFToSkColor(GetSysColor(COLOR_3DFACE)))); |
| 42 #endif | 43 #endif |
| 43 } | 44 } |
| 44 | 45 |
| 45 void SingleSplitView::Layout() { | 46 void SingleSplitView::Layout() { |
| 46 gfx::Rect leading_bounds; | 47 gfx::Rect leading_bounds; |
| 47 gfx::Rect trailing_bounds; | 48 gfx::Rect trailing_bounds; |
| 48 CalculateChildrenBounds(bounds(), &leading_bounds, &trailing_bounds); | 49 CalculateChildrenBounds(GetContentsBounds(), &leading_bounds, |
| 50 &trailing_bounds); |
| 49 | 51 |
| 50 if (has_children()) { | 52 if (has_children()) { |
| 51 if (child_at(0)->visible()) | 53 if (child_at(0)->visible()) |
| 52 child_at(0)->SetBoundsRect(leading_bounds); | 54 child_at(0)->SetBoundsRect(leading_bounds); |
| 53 if (child_count() > 1) { | 55 if (child_count() > 1) { |
| 54 if (child_at(1)->visible()) | 56 if (child_at(1)->visible()) |
| 55 child_at(1)->SetBoundsRect(trailing_bounds); | 57 child_at(1)->SetBoundsRect(trailing_bounds); |
| 56 } | 58 } |
| 57 } | 59 } |
| 58 | 60 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 80 height = std::max(height, pref.height()); | 82 height = std::max(height, pref.height()); |
| 81 } else { | 83 } else { |
| 82 width = std::max(width, pref.width()); | 84 width = std::max(width, pref.width()); |
| 83 height += pref.height(); | 85 height += pref.height(); |
| 84 } | 86 } |
| 85 } | 87 } |
| 86 if (is_horizontal_) | 88 if (is_horizontal_) |
| 87 width += GetDividerSize(); | 89 width += GetDividerSize(); |
| 88 else | 90 else |
| 89 height += GetDividerSize(); | 91 height += GetDividerSize(); |
| 92 width += GetInsets().width(); |
| 93 height += GetInsets().height(); |
| 90 return gfx::Size(width, height); | 94 return gfx::Size(width, height); |
| 91 } | 95 } |
| 92 | 96 |
| 93 gfx::NativeCursor SingleSplitView::GetCursor(const ui::MouseEvent& event) { | 97 gfx::NativeCursor SingleSplitView::GetCursor(const ui::MouseEvent& event) { |
| 94 if (!IsPointInDivider(event.location())) | 98 if (!IsPointInDivider(event.location())) |
| 95 return gfx::kNullCursor; | 99 return gfx::kNullCursor; |
| 96 return is_horizontal_ ? GetNativeEastWestResizeCursor() | 100 return is_horizontal_ ? GetNativeEastWestResizeCursor() |
| 97 : GetNativeNorthSouthResizeCursor(); | 101 : GetNativeNorthSouthResizeCursor(); |
| 98 } | 102 } |
| 99 | 103 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 116 return; | 120 return; |
| 117 } | 121 } |
| 118 | 122 |
| 119 int divider_at; | 123 int divider_at; |
| 120 | 124 |
| 121 if (!is_trailing_visible) { | 125 if (!is_trailing_visible) { |
| 122 divider_at = GetPrimaryAxisSize(bounds.width(), bounds.height()); | 126 divider_at = GetPrimaryAxisSize(bounds.width(), bounds.height()); |
| 123 } else if (!is_leading_visible) { | 127 } else if (!is_leading_visible) { |
| 124 divider_at = 0; | 128 divider_at = 0; |
| 125 } else { | 129 } else { |
| 126 divider_at = | 130 divider_at = CalculateDividerOffset(divider_offset_, bounds, bounds); |
| 127 CalculateDividerOffset(divider_offset_, this->bounds(), bounds); | |
| 128 divider_at = NormalizeDividerOffset(divider_at, bounds); | 131 divider_at = NormalizeDividerOffset(divider_at, bounds); |
| 129 } | 132 } |
| 130 | 133 |
| 131 int divider_size = GetDividerSize(); | 134 int divider_size = GetDividerSize(); |
| 132 | 135 |
| 133 if (is_horizontal_) { | 136 if (is_horizontal_) { |
| 134 *leading_bounds = gfx::Rect(0, 0, divider_at, bounds.height()); | 137 *leading_bounds = |
| 138 gfx::Rect(bounds.x(), bounds.y(), divider_at, bounds.height()); |
| 135 *trailing_bounds = | 139 *trailing_bounds = |
| 136 gfx::Rect(divider_at + divider_size, 0, | 140 gfx::Rect(divider_at + divider_size + bounds.x(), bounds.y(), |
| 137 std::max(0, bounds.width() - divider_at - divider_size), | 141 std::max(0, bounds.width() - divider_at - divider_size), |
| 138 bounds.height()); | 142 bounds.height()); |
| 139 } else { | 143 } else { |
| 140 *leading_bounds = gfx::Rect(0, 0, bounds.width(), divider_at); | 144 *leading_bounds = |
| 141 *trailing_bounds = | 145 gfx::Rect(bounds.x(), bounds.y(), bounds.width(), divider_at); |
| 142 gfx::Rect(0, divider_at + divider_size, bounds.width(), | 146 *trailing_bounds = gfx::Rect( |
| 143 std::max(0, bounds.height() - divider_at - divider_size)); | 147 bounds.x(), divider_at + divider_size + bounds.y(), bounds.width(), |
| 148 std::max(0, bounds.height() - divider_at - divider_size)); |
| 144 } | 149 } |
| 145 } | 150 } |
| 146 | 151 |
| 147 void SingleSplitView::SetAccessibleName(const base::string16& name) { | 152 void SingleSplitView::SetAccessibleName(const base::string16& name) { |
| 148 accessible_name_ = name; | 153 accessible_name_ = name; |
| 149 } | 154 } |
| 150 | 155 |
| 151 bool SingleSplitView::OnMousePressed(const ui::MouseEvent& event) { | 156 bool SingleSplitView::OnMousePressed(const ui::MouseEvent& event) { |
| 152 if (!IsPointInDivider(event.location())) | 157 if (!IsPointInDivider(event.location())) |
| 153 return false; | 158 return false; |
| 154 drag_info_.initial_mouse_offset = GetPrimaryAxisSize(event.x(), event.y()); | 159 drag_info_.initial_mouse_offset = GetPrimaryAxisSize(event.x(), event.y()); |
| 155 drag_info_.initial_divider_offset = | 160 drag_info_.initial_divider_offset = |
| 156 NormalizeDividerOffset(divider_offset_, bounds()); | 161 NormalizeDividerOffset(divider_offset_, GetContentsBounds()); |
| 157 return true; | 162 return true; |
| 158 } | 163 } |
| 159 | 164 |
| 160 bool SingleSplitView::OnMouseDragged(const ui::MouseEvent& event) { | 165 bool SingleSplitView::OnMouseDragged(const ui::MouseEvent& event) { |
| 161 if (child_count() < 2) | 166 if (child_count() < 2) |
| 162 return false; | 167 return false; |
| 163 | 168 |
| 164 int delta_offset = GetPrimaryAxisSize(event.x(), event.y()) - | 169 int delta_offset = GetPrimaryAxisSize(event.x(), event.y()) - |
| 165 drag_info_.initial_mouse_offset; | 170 drag_info_.initial_mouse_offset; |
| 166 if (is_horizontal_ && base::i18n::IsRTL()) | 171 if (is_horizontal_ && base::i18n::IsRTL()) |
| (...skipping 22 matching lines...) Expand all Loading... |
| 189 return; | 194 return; |
| 190 | 195 |
| 191 if (drag_info_.initial_divider_offset != divider_offset_) { | 196 if (drag_info_.initial_divider_offset != divider_offset_) { |
| 192 set_divider_offset(drag_info_.initial_divider_offset); | 197 set_divider_offset(drag_info_.initial_divider_offset); |
| 193 if (!listener_ || listener_->SplitHandleMoved(this)) | 198 if (!listener_ || listener_->SplitHandleMoved(this)) |
| 194 Layout(); | 199 Layout(); |
| 195 } | 200 } |
| 196 } | 201 } |
| 197 | 202 |
| 198 void SingleSplitView::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 203 void SingleSplitView::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
| 199 divider_offset_ = CalculateDividerOffset(divider_offset_, previous_bounds, | 204 gfx::Rect previous_content_bounds = previous_bounds; |
| 200 bounds()); | 205 previous_content_bounds.Inset(GetInsets()); |
| 206 divider_offset_ = CalculateDividerOffset( |
| 207 divider_offset_, previous_content_bounds, GetContentsBounds()); |
| 201 } | 208 } |
| 202 | 209 |
| 203 bool SingleSplitView::IsPointInDivider(const gfx::Point& p) { | 210 bool SingleSplitView::IsPointInDivider(const gfx::Point& p) { |
| 204 if (resize_disabled_) | 211 if (resize_disabled_) |
| 205 return false; | 212 return false; |
| 206 | 213 |
| 207 if (child_count() < 2) | 214 if (child_count() < 2) |
| 208 return false; | 215 return false; |
| 209 | 216 |
| 210 if (!child_at(0)->visible() || !child_at(1)->visible()) | 217 if (!child_at(0)->visible() || !child_at(1)->visible()) |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 248 const gfx::Rect& bounds) const { | 255 const gfx::Rect& bounds) const { |
| 249 int primary_axis_size = GetPrimaryAxisSize(bounds.width(), bounds.height()); | 256 int primary_axis_size = GetPrimaryAxisSize(bounds.width(), bounds.height()); |
| 250 if (divider_offset < 0) | 257 if (divider_offset < 0) |
| 251 // primary_axis_size may < GetDividerSize during initial layout. | 258 // primary_axis_size may < GetDividerSize during initial layout. |
| 252 return std::max(0, (primary_axis_size - GetDividerSize()) / 2); | 259 return std::max(0, (primary_axis_size - GetDividerSize()) / 2); |
| 253 return std::min(divider_offset, | 260 return std::min(divider_offset, |
| 254 std::max(primary_axis_size - GetDividerSize(), 0)); | 261 std::max(primary_axis_size - GetDividerSize(), 0)); |
| 255 } | 262 } |
| 256 | 263 |
| 257 } // namespace views | 264 } // namespace views |
| OLD | NEW |