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

Unified Diff: Source/core/rendering/mathml/RenderMathMLSubSup.cpp

Issue 13993028: Remove MathML (part 3 of many) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 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: Source/core/rendering/mathml/RenderMathMLSubSup.cpp
diff --git a/Source/core/rendering/mathml/RenderMathMLSubSup.cpp b/Source/core/rendering/mathml/RenderMathMLSubSup.cpp
deleted file mode 100644
index cc621b429e834cf23318fa1717b3e5012804cdcd..0000000000000000000000000000000000000000
--- a/Source/core/rendering/mathml/RenderMathMLSubSup.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2010 Alex Milowski (alex@milowski.com). All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-
-#if ENABLE(MATHML)
-
-#include "core/rendering/mathml/RenderMathMLSubSup.h"
-
-#include "MathMLNames.h"
-
-namespace WebCore {
-
-using namespace MathMLNames;
-
-RenderMathMLSubSup::RenderMathMLSubSup(Element* element)
- : RenderMathMLBlock(element)
- , m_scripts(0)
-{
- // Determine what kind of sub/sup expression we have by element name
- if (element->hasLocalName(MathMLNames::msubTag))
- m_kind = Sub;
- else if (element->hasLocalName(MathMLNames::msupTag))
- m_kind = Super;
- else {
- ASSERT(element->hasLocalName(MathMLNames::msubsupTag));
- m_kind = SubSup;
- }
-}
-
-RenderBoxModelObject* RenderMathMLSubSup::base() const
-{
- RenderObject* baseWrapper = firstChild();
- if (!baseWrapper)
- return 0;
- RenderObject* base = baseWrapper->firstChild();
- if (!base || !base->isBoxModelObject())
- return 0;
- return toRenderBoxModelObject(base);
-}
-
-void RenderMathMLSubSup::fixAnonymousStyles()
-{
- // Set the base wrapper's style so that baseHeight in layout() will be an unstretched height.
- ASSERT(firstChild() && firstChild()->style()->refCount() == 1);
- firstChild()->style()->setAlignSelf(AlignFlexStart);
-
- ASSERT(m_scripts && m_scripts->style()->refCount() == 1);
- RenderStyle* scriptsStyle = m_scripts->style();
- scriptsStyle->setFlexDirection(FlowColumn);
- scriptsStyle->setJustifyContent(m_kind == Sub ? JustifyFlexEnd : m_kind == Super ? JustifyFlexStart : JustifySpaceBetween);
- // Set this wrapper's font-size for its line-height & baseline position, for its children.
- scriptsStyle->setFontSize(static_cast<int>(0.75 * style()->fontSize()));
-}
-
-// FIXME: Handle arbitrary addChild/removeChild correctly throughout MathML.
-void RenderMathMLSubSup::addChild(RenderObject* child, RenderObject* beforeChild)
-{
- if (isEmpty()) {
- RenderMathMLBlock* baseWrapper = createAnonymousMathMLBlock();
- RenderMathMLBlock::addChild(baseWrapper);
-
- m_scripts = createAnonymousMathMLBlock();
- RenderMathMLBlock::addChild(m_scripts);
-
- fixAnonymousStyles();
- }
-
- if (firstChild()->isEmpty())
- firstChild()->addChild(child);
- else
- m_scripts->addChild(child, beforeChild && beforeChild->parent() == m_scripts ? beforeChild : 0);
-}
-
-void RenderMathMLSubSup::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
-{
- RenderMathMLBlock::styleDidChange(diff, oldStyle);
-
- if (!isEmpty())
- fixAnonymousStyles();
-}
-
-RenderMathMLOperator* RenderMathMLSubSup::unembellishedOperator()
-{
- RenderBoxModelObject* base = this->base();
- if (!base || !base->isRenderMathMLBlock())
- return 0;
- return toRenderMathMLBlock(base)->unembellishedOperator();
-}
-
-void RenderMathMLSubSup::layout()
-{
- RenderMathMLBlock::layout();
-
- RenderMathMLBlock* baseWrapper = toRenderMathMLBlock(firstChild());
- if (!baseWrapper || !m_scripts)
- return;
- RenderBox* base = baseWrapper->firstChildBox();
- if (!base)
- return;
-
- // Our layout rules include: Don't let the superscript go below the "axis" (half x-height above the
- // baseline), or the subscript above the axis. Also, don't let the superscript's top edge be
- // below the base's top edge, or the subscript's bottom edge above the base's bottom edge.
- //
- // FIXME: Check any subscriptshift or superscriptshift attributes, and maybe use more sophisticated
- // heuristics from TeX or elsewhere. See https://bugs.webkit.org/show_bug.cgi?id=79274#c5.
-
- LayoutUnit baseHeight = base->logicalHeight();
- LayoutUnit baseBaseline = base->firstLineBoxBaseline();
- if (baseBaseline == -1)
- baseBaseline = baseHeight;
- LayoutUnit axis = style()->fontMetrics().xHeight() / 2;
- int fontSize = style()->fontSize();
-
- ASSERT(baseWrapper->style()->hasOneRef());
- bool needsSecondLayout = false;
-
- if (RenderBox* superscript = m_kind == Sub ? 0 : m_scripts->lastChildBox()) {
- LayoutUnit superscriptHeight = superscript->logicalHeight();
- LayoutUnit superscriptBaseline = superscript->firstLineBoxBaseline();
- if (superscriptBaseline == -1)
- superscriptBaseline = superscriptHeight;
- LayoutUnit minBaseline = max<LayoutUnit>(fontSize / 3 + 1 + superscriptBaseline, superscriptHeight + axis);
-
- Length newPadding = Length(max<LayoutUnit>(minBaseline - baseBaseline, 0), Fixed);
- if (newPadding != baseWrapper->style()->paddingTop()) {
- baseWrapper->style()->setPaddingTop(newPadding);
- needsSecondLayout = true;
- }
- }
-
- if (RenderBox* subscript = m_kind == Super ? 0 : m_scripts->firstChildBox()) {
- LayoutUnit subscriptHeight = subscript->logicalHeight();
- LayoutUnit subscriptBaseline = subscript->firstLineBoxBaseline();
- if (subscriptBaseline == -1)
- subscriptBaseline = subscriptHeight;
- LayoutUnit baseExtendUnderBaseline = baseHeight - baseBaseline;
- LayoutUnit subscriptUnderItsBaseline = subscriptHeight - subscriptBaseline;
- LayoutUnit minExtendUnderBaseline = max<LayoutUnit>(fontSize / 5 + 1 + subscriptUnderItsBaseline, subscriptHeight - axis);
-
- Length newPadding = Length(max<LayoutUnit>(minExtendUnderBaseline - baseExtendUnderBaseline, 0), Fixed);
- if (newPadding != baseWrapper->style()->paddingBottom()) {
- baseWrapper->style()->setPaddingBottom(newPadding);
- needsSecondLayout = true;
- }
- }
-
- if (!needsSecondLayout)
- return;
-
- setNeedsLayout(true, MarkOnlyThis);
- baseWrapper->setChildNeedsLayout(true, MarkOnlyThis);
-
- RenderMathMLBlock::layout();
-}
-
-}
-
-#endif // ENABLE(MATHML)
« no previous file with comments | « Source/core/rendering/mathml/RenderMathMLSubSup.h ('k') | Source/core/rendering/mathml/RenderMathMLUnderOver.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698