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

Side by Side Diff: cc/layer_impl.cc

Issue 11550035: Implement pinch-zoom scaling for main-frame scrollbars and pinch-zoom overlay scrollbars. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Revised architecture - complete cl for comments on approach. Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/layer_impl.h" 5 #include "cc/layer_impl.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "cc/animation_registrar.h" 10 #include "cc/animation_registrar.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 , m_drawsContent(false) 49 , m_drawsContent(false)
50 , m_forceRenderSurface(false) 50 , m_forceRenderSurface(false)
51 , m_isContainerForFixedPositionLayers(false) 51 , m_isContainerForFixedPositionLayers(false)
52 , m_fixedToContainerLayer(false) 52 , m_fixedToContainerLayer(false)
53 , m_drawDepth(0) 53 , m_drawDepth(0)
54 #ifndef NDEBUG 54 #ifndef NDEBUG
55 , m_betweenWillDrawAndDidDraw(false) 55 , m_betweenWillDrawAndDidDraw(false)
56 #endif 56 #endif
57 , m_horizontalScrollbarLayer(0) 57 , m_horizontalScrollbarLayer(0)
58 , m_verticalScrollbarLayer(0) 58 , m_verticalScrollbarLayer(0)
59 , m_horizontalPinchZoomScrollbarLayer(0)
60 , m_verticalPinchZoomScrollbarLayer(0)
59 { 61 {
60 DCHECK(m_layerId > 0); 62 DCHECK(m_layerId > 0);
61 DCHECK(m_layerTreeImpl); 63 DCHECK(m_layerTreeImpl);
62 m_layerTreeImpl->RegisterLayer(this); 64 m_layerTreeImpl->RegisterLayer(this);
63 AnimationRegistrar* registrar = m_layerTreeImpl->animationRegistrar(); 65 AnimationRegistrar* registrar = m_layerTreeImpl->animationRegistrar();
64 m_layerAnimationController = registrar->GetAnimationControllerForId(m_layerI d); 66 m_layerAnimationController = registrar->GetAnimationControllerForId(m_layerI d);
65 m_layerAnimationController->addObserver(this); 67 m_layerAnimationController->addObserver(this);
66 } 68 }
67 69
68 LayerImpl::~LayerImpl() 70 LayerImpl::~LayerImpl()
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 if (m_horizontalScrollbarLayer) { 831 if (m_horizontalScrollbarLayer) {
830 m_horizontalScrollbarLayer->setCurrentPos(currentOffset.x()); 832 m_horizontalScrollbarLayer->setCurrentPos(currentOffset.x());
831 m_horizontalScrollbarLayer->setTotalSize(m_bounds.width()); 833 m_horizontalScrollbarLayer->setTotalSize(m_bounds.width());
832 m_horizontalScrollbarLayer->setMaximum(m_maxScrollOffset.x()); 834 m_horizontalScrollbarLayer->setMaximum(m_maxScrollOffset.x());
833 } 835 }
834 if (m_verticalScrollbarLayer) { 836 if (m_verticalScrollbarLayer) {
835 m_verticalScrollbarLayer->setCurrentPos(currentOffset.y()); 837 m_verticalScrollbarLayer->setCurrentPos(currentOffset.y());
836 m_verticalScrollbarLayer->setTotalSize(m_bounds.height()); 838 m_verticalScrollbarLayer->setTotalSize(m_bounds.height());
837 m_verticalScrollbarLayer->setMaximum(m_maxScrollOffset.y()); 839 m_verticalScrollbarLayer->setMaximum(m_maxScrollOffset.y());
838 } 840 }
841 if (m_horizontalPinchZoomScrollbarLayer) {
842 m_horizontalPinchZoomScrollbarLayer->setCurrentPos(currentOffset.x());
843 m_horizontalPinchZoomScrollbarLayer->setTotalSize(m_bounds.width());
844 m_horizontalPinchZoomScrollbarLayer->setMaximum(m_maxScrollOffset.x());
845 }
846 if (m_verticalPinchZoomScrollbarLayer) {
847 m_verticalPinchZoomScrollbarLayer->setCurrentPos(currentOffset.y());
848 m_verticalPinchZoomScrollbarLayer->setTotalSize(m_bounds.height());
849 m_verticalPinchZoomScrollbarLayer->setMaximum(m_maxScrollOffset.y());
850 }
839 851
840 if (currentOffset == m_lastScrollOffset) 852 if (currentOffset == m_lastScrollOffset)
841 return; 853 return;
842 m_lastScrollOffset = currentOffset; 854 m_lastScrollOffset = currentOffset;
843 855
844 if (m_scrollbarAnimationController) 856 if (m_scrollbarAnimationController)
845 m_scrollbarAnimationController->didUpdateScrollOffset(base::TimeTicks::N ow()); 857 m_scrollbarAnimationController->didUpdateScrollOffset(base::TimeTicks::N ow());
846 858
847 // Get the m_currentOffset.y() value for a sanity-check on scrolling 859 // Get the m_currentOffset.y() value for a sanity-check on scrolling
848 // benchmark metrics. Specifically, we want to make sure 860 // benchmark metrics. Specifically, we want to make sure
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
882 } 894 }
883 895
884 m_scrollDelta = scrollDelta; 896 m_scrollDelta = scrollDelta;
885 noteLayerPropertyChangedForSubtree(); 897 noteLayerPropertyChangedForSubtree();
886 898
887 updateScrollbarPositions(); 899 updateScrollbarPositions();
888 } 900 }
889 901
890 void LayerImpl::setImplTransform(const gfx::Transform& transform) 902 void LayerImpl::setImplTransform(const gfx::Transform& transform)
891 { 903 {
892 if (m_implTransform == transform) 904 // TODO(wjmaclean) - do not commit the changes in this function
905 // yet! I've included them in this patch to show the eventual
906 // mechanism I propose for mainframe scrollbar scaling,
907 // but the transforms cannot be finalized until the
908 // desktop compatibility viewport lands.
909
910 // We should never have just one pinch-zoom scrollbar.
911 DCHECK((m_horizontalPinchZoomScrollbarLayer && m_verticalPinchZoomScrollbarL ayer) ||
912 (!m_horizontalPinchZoomScrollbarLayer && !m_verticalPinchZoomScrollba rLayer));
913
914 bool hasPinchZoomScrollbars = m_horizontalPinchZoomScrollbarLayer && m_verti calPinchZoomScrollbarLayer;
915
916 if (!hasPinchZoomScrollbars && (m_implTransform == transform))
893 return; 917 return;
894 918
895 m_implTransform = transform; 919 bool redirectedToClipLayer = false;
896 noteLayerPropertyChangedForSubtree(); 920 if (hasPinchZoomScrollbars) {
921 gfx::Transform scrollbarTransformHorizontal(transform);
922 // TODO(wjmaclean) This is the wrong translation, need to
923 // know the offset of the desktop compatibility viewport.
aelias_OOO_until_Jul13 2013/02/06 19:02:45 I gather you're trying to make the scrollbars visi
924 scrollbarTransformHorizontal.Translate(0, -layerTreeImpl()->device_scale _factor() * scrollOffset().y());
925 if (m_horizontalScrollbarLayer)
926 m_horizontalScrollbarLayer->setImplTransform(scrollbarTransformHoriz ontal);
927
928 gfx::Transform scrollbarTransformVertical(transform);
929 // TODO(wjmaclean) Same comment as above.
930 scrollbarTransformVertical.Translate(-layerTreeImpl()->device_scale_fact or() * scrollOffset().x(), 0);
931 if (m_verticalScrollbarLayer)
932 m_verticalScrollbarLayer->setImplTransform(scrollbarTransformVertica l);
933 // If we're using pinch-zoom scrollbars, we don't want them
934 // clipped to the untransformed bounds, so we re-direct
935 // the implTransform to the clip layer instead.
936 if (parent()) {
937 parent()->setImplTransform(transform);
938 redirectedToClipLayer = true;
939 }
940 }
941
942 if (!redirectedToClipLayer && m_implTransform != transform) {
943 m_implTransform = transform;
944 noteLayerPropertyChangedForSubtree();
945 }
897 } 946 }
898 947
899 void LayerImpl::setDoubleSided(bool doubleSided) 948 void LayerImpl::setDoubleSided(bool doubleSided)
900 { 949 {
901 if (m_doubleSided == doubleSided) 950 if (m_doubleSided == doubleSided)
902 return; 951 return;
903 952
904 m_doubleSided = doubleSided; 953 m_doubleSided = doubleSided;
905 noteLayerPropertyChangedForSubtree(); 954 noteLayerPropertyChangedForSubtree();
906 } 955 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
962 m_horizontalScrollbarLayer->setScrollLayerId(id()); 1011 m_horizontalScrollbarLayer->setScrollLayerId(id());
963 } 1012 }
964 1013
965 void LayerImpl::setVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer) 1014 void LayerImpl::setVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbarLayer)
966 { 1015 {
967 m_verticalScrollbarLayer = scrollbarLayer; 1016 m_verticalScrollbarLayer = scrollbarLayer;
968 if (m_verticalScrollbarLayer) 1017 if (m_verticalScrollbarLayer)
969 m_verticalScrollbarLayer->setScrollLayerId(id()); 1018 m_verticalScrollbarLayer->setScrollLayerId(id());
970 } 1019 }
971 1020
1021 void LayerImpl::setHorizontalPinchZoomScrollbarLayer(ScrollbarLayerImpl* scrollb arLayer)
1022 {
1023 m_horizontalPinchZoomScrollbarLayer = scrollbarLayer;
1024 }
1025
1026 void LayerImpl::setVerticalPinchZoomScrollbarLayer(ScrollbarLayerImpl* scrollbar Layer)
1027 {
1028 m_verticalPinchZoomScrollbarLayer = scrollbarLayer;
1029 }
1030
972 } // namespace cc 1031 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layer_impl.h ('k') | cc/layer_tree_host.h » ('j') | cc/scrollbar_layer.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698