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

Unified Diff: ui/views/view.cc

Issue 375693006: Snap layers in views to physical pixel (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use cc::MathUtil::Round instead Created 6 years, 5 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
Index: ui/views/view.cc
diff --git a/ui/views/view.cc b/ui/views/view.cc
index 0f57d89d7501d9478e74416e9e86618cd3f91871..84b35cd021819711b1d26d1e211ea1ddce9c4e91 100644
--- a/ui/views/view.cc
+++ b/ui/views/view.cc
@@ -20,6 +20,7 @@
#include "ui/base/cursor/cursor.h"
#include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/compositor/compositor.h"
+#include "ui/compositor/dip_util.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animator.h"
#include "ui/events/event_target_iterator.h"
@@ -112,6 +113,7 @@ View::View()
root_bounds_dirty_(true),
clip_insets_(0, 0, 0, 0),
needs_layout_(true),
+ snap_layer_to_pixel_boundary_(false),
flip_canvas_on_paint_for_rtl_ui_(false),
paint_to_layer_(false),
accelerator_focus_manager_(NULL),
@@ -572,6 +574,19 @@ void View::SetLayoutManager(LayoutManager* layout_manager) {
layout_manager_->Installed(this);
}
+void View::SnapLayerToPixelBoundary() {
+ if (!layer())
+ return;
+
+ if (snap_layer_to_pixel_boundary_ && layer()->parent() &&
+ layer()->GetCompositor()) {
+ ui::SnapLayerToPhysicalPixelBoundary(layer()->parent(), layer());
+ } else {
+ // Reset the offset.
+ layer()->SetSubpixelPositionOffset(gfx::Vector2dF());
+ }
+}
+
// Attributes ------------------------------------------------------------------
const char* View::GetClassName() const {
@@ -1520,6 +1535,9 @@ void View::OnPaintLayer(gfx::Canvas* canvas) {
}
void View::OnDeviceScaleFactorChanged(float device_scale_factor) {
+ snap_layer_to_pixel_boundary_ =
+ (device_scale_factor - std::floor(device_scale_factor)) != 0.0f;
+ SnapLayerToPixelBoundary();
// Repainting with new scale factor will paint the content at the right scale.
}
@@ -2040,6 +2058,7 @@ void View::RemoveDescendantToNotify(View* view) {
void View::SetLayerBounds(const gfx::Rect& bounds) {
layer()->SetBounds(bounds);
+ SnapLayerToPixelBoundary();
}
void View::SetRootBoundsDirty(bool origin_changed) {
« ui/compositor/dip_util.cc ('K') | « ui/views/view.h ('k') | ui/views/view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698