| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/layers/nine_patch_layer_impl.h" | 5 #include "cc/layers/nine_patch_layer_impl.h" |
| 6 | 6 |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "base/values.h" | 8 #include "base/values.h" |
| 9 #include "cc/base/math_util.h" | 9 #include "cc/base/math_util.h" |
| 10 #include "cc/quads/texture_draw_quad.h" | 10 #include "cc/quads/texture_draw_quad.h" |
| (...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 uv_left.height()); | 200 uv_left.height()); |
| 201 gfx::RectF uv_bottom(uv_top.x(), | 201 gfx::RectF uv_bottom(uv_top.x(), |
| 202 uv_bottom_left.y(), | 202 uv_bottom_left.y(), |
| 203 uv_top.width(), | 203 uv_top.width(), |
| 204 image_aperture_bottom_height / image_height); | 204 image_aperture_bottom_height / image_height); |
| 205 gfx::RectF uv_center(uv_top_left.right(), | 205 gfx::RectF uv_center(uv_top_left.right(), |
| 206 uv_top_left.bottom(), | 206 uv_top_left.bottom(), |
| 207 uv_top.width(), | 207 uv_top.width(), |
| 208 uv_left.height()); | 208 uv_left.height()); |
| 209 | 209 |
| 210 // Nothing is opaque here. | |
| 211 // TODO(danakj): Should we look at the SkBitmaps to determine opaqueness? | |
| 212 gfx::Rect opaque_rect; | 210 gfx::Rect opaque_rect; |
| 213 gfx::Rect visible_rect; | 211 gfx::Rect visible_rect; |
| 214 const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; | 212 const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f}; |
| 213 const bool opaque = layer_tree_impl()->IsUIResourceOpaque(ui_resource_id_); |
| 215 | 214 |
| 216 visible_rect = | 215 visible_rect = |
| 217 occlusion_in_content_space.GetUnoccludedContentRect(layer_top_left); | 216 occlusion_in_content_space.GetUnoccludedContentRect(layer_top_left); |
| 217 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 218 if (!visible_rect.IsEmpty()) { | 218 if (!visible_rect.IsEmpty()) { |
| 219 TextureDrawQuad* quad = | 219 TextureDrawQuad* quad = |
| 220 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 220 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 221 quad->SetNew(shared_quad_state, | 221 quad->SetNew(shared_quad_state, |
| 222 layer_top_left, | 222 layer_top_left, |
| 223 opaque_rect, | 223 opaque_rect, |
| 224 visible_rect, | 224 visible_rect, |
| 225 resource, | 225 resource, |
| 226 premultiplied_alpha, | 226 premultiplied_alpha, |
| 227 uv_top_left.origin(), | 227 uv_top_left.origin(), |
| 228 uv_top_left.bottom_right(), | 228 uv_top_left.bottom_right(), |
| 229 SK_ColorTRANSPARENT, | 229 SK_ColorTRANSPARENT, |
| 230 vertex_opacity, | 230 vertex_opacity, |
| 231 flipped); | 231 flipped); |
| 232 } | 232 } |
| 233 | 233 |
| 234 visible_rect = | 234 visible_rect = |
| 235 occlusion_in_content_space.GetUnoccludedContentRect(layer_top_right); | 235 occlusion_in_content_space.GetUnoccludedContentRect(layer_top_right); |
| 236 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 236 if (!visible_rect.IsEmpty()) { | 237 if (!visible_rect.IsEmpty()) { |
| 237 TextureDrawQuad* quad = | 238 TextureDrawQuad* quad = |
| 238 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 239 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 239 quad->SetNew(shared_quad_state, | 240 quad->SetNew(shared_quad_state, |
| 240 layer_top_right, | 241 layer_top_right, |
| 241 opaque_rect, | 242 opaque_rect, |
| 242 visible_rect, | 243 visible_rect, |
| 243 resource, | 244 resource, |
| 244 premultiplied_alpha, | 245 premultiplied_alpha, |
| 245 uv_top_right.origin(), | 246 uv_top_right.origin(), |
| 246 uv_top_right.bottom_right(), | 247 uv_top_right.bottom_right(), |
| 247 SK_ColorTRANSPARENT, | 248 SK_ColorTRANSPARENT, |
| 248 vertex_opacity, | 249 vertex_opacity, |
| 249 flipped); | 250 flipped); |
| 250 } | 251 } |
| 251 | 252 |
| 252 visible_rect = | 253 visible_rect = |
| 253 occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom_left); | 254 occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom_left); |
| 255 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 254 if (!visible_rect.IsEmpty()) { | 256 if (!visible_rect.IsEmpty()) { |
| 255 TextureDrawQuad* quad = | 257 TextureDrawQuad* quad = |
| 256 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 258 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 257 quad->SetNew(shared_quad_state, | 259 quad->SetNew(shared_quad_state, |
| 258 layer_bottom_left, | 260 layer_bottom_left, |
| 259 opaque_rect, | 261 opaque_rect, |
| 260 visible_rect, | 262 visible_rect, |
| 261 resource, | 263 resource, |
| 262 premultiplied_alpha, | 264 premultiplied_alpha, |
| 263 uv_bottom_left.origin(), | 265 uv_bottom_left.origin(), |
| 264 uv_bottom_left.bottom_right(), | 266 uv_bottom_left.bottom_right(), |
| 265 SK_ColorTRANSPARENT, | 267 SK_ColorTRANSPARENT, |
| 266 vertex_opacity, | 268 vertex_opacity, |
| 267 flipped); | 269 flipped); |
| 268 } | 270 } |
| 269 | 271 |
| 270 visible_rect = | 272 visible_rect = |
| 271 occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom_right); | 273 occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom_right); |
| 274 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 272 if (!visible_rect.IsEmpty()) { | 275 if (!visible_rect.IsEmpty()) { |
| 273 TextureDrawQuad* quad = | 276 TextureDrawQuad* quad = |
| 274 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 277 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 275 quad->SetNew(shared_quad_state, | 278 quad->SetNew(shared_quad_state, |
| 276 layer_bottom_right, | 279 layer_bottom_right, |
| 277 opaque_rect, | 280 opaque_rect, |
| 278 visible_rect, | 281 visible_rect, |
| 279 resource, | 282 resource, |
| 280 premultiplied_alpha, | 283 premultiplied_alpha, |
| 281 uv_bottom_right.origin(), | 284 uv_bottom_right.origin(), |
| 282 uv_bottom_right.bottom_right(), | 285 uv_bottom_right.bottom_right(), |
| 283 SK_ColorTRANSPARENT, | 286 SK_ColorTRANSPARENT, |
| 284 vertex_opacity, | 287 vertex_opacity, |
| 285 flipped); | 288 flipped); |
| 286 } | 289 } |
| 287 | 290 |
| 288 visible_rect = occlusion_in_content_space.GetUnoccludedContentRect(layer_top); | 291 visible_rect = occlusion_in_content_space.GetUnoccludedContentRect(layer_top); |
| 292 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 289 if (!visible_rect.IsEmpty()) { | 293 if (!visible_rect.IsEmpty()) { |
| 290 TextureDrawQuad* quad = | 294 TextureDrawQuad* quad = |
| 291 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 295 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 292 quad->SetNew(shared_quad_state, | 296 quad->SetNew(shared_quad_state, |
| 293 layer_top, | 297 layer_top, |
| 294 opaque_rect, | 298 opaque_rect, |
| 295 visible_rect, | 299 visible_rect, |
| 296 resource, | 300 resource, |
| 297 premultiplied_alpha, | 301 premultiplied_alpha, |
| 298 uv_top.origin(), | 302 uv_top.origin(), |
| 299 uv_top.bottom_right(), | 303 uv_top.bottom_right(), |
| 300 SK_ColorTRANSPARENT, | 304 SK_ColorTRANSPARENT, |
| 301 vertex_opacity, | 305 vertex_opacity, |
| 302 flipped); | 306 flipped); |
| 303 } | 307 } |
| 304 | 308 |
| 305 visible_rect = | 309 visible_rect = |
| 306 occlusion_in_content_space.GetUnoccludedContentRect(layer_left); | 310 occlusion_in_content_space.GetUnoccludedContentRect(layer_left); |
| 311 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 307 if (!visible_rect.IsEmpty()) { | 312 if (!visible_rect.IsEmpty()) { |
| 308 TextureDrawQuad* quad = | 313 TextureDrawQuad* quad = |
| 309 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 314 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 310 quad->SetNew(shared_quad_state, | 315 quad->SetNew(shared_quad_state, |
| 311 layer_left, | 316 layer_left, |
| 312 opaque_rect, | 317 opaque_rect, |
| 313 visible_rect, | 318 visible_rect, |
| 314 resource, | 319 resource, |
| 315 premultiplied_alpha, | 320 premultiplied_alpha, |
| 316 uv_left.origin(), | 321 uv_left.origin(), |
| 317 uv_left.bottom_right(), | 322 uv_left.bottom_right(), |
| 318 SK_ColorTRANSPARENT, | 323 SK_ColorTRANSPARENT, |
| 319 vertex_opacity, | 324 vertex_opacity, |
| 320 flipped); | 325 flipped); |
| 321 } | 326 } |
| 322 | 327 |
| 323 visible_rect = | 328 visible_rect = |
| 324 occlusion_in_content_space.GetUnoccludedContentRect(layer_right); | 329 occlusion_in_content_space.GetUnoccludedContentRect(layer_right); |
| 330 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 325 if (!visible_rect.IsEmpty()) { | 331 if (!visible_rect.IsEmpty()) { |
| 326 TextureDrawQuad* quad = | 332 TextureDrawQuad* quad = |
| 327 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 333 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 328 quad->SetNew(shared_quad_state, | 334 quad->SetNew(shared_quad_state, |
| 329 layer_right, | 335 layer_right, |
| 330 opaque_rect, | 336 opaque_rect, |
| 331 layer_right, | 337 layer_right, |
| 332 resource, | 338 resource, |
| 333 premultiplied_alpha, | 339 premultiplied_alpha, |
| 334 uv_right.origin(), | 340 uv_right.origin(), |
| 335 uv_right.bottom_right(), | 341 uv_right.bottom_right(), |
| 336 SK_ColorTRANSPARENT, | 342 SK_ColorTRANSPARENT, |
| 337 vertex_opacity, | 343 vertex_opacity, |
| 338 flipped); | 344 flipped); |
| 339 } | 345 } |
| 340 | 346 |
| 341 visible_rect = | 347 visible_rect = |
| 342 occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom); | 348 occlusion_in_content_space.GetUnoccludedContentRect(layer_bottom); |
| 349 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 343 if (!visible_rect.IsEmpty()) { | 350 if (!visible_rect.IsEmpty()) { |
| 344 TextureDrawQuad* quad = | 351 TextureDrawQuad* quad = |
| 345 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 352 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 346 quad->SetNew(shared_quad_state, | 353 quad->SetNew(shared_quad_state, |
| 347 layer_bottom, | 354 layer_bottom, |
| 348 opaque_rect, | 355 opaque_rect, |
| 349 visible_rect, | 356 visible_rect, |
| 350 resource, | 357 resource, |
| 351 premultiplied_alpha, | 358 premultiplied_alpha, |
| 352 uv_bottom.origin(), | 359 uv_bottom.origin(), |
| 353 uv_bottom.bottom_right(), | 360 uv_bottom.bottom_right(), |
| 354 SK_ColorTRANSPARENT, | 361 SK_ColorTRANSPARENT, |
| 355 vertex_opacity, | 362 vertex_opacity, |
| 356 flipped); | 363 flipped); |
| 357 } | 364 } |
| 358 | 365 |
| 359 if (fill_center_) { | 366 if (fill_center_) { |
| 360 visible_rect = | 367 visible_rect = |
| 361 occlusion_in_content_space.GetUnoccludedContentRect(layer_center); | 368 occlusion_in_content_space.GetUnoccludedContentRect(layer_center); |
| 369 opaque_rect = opaque ? visible_rect : gfx::Rect(); |
| 362 if (!visible_rect.IsEmpty()) { | 370 if (!visible_rect.IsEmpty()) { |
| 363 TextureDrawQuad* quad = | 371 TextureDrawQuad* quad = |
| 364 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); | 372 render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); |
| 365 quad->SetNew(shared_quad_state, | 373 quad->SetNew(shared_quad_state, |
| 366 layer_center, | 374 layer_center, |
| 367 opaque_rect, | 375 opaque_rect, |
| 368 visible_rect, | 376 visible_rect, |
| 369 resource, | 377 resource, |
| 370 premultiplied_alpha, | 378 premultiplied_alpha, |
| 371 uv_center.origin(), | 379 uv_center.origin(), |
| (...skipping 25 matching lines...) Expand all Loading... |
| 397 result->Set("ImageBounds", list); | 405 result->Set("ImageBounds", list); |
| 398 | 406 |
| 399 result->Set("Border", MathUtil::AsValue(border_).release()); | 407 result->Set("Border", MathUtil::AsValue(border_).release()); |
| 400 | 408 |
| 401 result->SetBoolean("FillCenter", fill_center_); | 409 result->SetBoolean("FillCenter", fill_center_); |
| 402 | 410 |
| 403 return result; | 411 return result; |
| 404 } | 412 } |
| 405 | 413 |
| 406 } // namespace cc | 414 } // namespace cc |
| OLD | NEW |