📄 render_layer.h
字号:
/*
* Copyright (C) 2003 Apple Computer, Inc.
*
* Portions are Copyright (C) 1998 Netscape Communications Corporation.
*
* Other contributors:
* Robert O'Callahan <roc+@cs.cmu.edu>
* David Baron <dbaron@fas.harvard.edu>
* Christian Biesinger <cbiesinger@web.de>
* Randall Jesup <rjesup@wgate.com>
* Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
* Josh Soref <timeless@mac.com>
* Boris Zbarsky <bzbarsky@mit.edu>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Alternatively, the contents of this file may be used under the terms
* of either the Mozilla Public License Version 1.1, found at
* http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public
* License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html
* (the "GPL"), in which case the provisions of the MPL or the GPL are
* applicable instead of those above. If you wish to allow use of your
* version of this file only under the terms of one of those two
* licenses (the MPL or the GPL) and not to allow others to use your
* version of this file under the LGPL, indicate your decision by
* deletingthe provisions above and replace them with the notice and
* other provisions required by the MPL or the GPL, as the case may be.
* If you do not delete the provisions above, a recipient may use your
* version of this file under any of the LGPL, the MPL or the GPL.
*/
#ifndef render_layer_h
#define render_layer_h
#include <qcolor.h>
#include <qrect.h>
#include <assert.h>
#include "render_object.h"
class QScrollBar;
template <class T> class QPtrVector;
namespace khtml {
class RenderStyle;
class RenderTable;
class CachedObject;
class RenderCanvas;
class RenderText;
class RenderFrameSet;
class RenderObject;
class RenderScrollMediator;
#ifdef NOKIA_CHANGES
class LayerInfo
OOM_MODIFIED
{
public:
int zIndex;
BoxInfo* focusCandidate;
QPoint dotPosition;
int weightedDistance;
QRect focusCandidateRect;
QPtrList<BoxInfo> *boxInfoList;
~LayerInfo(){
if(boxInfoList){
boxInfoList->clear();
}
delete boxInfoList;
boxInfoList = 0;
}
};
#endif
class RenderScrollMediator: public QObject
{
public:
RenderScrollMediator(RenderLayer* layer)
:m_layer(layer) {}
void slotValueChanged(int);
private:
RenderLayer* m_layer;
};
class ClipRects
{
public:
ClipRects(const QRect& r) :m_overflowClipRect(r), m_fixedClipRect(r), m_posClipRect(r), m_refCnt(0) {}
ClipRects(const QRect& o, const QRect& f, const QRect& p)
:m_overflowClipRect(o), m_fixedClipRect(f), m_posClipRect(p), m_refCnt(0) {}
const QRect& overflowClipRect() { return m_overflowClipRect; }
const QRect& fixedClipRect() { return m_fixedClipRect; }
const QRect& posClipRect() { return m_posClipRect; }
void ref() { m_refCnt++; }
void deref(RenderArena* renderArena) { if (--m_refCnt == 0) detach(renderArena); }
void detach(RenderArena* renderArena);
// Overloaded new operator.
void* operator new(size_t sz, RenderArena* renderArena) throw();
// Overridden to prevent the normal delete from being called.
void operator delete(void* ptr, size_t sz);
private:
// The normal operator new is disallowed on all render objects.
void* operator new(size_t sz) throw();
private:
QRect m_overflowClipRect;
QRect m_fixedClipRect;
QRect m_posClipRect;
uint m_refCnt;
};
// This class handles the auto-scrolling of layers with overflow: marquee.
class Marquee: public QObject
{
Q_OBJECT
public:
Marquee(RenderLayer* l);
void timerEvent(QTimerEvent*);
int speed() const { return m_speed; }
int marqueeSpeed() const;
EMarqueeDirection direction() const;
EMarqueeDirection reverseDirection() const { return static_cast<EMarqueeDirection>(-direction()); }
bool isHorizontal() const;
bool isUnfurlMarquee() const;
int unfurlPos() const { return m_unfurlPos; }
EWhiteSpace whiteSpace() { return m_whiteSpace; }
int computePosition(EMarqueeDirection dir, bool stopAtClientEdge);
void setEnd(int end) { m_end = end; }
void start();
void suspend();
void stop();
void updateMarqueeStyle();
void updateMarqueePosition();
private:
RenderLayer* m_layer;
int m_currentLoop;
int m_totalLoops;
int m_timerId;
int m_start;
int m_end;
int m_speed;
int m_unfurlPos;
bool m_reset: 1;
bool m_suspended : 1;
bool m_stopped : 1;
EWhiteSpace m_whiteSpace : 2;
EMarqueeDirection m_direction : 4;
};
class RenderLayer
{
public:
enum ScrollBehavior {
noScroll,
alignCenter,
alignTop,
alignBottom,
alignLeft,
alignRight,
alignToClosestEdge
};
struct ScrollAlignment {
ScrollBehavior m_rectVisible;
ScrollBehavior m_rectHidden;
ScrollBehavior m_rectPartial;
};
static const ScrollAlignment gAlignCenterIfNeeded;
static const ScrollAlignment gAlignToEdgeIfNeeded;
static const ScrollAlignment gAlignCenterAlways;
static const ScrollAlignment gAlignTopAlways;
static const ScrollAlignment gAlignBottomAlways;
static ScrollBehavior getVisibleBehavior(const ScrollAlignment& s) { return s.m_rectVisible; }
static ScrollBehavior getPartialBehavior(const ScrollAlignment& s) { return s.m_rectPartial; }
static ScrollBehavior getHiddenBehavior(const ScrollAlignment& s) { return s.m_rectHidden; }
#ifdef APPLE_CHANGES
static QScrollBar* gScrollBar;
#endif
RenderLayer(RenderObject* object);
~RenderLayer();
RenderObject* renderer() const { return m_object; }
RenderLayer *parent() const { return m_parent; }
RenderLayer *previousSibling() const { return m_previous; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -