10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1997 Martin Jones (mjones@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1997 Torben Weis (weis@kde.org) 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1998 Waldo Bastian (bastian@kde.org) 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999 Lars Knoll (knoll@kde.org) 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999 Antti Koivisto (koivisto@kde.org) 70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2003, 2004, 2005, 2006, 2009 Apple Inc. All rights reserved. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderTableCol.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedImage.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLTableColElement.h" 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderTable.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderTableCol::RenderTableCol(Node* node) 390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch : RenderBox(node) 400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch , m_span(1) 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // init RenderObject attributes 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setInline(true); // our object is not Inline 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateFromElement(); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderTableCol::updateFromElement() 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int oldSpan = m_span; 508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Node* n = node(); 518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (n && (n->hasTagName(colTag) || n->hasTagName(colgroupTag))) { 528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian HTMLTableColElement* tc = static_cast<HTMLTableColElement*>(n); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_span = tc->span(); 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_span = !(style() && style()->display() == TABLE_COLUMN_GROUP); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_span != oldSpan && style() && parent()) 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setNeedsLayoutAndPrefWidthsRecalc(); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderTableCol::isChildAllowed(RenderObject* child, RenderStyle* style) const 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !child->isText() && style && (style->display() == TABLE_COLUMN); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderTableCol::canHaveChildren() const 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Cols cannot have children. This is actually necessary to fix a bug 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // with libraries.uc.edu, which makes a <p> be a table-column. 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return style()->display() == TABLE_COLUMN_GROUP; 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianIntRect RenderTableCol::clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer) 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // For now, just repaint the whole table. 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Find a better way to do this, e.g., need to repaint all the cells that we 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // might have propagated a background color or borders into. 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // FIXME: check for repaintContainer each time here? 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RenderTable* parentTable = table(); 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!parentTable) 810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return IntRect(); 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return parentTable->clippedOverflowRectForRepaint(repaintContainer); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 85635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid RenderTableCol::imageChanged(WrappedImagePtr, const IntRect*) 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Repaint only the rect the image paints in. 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project repaint(); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 91bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid RenderTableCol::computePreferredLogicalWidths() 920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 93bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen setPreferredLogicalWidthsDirty(false); 940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (RenderObject* child = firstChild(); child; child = child->nextSibling()) 96bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen child->setPreferredLogicalWidthsDirty(false); 970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochRenderTable* RenderTableCol::table() const 1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RenderObject* table = parent(); 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (table && !table->isTable()) 1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch table = table->parent(); 1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return table && table->isTable() ? toRenderTable(table) : 0; 1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 108