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

Side by Side Diff: Source/core/dom/Document.cpp

Issue 82083002: Move viewport unit resolution to style recalc time (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: rebased.. Created 7 years 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 1878 matching lines...) Expand 10 before | Expand all | Expand 10 after
1889 } 1889 }
1890 1890
1891 bool Document::isPageBoxVisible(int pageIndex) 1891 bool Document::isPageBoxVisible(int pageIndex)
1892 { 1892 {
1893 return styleForPage(pageIndex)->visibility() != HIDDEN; // display property doesn't apply to @page. 1893 return styleForPage(pageIndex)->visibility() != HIDDEN; // display property doesn't apply to @page.
1894 } 1894 }
1895 1895
1896 void Document::pageSizeAndMarginsInPixels(int pageIndex, IntSize& pageSize, int& marginTop, int& marginRight, int& marginBottom, int& marginLeft) 1896 void Document::pageSizeAndMarginsInPixels(int pageIndex, IntSize& pageSize, int& marginTop, int& marginRight, int& marginBottom, int& marginLeft)
1897 { 1897 {
1898 RefPtr<RenderStyle> style = styleForPage(pageIndex); 1898 RefPtr<RenderStyle> style = styleForPage(pageIndex);
1899 RenderView* view = renderView();
1900 1899
1901 int width = pageSize.width(); 1900 int width = pageSize.width();
1902 int height = pageSize.height(); 1901 int height = pageSize.height();
1903 switch (style->pageSizeType()) { 1902 switch (style->pageSizeType()) {
1904 case PAGE_SIZE_AUTO: 1903 case PAGE_SIZE_AUTO:
1905 break; 1904 break;
1906 case PAGE_SIZE_AUTO_LANDSCAPE: 1905 case PAGE_SIZE_AUTO_LANDSCAPE:
1907 if (width < height) 1906 if (width < height)
1908 std::swap(width, height); 1907 std::swap(width, height);
1909 break; 1908 break;
1910 case PAGE_SIZE_AUTO_PORTRAIT: 1909 case PAGE_SIZE_AUTO_PORTRAIT:
1911 if (width > height) 1910 if (width > height)
1912 std::swap(width, height); 1911 std::swap(width, height);
1913 break; 1912 break;
1914 case PAGE_SIZE_RESOLVED: { 1913 case PAGE_SIZE_RESOLVED: {
1915 LengthSize size = style->pageSize(); 1914 LengthSize size = style->pageSize();
1916 ASSERT(size.width().isFixed()); 1915 ASSERT(size.width().isFixed());
1917 ASSERT(size.height().isFixed()); 1916 ASSERT(size.height().isFixed());
1918 width = valueForLength(size.width(), 0, view); 1917 width = valueForLength(size.width(), 0);
1919 height = valueForLength(size.height(), 0, view); 1918 height = valueForLength(size.height(), 0);
1920 break; 1919 break;
1921 } 1920 }
1922 default: 1921 default:
1923 ASSERT_NOT_REACHED(); 1922 ASSERT_NOT_REACHED();
1924 } 1923 }
1925 pageSize = IntSize(width, height); 1924 pageSize = IntSize(width, height);
1926 1925
1927 // The percentage is calculated with respect to the width even for margin to p and bottom. 1926 // The percentage is calculated with respect to the width even for margin to p and bottom.
1928 // http://www.w3.org/TR/CSS2/box.html#margin-properties 1927 // http://www.w3.org/TR/CSS2/box.html#margin-properties
1929 marginTop = style->marginTop().isAuto() ? marginTop : intValueForLength(styl e->marginTop(), width, view); 1928 marginTop = style->marginTop().isAuto() ? marginTop : intValueForLength(styl e->marginTop(), width);
1930 marginRight = style->marginRight().isAuto() ? marginRight : intValueForLengt h(style->marginRight(), width, view); 1929 marginRight = style->marginRight().isAuto() ? marginRight : intValueForLengt h(style->marginRight(), width);
1931 marginBottom = style->marginBottom().isAuto() ? marginBottom : intValueForLe ngth(style->marginBottom(), width, view); 1930 marginBottom = style->marginBottom().isAuto() ? marginBottom : intValueForLe ngth(style->marginBottom(), width);
1932 marginLeft = style->marginLeft().isAuto() ? marginLeft : intValueForLength(s tyle->marginLeft(), width, view); 1931 marginLeft = style->marginLeft().isAuto() ? marginLeft : intValueForLength(s tyle->marginLeft(), width);
1933 } 1932 }
1934 1933
1935 void Document::setIsViewSource(bool isViewSource) 1934 void Document::setIsViewSource(bool isViewSource)
1936 { 1935 {
1937 m_isViewSource = isViewSource; 1936 m_isViewSource = isViewSource;
1938 if (!m_isViewSource) 1937 if (!m_isViewSource)
1939 return; 1938 return;
1940 1939
1941 setSecurityOrigin(SecurityOrigin::createUnique()); 1940 setSecurityOrigin(SecurityOrigin::createUnique());
1942 didUpdateSecurityOrigin(); 1941 didUpdateSecurityOrigin();
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after
3163 m_styleEngine->setSelectedStylesheetSetName(aString); 3162 m_styleEngine->setSelectedStylesheetSetName(aString);
3164 styleResolverChanged(RecalcStyleDeferred); 3163 styleResolverChanged(RecalcStyleDeferred);
3165 } 3164 }
3166 3165
3167 void Document::evaluateMediaQueryList() 3166 void Document::evaluateMediaQueryList()
3168 { 3167 {
3169 if (m_mediaQueryMatcher) 3168 if (m_mediaQueryMatcher)
3170 m_mediaQueryMatcher->styleResolverChanged(); 3169 m_mediaQueryMatcher->styleResolverChanged();
3171 } 3170 }
3172 3171
3172 void Document::notifyResizeForViewportUnits()
3173 {
3174 if (!hasViewportUnits())
3175 return;
3176 if (StyleResolver* resolver = styleResolver())
3177 resolver->invalidateViewportDependentMatchedProperties();
3178 for (Element* element = ElementTraversal::firstWithin(*this); element; eleme nt = ElementTraversal::next(*element)) {
3179 RenderStyle* style = element->renderStyle();
3180 if (style && style->hasViewportUnits())
3181 element->setNeedsStyleRecalc(LocalStyleChange);
3182 }
esprehn 2013/12/04 06:02:28 This doesn't handle Shadow DOM, you probably want
Timothy Loh 2013/12/15 23:41:19 Done. Also updated this to iterate over pseudoelem
3183 }
3184
3173 void Document::styleResolverChanged(RecalcStyleTime updateTime, StyleResolverUpd ateMode updateMode) 3185 void Document::styleResolverChanged(RecalcStyleTime updateTime, StyleResolverUpd ateMode updateMode)
3174 { 3186 {
3175 // styleResolverChanged() can be invoked during Document destruction. 3187 // styleResolverChanged() can be invoked during Document destruction.
3176 // We just skip that case. 3188 // We just skip that case.
3177 if (!m_styleEngine) 3189 if (!m_styleEngine)
3178 return; 3190 return;
3179 3191
3180 StyleResolverChange change = m_styleEngine->resolverChanged(updateTime, upda teMode); 3192 StyleResolverChange change = m_styleEngine->resolverChanged(updateTime, upda teMode);
3181 if (change.needsRepaint()) { 3193 if (change.needsRepaint()) {
3182 // We need to manually repaint because we avoid doing all repaints in la yout or style 3194 // We need to manually repaint because we avoid doing all repaints in la yout or style
(...skipping 2051 matching lines...) Expand 10 before | Expand all | Expand 10 after
5234 } 5246 }
5235 5247
5236 FastTextAutosizer* Document::fastTextAutosizer() 5248 FastTextAutosizer* Document::fastTextAutosizer()
5237 { 5249 {
5238 if (!m_fastTextAutosizer && RuntimeEnabledFeatures::fastTextAutosizingEnable d()) 5250 if (!m_fastTextAutosizer && RuntimeEnabledFeatures::fastTextAutosizingEnable d())
5239 m_fastTextAutosizer = FastTextAutosizer::create(this); 5251 m_fastTextAutosizer = FastTextAutosizer::create(this);
5240 return m_fastTextAutosizer.get(); 5252 return m_fastTextAutosizer.get();
5241 } 5253 }
5242 5254
5243 } // namespace WebCore 5255 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698