?? render_style.h
字號:
/*
* This file is part of the DOM implementation for KDE.
*
* Copyright (C) 2000 Lars Knoll (knoll@kde.org)
* (C) 2000 Antti Koivisto (koivisto@kde.org)
* (C) 2000 Dirk Mueller (mueller@kde.org)
* Copyright (C) 2003 Apple Computer, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
#ifndef RENDERSTYLE_H
#define RENDERSTYLE_H
/*
* WARNING:
* --------
*
* The order of the values in the enums have to agree with the order specified
* in cssvalues.in, otherwise some optimizations in the parser will fail,
* and produce invaliud results.
*/
#include <qcolor.h>
#include <qfont.h>
#include <qfontmetrics.h>
#include <qlist.h>
#include <qpalette.h>
#include <qapplication.h>
#include "dom/dom_misc.h"
#include "misc/khtmllayout.h"
#include "misc/shared.h"
#include "rendering/font.h"
#include <assert.h>
#ifdef __WINSCW__
#pragma enumsalwaysint off
#endif
#define SET_VAR(group,variable,value) \
if (!(group->variable == value)) \
group.access()->variable = value;
class RenderArena;
namespace DOM {
class DOMStringImpl;
class ShadowValueImpl;
}
namespace khtml {
class CachedImage;
class CachedObject;
template <class DATA>
class DataRef
OOM_MODIFIED
{
public:
DataRef()
{
data=0;
}
DataRef( const DataRef<DATA> &d )
{
data = d.data;
data->ref();
}
~DataRef()
{
if(data) data->deref();
}
const DATA* operator->() const
{
return data;
}
const DATA* get() const
{
return data;
}
DATA* access()
{
if (!data->hasOneRef())
{
data->deref();
data = new DATA(*data);
data->ref();
}
return data;
}
void init()
{
data = new DATA;
data->ref();
}
DataRef<DATA>& operator=(const DataRef<DATA>& d)
{
if (data==d.data)
return *this;
if (data)
data->deref();
data = d.data;
data->ref();
return *this;
}
bool operator == ( const DataRef<DATA> &o ) const {
return (*data == *(o.data) );
}
bool operator != ( const DataRef<DATA> &o ) const {
return (*data != *(o.data) );
}
private:
DATA* data;
};
enum PseudoState { PseudoUnknown, PseudoNone, PseudoAnyLink, PseudoLink, PseudoVisited};
//------------------------------------------------
//------------------------------------------------
// Box model attributes. Not inherited.
struct LengthBox
{
LengthBox()
{
}
LengthBox( LengthType t )
: left( t ), right ( t ), top( t ), bottom( t ) {}
Length left;
Length right;
Length top;
Length bottom;
Length& operator=(Length& len)
{
left=len;
right=len;
top=len;
bottom=len;
return len;
}
bool operator==(const LengthBox& o) const
{
return left==o.left && right==o.right && top==o.top && bottom==o.bottom;
}
bool nonZero() const { return left.value!=0 || right.value!=0 || top.value!=0 || bottom.value!=0; }
};
enum EPosition {
STATIC, RELATIVE, ABSOLUTE, FIXED
};
enum EFloat {
FNONE = 0, FLEFT, FRIGHT
};
//------------------------------------------------
// Border attributes. Not inherited.
// These have been defined in the order of their precedence for border-collapsing. Do
// not change this order!
enum EBorderStyle {
BNONE, BHIDDEN, INSET, GROOVE, RIDGE, OUTSET, DOTTED, DASHED, SOLID, DOUBLE
};
class BorderValue
OOM_MODIFIED
{
public:
BorderValue()
{
width = 3; // medium is default value
style = BNONE;
}
QColor color;
unsigned short width : 12;
EBorderStyle style : 4;
bool nonZero() const
{
// rikkus: workaround for gcc 2.95.3
return width!=0 && !(style==BNONE);
}
bool isTransparent() const {
return color.isValid() && qAlpha(color.rgb()) == 0;
}
bool operator==(const BorderValue& o) const
{
return width==o.width && style==o.style && color==o.color;
}
bool operator!=(const BorderValue& o) const
{
return !(*this == o);
}
};
class OutlineValue : public BorderValue
{
public:
OutlineValue()
{
_offset = 0;
_auto = false;
}
bool operator==(const OutlineValue& o) const
{
return width==o.width && style==o.style && color==o.color && _offset == o._offset && _auto == o._auto;
}
bool operator!=(const OutlineValue& o) const
{
return !(*this == o);
}
int _offset;
bool _auto;
};
enum EBorderPrecedence { BOFF, BTABLE, BCOLGROUP, BCOL, BROWGROUP, BROW, BCELL };
struct CollapsedBorderValue
{
CollapsedBorderValue() :border(0), precedence(BOFF) {}
CollapsedBorderValue(const BorderValue* b, EBorderPrecedence p) :border(b), precedence(p) {}
int width() const { return border && border->nonZero() ? border->width : 0; }
EBorderStyle style() const { return border ? border->style : BHIDDEN; }
bool exists() const { return border; }
QColor color() const { return border ? border->color : QColor(); }
bool isTransparent() const { return border ? border->isTransparent() : true; }
bool operator==(const CollapsedBorderValue& o) const
{
if (!border) return !o.border;
if (!o.border) return false;
return *border == *o.border && precedence == o.precedence;
}
const BorderValue* border;
EBorderPrecedence precedence;
};
class BorderData
OOM_MODIFIED
{
public:
BorderValue left;
BorderValue right;
BorderValue top;
BorderValue bottom;
bool hasBorder() const
{
return left.nonZero() || right.nonZero() || top.nonZero() || bottom.nonZero();
}
bool operator==(const BorderData& o) const
{
return left==o.left && right==o.right && top==o.top && bottom==o.bottom;
}
};
enum EMarginCollapse { MCOLLAPSE, MSEPARATE, MDISCARD };
class StyleSurroundData : public Shared<StyleSurroundData>
{
public:
StyleSurroundData();
StyleSurroundData(const StyleSurroundData& o );
bool operator==(const StyleSurroundData& o) const;
bool operator!=(const StyleSurroundData& o) const {
return !(*this == o);
}
LengthBox offset;
LengthBox margin;
LengthBox padding;
BorderData border;
};
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -