OLD | NEW |
1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 2011 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/trees/layer_tree_host_impl.h" | 5 #include "cc/trees/layer_tree_host_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 3870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3881 float scale = static_cast<float>(max_texture_size - 1) / edge; | 3881 float scale = static_cast<float>(max_texture_size - 1) / edge; |
3882 DCHECK_LT(scale, 1.f); | 3882 DCHECK_LT(scale, 1.f); |
3883 upload_size = gfx::ScaleToCeiledSize(source_size, scale, scale); | 3883 upload_size = gfx::ScaleToCeiledSize(source_size, scale, scale); |
3884 } | 3884 } |
3885 | 3885 |
3886 id = resource_provider_->CreateResource( | 3886 id = resource_provider_->CreateResource( |
3887 upload_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format, | 3887 upload_size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format, |
3888 gfx::ColorSpace::CreateSRGB()); | 3888 gfx::ColorSpace::CreateSRGB()); |
3889 | 3889 |
3890 if (!scaled) { | 3890 if (!scaled) { |
3891 AutoLockUIResourceBitmap bitmap_lock(bitmap); | 3891 resource_provider_->CopyToResource(id, bitmap.GetPixels(), source_size); |
3892 auto* pixels = bitmap_lock.GetPixels(); | |
3893 resource_provider_->CopyToResource(id, pixels, source_size); | |
3894 } else { | 3892 } else { |
3895 // Only support auto-resizing for N32 textures (since this is primarily for | 3893 // Only support auto-resizing for N32 textures (since this is primarily for |
3896 // scrollbars). Users of other types need to ensure they are not too big. | 3894 // scrollbars). Users of other types need to ensure they are not too big. |
3897 DCHECK_EQ(bitmap.GetFormat(), UIResourceBitmap::RGBA8); | 3895 DCHECK_EQ(bitmap.GetFormat(), UIResourceBitmap::RGBA8); |
3898 | 3896 |
3899 float canvas_scale_x = | 3897 float canvas_scale_x = |
3900 upload_size.width() / static_cast<float>(source_size.width()); | 3898 upload_size.width() / static_cast<float>(source_size.width()); |
3901 float canvas_scale_y = | 3899 float canvas_scale_y = |
3902 upload_size.height() / static_cast<float>(source_size.height()); | 3900 upload_size.height() / static_cast<float>(source_size.height()); |
3903 | 3901 |
3904 // Uses kPremul_SkAlphaType since that is what SkBitmap's allocN32Pixels | 3902 // Uses kPremul_SkAlphaType since that is what SkBitmap's allocN32Pixels |
3905 // makes, and we only support the RGBA8 format here. | 3903 // makes, and we only support the RGBA8 format here. |
3906 SkImageInfo info = SkImageInfo::MakeN32( | 3904 SkImageInfo info = SkImageInfo::MakeN32( |
3907 source_size.width(), source_size.height(), kPremul_SkAlphaType); | 3905 source_size.width(), source_size.height(), kPremul_SkAlphaType); |
3908 int row_bytes = source_size.width() * 4; | 3906 int row_bytes = source_size.width() * 4; |
3909 | 3907 |
3910 AutoLockUIResourceBitmap bitmap_lock(bitmap); | |
3911 SkBitmap source_bitmap; | 3908 SkBitmap source_bitmap; |
3912 source_bitmap.setInfo(info, row_bytes); | 3909 source_bitmap.setInfo(info, row_bytes); |
3913 source_bitmap.setPixels(const_cast<uint8_t*>(bitmap_lock.GetPixels())); | 3910 source_bitmap.setPixels(const_cast<uint8_t*>(bitmap.GetPixels())); |
3914 | 3911 |
3915 // This applies the scale to draw the |bitmap| into |scaled_bitmap|. | 3912 // This applies the scale to draw the |bitmap| into |scaled_bitmap|. |
3916 SkBitmap scaled_bitmap; | 3913 SkBitmap scaled_bitmap; |
3917 scaled_bitmap.allocN32Pixels(upload_size.width(), upload_size.height()); | 3914 scaled_bitmap.allocN32Pixels(upload_size.width(), upload_size.height()); |
3918 SkCanvas scaled_canvas(scaled_bitmap); | 3915 SkCanvas scaled_canvas(scaled_bitmap); |
3919 scaled_canvas.scale(canvas_scale_x, canvas_scale_y); | 3916 scaled_canvas.scale(canvas_scale_x, canvas_scale_y); |
3920 // The |canvas_scale_x| and |canvas_scale_y| may have some floating point | 3917 // The |canvas_scale_x| and |canvas_scale_y| may have some floating point |
3921 // error for large enough values, causing pixels on the edge to be not | 3918 // error for large enough values, causing pixels on the edge to be not |
3922 // fully filled by drawBitmap(), so we ensure they start empty. (See | 3919 // fully filled by drawBitmap(), so we ensure they start empty. (See |
3923 // crbug.com/642011 for an example.) | 3920 // crbug.com/642011 for an example.) |
3924 scaled_canvas.clear(SK_ColorTRANSPARENT); | 3921 scaled_canvas.clear(SK_ColorTRANSPARENT); |
3925 scaled_canvas.drawBitmap(source_bitmap, 0, 0); | 3922 scaled_canvas.drawBitmap(source_bitmap, 0, 0); |
3926 | 3923 |
3927 SkAutoLockPixels scaled_bitmap_lock(scaled_bitmap); | |
3928 auto* pixels = static_cast<uint8_t*>(scaled_bitmap.getPixels()); | 3924 auto* pixels = static_cast<uint8_t*>(scaled_bitmap.getPixels()); |
3929 resource_provider_->CopyToResource(id, pixels, upload_size); | 3925 resource_provider_->CopyToResource(id, pixels, upload_size); |
3930 } | 3926 } |
3931 | 3927 |
3932 UIResourceData data; | 3928 UIResourceData data; |
3933 data.resource_id = id; | 3929 data.resource_id = id; |
3934 data.opaque = bitmap.GetOpaque(); | 3930 data.opaque = bitmap.GetOpaque(); |
3935 ui_resource_map_[uid] = data; | 3931 ui_resource_map_[uid] = data; |
3936 | 3932 |
3937 resource_provider_->GenerateSyncTokenForResource(id); | 3933 resource_provider_->GenerateSyncTokenForResource(id); |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4286 } | 4282 } |
4287 | 4283 |
4288 void LayerTreeHostImpl::UpdateScrollSourceInfo(bool is_wheel_scroll) { | 4284 void LayerTreeHostImpl::UpdateScrollSourceInfo(bool is_wheel_scroll) { |
4289 if (is_wheel_scroll) | 4285 if (is_wheel_scroll) |
4290 has_scrolled_by_wheel_ = true; | 4286 has_scrolled_by_wheel_ = true; |
4291 else | 4287 else |
4292 has_scrolled_by_touch_ = true; | 4288 has_scrolled_by_touch_ = true; |
4293 } | 4289 } |
4294 | 4290 |
4295 } // namespace cc | 4291 } // namespace cc |
OLD | NEW |