| 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 "ash/wm/image_grid.h" | 5 #include "ash/wm/image_grid.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "third_party/skia/include/core/SkColor.h" | 9 #include "third_party/skia/include/core/SkColor.h" |
| 10 #include "third_party/skia/include/core/SkXfermode.h" | 10 #include "third_party/skia/include/core/SkXfermode.h" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 const int right = min(base_right_column_width_, size_.width() - left); | 98 const int right = min(base_right_column_width_, size_.width() - left); |
| 99 const int top = min(base_top_row_height_, size_.height() / 2); | 99 const int top = min(base_top_row_height_, size_.height() / 2); |
| 100 const int bottom = min(base_bottom_row_height_, size_.height() - top); | 100 const int bottom = min(base_bottom_row_height_, size_.height() - top); |
| 101 | 101 |
| 102 // The remaining space goes to the center image. | 102 // The remaining space goes to the center image. |
| 103 int center_width = std::max(size.width() - left - right, 0); | 103 int center_width = std::max(size.width() - left - right, 0); |
| 104 int center_height = std::max(size.height() - top - bottom, 0); | 104 int center_height = std::max(size.height() - top - bottom, 0); |
| 105 | 105 |
| 106 if (top_layer_.get()) { | 106 if (top_layer_.get()) { |
| 107 if (center_width > 0) { | 107 if (center_width > 0) { |
| 108 ui::Transform transform; | 108 gfx::Transform transform; |
| 109 transform.SetScaleX( | 109 transform.SetScaleX( |
| 110 static_cast<float>(center_width) / top_layer_->bounds().width()); | 110 static_cast<float>(center_width) / top_layer_->bounds().width()); |
| 111 transform.ConcatTranslate(left, 0); | 111 transform.ConcatTranslate(left, 0); |
| 112 top_layer_->SetTransform(transform); | 112 top_layer_->SetTransform(transform); |
| 113 } | 113 } |
| 114 top_layer_->SetVisible(center_width > 0); | 114 top_layer_->SetVisible(center_width > 0); |
| 115 } | 115 } |
| 116 if (bottom_layer_.get()) { | 116 if (bottom_layer_.get()) { |
| 117 if (center_width > 0) { | 117 if (center_width > 0) { |
| 118 ui::Transform transform; | 118 gfx::Transform transform; |
| 119 transform.SetScaleX( | 119 transform.SetScaleX( |
| 120 static_cast<float>(center_width) / bottom_layer_->bounds().width()); | 120 static_cast<float>(center_width) / bottom_layer_->bounds().width()); |
| 121 transform.ConcatTranslate( | 121 transform.ConcatTranslate( |
| 122 left, size.height() - bottom_layer_->bounds().height()); | 122 left, size.height() - bottom_layer_->bounds().height()); |
| 123 bottom_layer_->SetTransform(transform); | 123 bottom_layer_->SetTransform(transform); |
| 124 } | 124 } |
| 125 bottom_layer_->SetVisible(center_width > 0); | 125 bottom_layer_->SetVisible(center_width > 0); |
| 126 } | 126 } |
| 127 if (left_layer_.get()) { | 127 if (left_layer_.get()) { |
| 128 if (center_height > 0) { | 128 if (center_height > 0) { |
| 129 ui::Transform transform; | 129 gfx::Transform transform; |
| 130 transform.SetScaleY( | 130 transform.SetScaleY( |
| 131 (static_cast<float>(center_height) / left_layer_->bounds().height())); | 131 (static_cast<float>(center_height) / left_layer_->bounds().height())); |
| 132 transform.ConcatTranslate(0, top); | 132 transform.ConcatTranslate(0, top); |
| 133 left_layer_->SetTransform(transform); | 133 left_layer_->SetTransform(transform); |
| 134 } | 134 } |
| 135 left_layer_->SetVisible(center_height > 0); | 135 left_layer_->SetVisible(center_height > 0); |
| 136 } | 136 } |
| 137 if (right_layer_.get()) { | 137 if (right_layer_.get()) { |
| 138 if (center_height > 0) { | 138 if (center_height > 0) { |
| 139 ui::Transform transform; | 139 gfx::Transform transform; |
| 140 transform.SetScaleY( | 140 transform.SetScaleY( |
| 141 static_cast<float>(center_height) / right_layer_->bounds().height()); | 141 static_cast<float>(center_height) / right_layer_->bounds().height()); |
| 142 transform.ConcatTranslate( | 142 transform.ConcatTranslate( |
| 143 size.width() - right_layer_->bounds().width(), top); | 143 size.width() - right_layer_->bounds().width(), top); |
| 144 right_layer_->SetTransform(transform); | 144 right_layer_->SetTransform(transform); |
| 145 } | 145 } |
| 146 right_layer_->SetVisible(center_height > 0); | 146 right_layer_->SetVisible(center_height > 0); |
| 147 } | 147 } |
| 148 | 148 |
| 149 if (top_left_layer_.get()) { | 149 if (top_left_layer_.get()) { |
| 150 // No transformation needed; it should be at (0, 0) and unscaled. | 150 // No transformation needed; it should be at (0, 0) and unscaled. |
| 151 top_left_painter_->SetClipRect( | 151 top_left_painter_->SetClipRect( |
| 152 LayerExceedsSize(top_left_layer_.get(), gfx::Size(left, top)) ? | 152 LayerExceedsSize(top_left_layer_.get(), gfx::Size(left, top)) ? |
| 153 gfx::Rect(gfx::Rect(0, 0, left, top)) : | 153 gfx::Rect(gfx::Rect(0, 0, left, top)) : |
| 154 gfx::Rect(), | 154 gfx::Rect(), |
| 155 top_left_layer_.get()); | 155 top_left_layer_.get()); |
| 156 } | 156 } |
| 157 if (top_right_layer_.get()) { | 157 if (top_right_layer_.get()) { |
| 158 ui::Transform transform; | 158 gfx::Transform transform; |
| 159 transform.SetTranslateX(size.width() - top_right_layer_->bounds().width()); | 159 transform.SetTranslateX(size.width() - top_right_layer_->bounds().width()); |
| 160 top_right_layer_->SetTransform(transform); | 160 top_right_layer_->SetTransform(transform); |
| 161 top_right_painter_->SetClipRect( | 161 top_right_painter_->SetClipRect( |
| 162 LayerExceedsSize(top_right_layer_.get(), gfx::Size(right, top)) ? | 162 LayerExceedsSize(top_right_layer_.get(), gfx::Size(right, top)) ? |
| 163 gfx::Rect(top_right_layer_->bounds().width() - right, 0, | 163 gfx::Rect(top_right_layer_->bounds().width() - right, 0, |
| 164 right, top) : | 164 right, top) : |
| 165 gfx::Rect(), | 165 gfx::Rect(), |
| 166 top_right_layer_.get()); | 166 top_right_layer_.get()); |
| 167 } | 167 } |
| 168 if (bottom_left_layer_.get()) { | 168 if (bottom_left_layer_.get()) { |
| 169 ui::Transform transform; | 169 gfx::Transform transform; |
| 170 transform.SetTranslateY( | 170 transform.SetTranslateY( |
| 171 size.height() - bottom_left_layer_->bounds().height()); | 171 size.height() - bottom_left_layer_->bounds().height()); |
| 172 bottom_left_layer_->SetTransform(transform); | 172 bottom_left_layer_->SetTransform(transform); |
| 173 bottom_left_painter_->SetClipRect( | 173 bottom_left_painter_->SetClipRect( |
| 174 LayerExceedsSize(bottom_left_layer_.get(), gfx::Size(left, bottom)) ? | 174 LayerExceedsSize(bottom_left_layer_.get(), gfx::Size(left, bottom)) ? |
| 175 gfx::Rect(0, bottom_left_layer_->bounds().height() - bottom, | 175 gfx::Rect(0, bottom_left_layer_->bounds().height() - bottom, |
| 176 left, bottom) : | 176 left, bottom) : |
| 177 gfx::Rect(), | 177 gfx::Rect(), |
| 178 bottom_left_layer_.get()); | 178 bottom_left_layer_.get()); |
| 179 } | 179 } |
| 180 if (bottom_right_layer_.get()) { | 180 if (bottom_right_layer_.get()) { |
| 181 ui::Transform transform; | 181 gfx::Transform transform; |
| 182 transform.SetTranslate( | 182 transform.SetTranslate( |
| 183 size.width() - bottom_right_layer_->bounds().width(), | 183 size.width() - bottom_right_layer_->bounds().width(), |
| 184 size.height() - bottom_right_layer_->bounds().height()); | 184 size.height() - bottom_right_layer_->bounds().height()); |
| 185 bottom_right_layer_->SetTransform(transform); | 185 bottom_right_layer_->SetTransform(transform); |
| 186 bottom_right_painter_->SetClipRect( | 186 bottom_right_painter_->SetClipRect( |
| 187 LayerExceedsSize(bottom_right_layer_.get(), gfx::Size(right, bottom)) ? | 187 LayerExceedsSize(bottom_right_layer_.get(), gfx::Size(right, bottom)) ? |
| 188 gfx::Rect(bottom_right_layer_->bounds().width() - right, | 188 gfx::Rect(bottom_right_layer_->bounds().width() - right, |
| 189 bottom_right_layer_->bounds().height() - bottom, | 189 bottom_right_layer_->bounds().height() - bottom, |
| 190 right, bottom) : | 190 right, bottom) : |
| 191 gfx::Rect(), | 191 gfx::Rect(), |
| 192 bottom_right_layer_.get()); | 192 bottom_right_layer_.get()); |
| 193 } | 193 } |
| 194 | 194 |
| 195 if (center_layer_.get()) { | 195 if (center_layer_.get()) { |
| 196 if (center_width > 0 && center_height > 0) { | 196 if (center_width > 0 && center_height > 0) { |
| 197 ui::Transform transform; | 197 gfx::Transform transform; |
| 198 transform.SetScale(center_width / center_layer_->bounds().width(), | 198 transform.SetScale(center_width / center_layer_->bounds().width(), |
| 199 center_height / center_layer_->bounds().height()); | 199 center_height / center_layer_->bounds().height()); |
| 200 transform.ConcatTranslate(left, top); | 200 transform.ConcatTranslate(left, top); |
| 201 center_layer_->SetTransform(transform); | 201 center_layer_->SetTransform(transform); |
| 202 } | 202 } |
| 203 center_layer_->SetVisible(center_width > 0 && center_height > 0); | 203 center_layer_->SetVisible(center_width > 0 && center_height > 0); |
| 204 } | 204 } |
| 205 } | 205 } |
| 206 | 206 |
| 207 void ImageGrid::SetContentBounds(const gfx::Rect& content_bounds) { | 207 void ImageGrid::SetContentBounds(const gfx::Rect& content_bounds) { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 | 274 |
| 275 painter_ptr->reset(new ImagePainter(image)); | 275 painter_ptr->reset(new ImagePainter(image)); |
| 276 layer_ptr->get()->set_delegate(painter_ptr->get()); | 276 layer_ptr->get()->set_delegate(painter_ptr->get()); |
| 277 layer_ptr->get()->SetFillsBoundsOpaquely(false); | 277 layer_ptr->get()->SetFillsBoundsOpaquely(false); |
| 278 layer_ptr->get()->SetVisible(true); | 278 layer_ptr->get()->SetVisible(true); |
| 279 layer_->Add(layer_ptr->get()); | 279 layer_->Add(layer_ptr->get()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 } // namespace internal | 282 } // namespace internal |
| 283 } // namespace ash | 283 } // namespace ash |
| OLD | NEW |