| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 * Library General Public License for more details. | 13 * Library General Public License for more details. |
| 14 * | 14 * |
| 15 * You should have received a copy of the GNU Library General Public License | 15 * You should have received a copy of the GNU Library General Public License |
| 16 * along with this library; see the file COPYING.LIB. If not, write to | 16 * along with this library; see the file COPYING.LIB. If not, write to |
| 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | 17 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 18 * Boston, MA 02110-1301, USA. | 18 * Boston, MA 02110-1301, USA. |
| 19 */ | 19 */ |
| 20 | 20 |
| 21 #include "config.h" | 21 #include "config.h" |
| 22 #include "core/rendering/RenderView.h" | 22 #include "core/rendering/RenderView.h" |
| 23 | 23 |
| 24 #include "core/dom/Document.h" | 24 #include "core/dom/Document.h" |
| 25 #include "core/dom/Element.h" | 25 #include "core/dom/Element.h" |
| 26 #include "core/frame/LocalFrame.h" | 26 #include "core/frame/LocalFrame.h" |
| 27 #include "core/html/HTMLDialogElement.h" | |
| 28 #include "core/html/HTMLFrameOwnerElement.h" | 27 #include "core/html/HTMLFrameOwnerElement.h" |
| 29 #include "core/html/HTMLIFrameElement.h" | 28 #include "core/html/HTMLIFrameElement.h" |
| 30 #include "core/page/Page.h" | 29 #include "core/page/Page.h" |
| 31 #include "core/rendering/ColumnInfo.h" | 30 #include "core/rendering/ColumnInfo.h" |
| 32 #include "core/rendering/FlowThreadController.h" | 31 #include "core/rendering/FlowThreadController.h" |
| 33 #include "core/rendering/GraphicsContextAnnotator.h" | 32 #include "core/rendering/GraphicsContextAnnotator.h" |
| 34 #include "core/rendering/HitTestResult.h" | 33 #include "core/rendering/HitTestResult.h" |
| 35 #include "core/rendering/RenderFlowThread.h" | 34 #include "core/rendering/RenderFlowThread.h" |
| 36 #include "core/rendering/RenderGeometryMap.h" | 35 #include "core/rendering/RenderGeometryMap.h" |
| 37 #include "core/rendering/RenderLayer.h" | 36 #include "core/rendering/RenderLayer.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 if (hasColumns()) | 129 if (hasColumns()) |
| 131 return columnInfo()->columnHeight(); | 130 return columnInfo()->columnHeight(); |
| 132 return RenderBlockFlow::availableLogicalHeight(heightType); | 131 return RenderBlockFlow::availableLogicalHeight(heightType); |
| 133 } | 132 } |
| 134 | 133 |
| 135 bool RenderView::isChildAllowed(RenderObject* child, RenderStyle*) const | 134 bool RenderView::isChildAllowed(RenderObject* child, RenderStyle*) const |
| 136 { | 135 { |
| 137 return child->isBox(); | 136 return child->isBox(); |
| 138 } | 137 } |
| 139 | 138 |
| 140 static bool canCenterDialog(const RenderStyle* style) | |
| 141 { | |
| 142 return (style->position() == AbsolutePosition || style->position() == FixedP
osition) && style->hasAutoTopAndBottom(); | |
| 143 } | |
| 144 | |
| 145 void RenderView::positionDialog(RenderBox* box) | |
| 146 { | |
| 147 HTMLDialogElement* dialog = toHTMLDialogElement(box->node()); | |
| 148 if (dialog->centeringMode() == HTMLDialogElement::NotCentered) | |
| 149 return; | |
| 150 if (dialog->centeringMode() == HTMLDialogElement::Centered) { | |
| 151 if (canCenterDialog(box->style())) | |
| 152 box->setY(dialog->centeredPosition()); | |
| 153 return; | |
| 154 } | |
| 155 | |
| 156 ASSERT(dialog->centeringMode() == HTMLDialogElement::NeedsCentering); | |
| 157 if (!canCenterDialog(box->style())) { | |
| 158 dialog->setNotCentered(); | |
| 159 return; | |
| 160 } | |
| 161 FrameView* frameView = document().view(); | |
| 162 LayoutUnit top = (box->style()->position() == FixedPosition) ? 0 : frameView
->scrollOffset().height(); | |
| 163 int visibleHeight = frameView->visibleContentRect(IncludeScrollbars).height(
); | |
| 164 if (box->height() < visibleHeight) | |
| 165 top += (visibleHeight - box->height()) / 2; | |
| 166 box->setY(top); | |
| 167 dialog->setCentered(top); | |
| 168 } | |
| 169 | |
| 170 void RenderView::positionDialogs() | |
| 171 { | |
| 172 TrackedRendererListHashSet* positionedDescendants = positionedObjects(); | |
| 173 if (!positionedDescendants) | |
| 174 return; | |
| 175 TrackedRendererListHashSet::iterator end = positionedDescendants->end(); | |
| 176 for (TrackedRendererListHashSet::iterator it = positionedDescendants->begin(
); it != end; ++it) { | |
| 177 RenderBox* box = *it; | |
| 178 if (isHTMLDialogElement(box->node())) | |
| 179 positionDialog(box); | |
| 180 } | |
| 181 } | |
| 182 | |
| 183 void RenderView::layoutContent() | 139 void RenderView::layoutContent() |
| 184 { | 140 { |
| 185 ASSERT(needsLayout()); | 141 ASSERT(needsLayout()); |
| 186 | 142 |
| 187 RenderBlockFlow::layout(); | 143 RenderBlockFlow::layout(); |
| 188 | 144 |
| 189 positionDialogs(); | |
| 190 | |
| 191 #if ENABLE(ASSERT) | 145 #if ENABLE(ASSERT) |
| 192 checkLayoutState(); | 146 checkLayoutState(); |
| 193 #endif | 147 #endif |
| 194 } | 148 } |
| 195 | 149 |
| 196 #if ENABLE(ASSERT) | 150 #if ENABLE(ASSERT) |
| 197 void RenderView::checkLayoutState() | 151 void RenderView::checkLayoutState() |
| 198 { | 152 { |
| 199 ASSERT(!m_layoutState->next()); | 153 ASSERT(!m_layoutState->next()); |
| 200 } | 154 } |
| (...skipping 809 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1010 return viewWidth(IncludeScrollbars) / scale; | 964 return viewWidth(IncludeScrollbars) / scale; |
| 1011 } | 965 } |
| 1012 | 966 |
| 1013 double RenderView::layoutViewportHeight() const | 967 double RenderView::layoutViewportHeight() const |
| 1014 { | 968 { |
| 1015 float scale = m_frameView ? m_frameView->frame().pageZoomFactor() : 1; | 969 float scale = m_frameView ? m_frameView->frame().pageZoomFactor() : 1; |
| 1016 return viewHeight(IncludeScrollbars) / scale; | 970 return viewHeight(IncludeScrollbars) / scale; |
| 1017 } | 971 } |
| 1018 | 972 |
| 1019 } // namespace blink | 973 } // namespace blink |
| OLD | NEW |