1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2009 Google Inc. All rights reserved. 35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 75f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef RenderRubyRun_h 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#define RenderRubyRun_h 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 34643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "RenderBlock.h" 355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { 375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass RenderRubyBase; 39643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass RenderRubyText; 405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// RenderRubyRun are 'inline-block/table' like objects,and wrap a single pairing of a ruby base with its ruby text(s). 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// See RenderRuby.h for further comments on the structure 43643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockclass RenderRubyRun : public RenderBlock { 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockpublic: 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RenderRubyRun(Node*); 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual ~RenderRubyRun(); 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 49643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool hasRubyText() const; 50643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool hasRubyBase() const; 51643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool isEmpty() const; 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RenderRubyText* rubyText() const; 53643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RenderRubyBase* rubyBase() const; 54643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RenderRubyBase* rubyBaseSafe(); // creates the base if it doesn't already exist 555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 564576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang virtual RenderObject* layoutSpecialExcludedChild(bool relayoutChildren); 574576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang virtual void layout(); 584576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool isChildAllowed(RenderObject*, RenderStyle*) const; 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0); 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void removeChild(RenderObject* child); 625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual RenderBlock* firstLineBlock() const; 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual void updateFirstLetter(); 655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void getOverhang(bool firstLine, RenderObject* startRenderer, RenderObject* endRenderer, int& startOverhang, int& endOverhang) const; 672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block static RenderRubyRun* staticCreateRubyRun(const RenderObject* parentRuby); 69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprotected: 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RenderRubyBase* createRubyBase() const; 72d0825bca7fe65beaee391d30da42e937db621564Steve Block 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 74d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual bool isRubyRun() const { return true; } 75d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual const char* renderName() const { return "RenderRubyRun (anonymous)"; } 76d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual bool createsAnonymousWrapper() const { return true; } 77d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void removeLeftoverAnonymousBlock(RenderBlock*) { } 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}; 795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline RenderRubyRun* toRenderRubyRun(RenderObject* object) 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(!object || object->isRubyRun()); 832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return static_cast<RenderRubyRun*>(object); 842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline const RenderRubyRun* toRenderRubyRun(const RenderObject* object) 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(!object || object->isBox()); 892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return static_cast<const RenderRubyRun*>(object); 902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid toRenderRubyRun(const RenderRubyRun*); 932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} // namespace WebCore 955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif // RenderRubyRun_h 97