📄 render_style.h
字号:
bool operator!=( const NonInheritedFlags &other ) const {
return !(*this == other);
}
EDisplay _effectiveDisplay : 5;
EDisplay _originalDisplay : 5;
EBackgroundRepeat _bg_repeat : 2;
EOverflow _overflow : 4 ;
EVerticalAlign _vertical_align : 4;
EClear _clear : 2;
EPosition _position : 2;
EFloat _floating : 2;
ETableLayout _table_layout : 1;
EPageBreak _page_break_before : 2;
EPageBreak _page_break_after : 2;
PseudoId _styleType : 3;
bool _affectedByHover : 1;
bool _affectedByActive : 1;
bool _affectedByDrag : 1;
int _pseudoBits : 6;
EUnicodeBidi _unicodeBidi : 2;
} noninherited_flags;
// non-inherited attributes
DataRef<StyleBoxData> box;
DataRef<StyleVisualData> visual;
DataRef<StyleBackgroundData> background;
DataRef<StyleSurroundData> surround;
DataRef<StyleCSS3NonInheritedData> css3NonInheritedData;
// inherited attributes
DataRef<StyleCSS3InheritedData> css3InheritedData;
DataRef<StyleInheritedData> inherited;
// list of associated pseudo styles
RenderStyle* pseudoStyle;
// added this here, so we can get rid of the vptr in this class.
// makes up for the same size.
ContentData *content;
PseudoState m_pseudoState : 3;
bool m_affectedByAttributeSelectors : 1;
int m_ref;
// !END SYNC!
// static default style
static RenderStyle* _default;
protected:
void setBitDefaults()
{
inherited_flags._empty_cells = initialEmptyCells();
inherited_flags._caption_side = initialCaptionSide();
inherited_flags._list_style_type = initialListStyleType();
inherited_flags._list_style_position = initialListStylePosition();
inherited_flags._visibility = initialVisibility();
inherited_flags._text_align = initialTextAlign();
inherited_flags._text_transform = initialTextTransform();
inherited_flags._text_decorations = initialTextDecoration();
inherited_flags._cursor_style = initialCursor();
inherited_flags._direction = initialDirection();
inherited_flags._border_collapse = initialBorderCollapse();
inherited_flags._white_space = initialWhiteSpace();
inherited_flags._visuallyOrdered = false;
inherited_flags._htmlHacks=false;
inherited_flags._box_direction = initialBoxDirection();
inherited_flags._force_backgrounds_to_white = false;
noninherited_flags._effectiveDisplay = noninherited_flags._originalDisplay = initialDisplay();
noninherited_flags._overflow = initialOverflow();
noninherited_flags._vertical_align = initialVerticalAlign();
noninherited_flags._clear = initialClear();
noninherited_flags._position = initialPosition();
noninherited_flags._floating = initialFloating();
noninherited_flags._table_layout = initialTableLayout();
noninherited_flags._page_break_before = initialPageBreak();
noninherited_flags._page_break_after = initialPageBreak();
noninherited_flags._styleType = NOPSEUDO;
noninherited_flags._affectedByHover = false;
noninherited_flags._affectedByActive = false;
noninherited_flags._affectedByDrag = false;
noninherited_flags._pseudoBits = 0;
noninherited_flags._unicodeBidi = initialUnicodeBidi();
}
public:
RenderStyle();
// used to create the default style.
RenderStyle(bool);
RenderStyle(const RenderStyle&);
~RenderStyle();
void inheritFrom(const RenderStyle* inheritParent);
PseudoId styleType() { return noninherited_flags._styleType; }
RenderStyle* getPseudoStyle(PseudoId pi);
void addPseudoStyle(RenderStyle* pseudo);
bool affectedByHoverRules() const { return noninherited_flags._affectedByHover; }
bool affectedByActiveRules() const { return noninherited_flags._affectedByActive; }
bool affectedByDragRules() const { return noninherited_flags._affectedByDrag; }
void setAffectedByHoverRules(bool b) { noninherited_flags._affectedByHover = b; }
void setAffectedByActiveRules(bool b) { noninherited_flags._affectedByActive = b; }
void setAffectedByDragRules(bool b) { noninherited_flags._affectedByDrag = b; }
bool operator==(const RenderStyle& other) const;
bool isFloating() const { return !(noninherited_flags._floating == FNONE); }
bool hasMargin() const { return surround->margin.nonZero(); }
bool hasBorder() const { return surround->border.hasBorder(); }
bool hasOffset() const { return surround->offset.nonZero(); }
bool hasBackground() const { if (backgroundColor().isValid() && qAlpha(backgroundColor().rgb()) > 0)
return true;
return background->m_background.hasImage(); }
bool hasFixedBackgroundImage() const { return background->m_background.hasFixedImage(); }
bool visuallyOrdered() const { return inherited_flags._visuallyOrdered; }
void setVisuallyOrdered(bool b) { inherited_flags._visuallyOrdered = b; }
bool isStyleAvailable() const;
bool hasPseudoStyle(PseudoId pseudo) const;
void setHasPseudoStyle(PseudoId pseudo);
// attribute getter methods
EDisplay display() const { return noninherited_flags._effectiveDisplay; }
EDisplay originalDisplay() const { return noninherited_flags._originalDisplay; }
Length left() const { return surround->offset.left; }
Length right() const { return surround->offset.right; }
Length top() const { return surround->offset.top; }
Length bottom() const { return surround->offset.bottom; }
EPosition position() const { return noninherited_flags._position; }
EFloat floating() const { return noninherited_flags._floating; }
Length width() const { return box->width; }
Length height() const { return box->height; }
Length minWidth() const { return box->min_width; }
Length maxWidth() const { return box->max_width; }
Length minHeight() const { return box->min_height; }
Length maxHeight() const { return box->max_height; }
const BorderValue& borderLeft() const { return surround->border.left; }
const BorderValue& borderRight() const { return surround->border.right; }
const BorderValue& borderTop() const { return surround->border.top; }
const BorderValue& borderBottom() const { return surround->border.bottom; }
unsigned short borderLeftWidth() const
{ if( surround->border.left.style == BNONE || surround->border.left.style == BHIDDEN) return 0; return surround->border.left.width; }
EBorderStyle borderLeftStyle() const { return surround->border.left.style; }
const QColor & borderLeftColor() const { return surround->border.left.color; }
bool borderLeftIsTransparent() const { return surround->border.left.isTransparent(); }
unsigned short borderRightWidth() const
{ if (surround->border.right.style == BNONE || surround->border.right.style == BHIDDEN) return 0; return surround->border.right.width; }
EBorderStyle borderRightStyle() const { return surround->border.right.style; }
const QColor & borderRightColor() const { return surround->border.right.color; }
bool borderRightIsTransparent() const { return surround->border.right.isTransparent(); }
unsigned short borderTopWidth() const
{ if(surround->border.top.style == BNONE || surround->border.top.style == BHIDDEN) return 0; return surround->border.top.width; }
EBorderStyle borderTopStyle() const {return surround->border.top.style; }
const QColor & borderTopColor() const { return surround->border.top.color; }
bool borderTopIsTransparent() const { return surround->border.top.isTransparent(); }
unsigned short borderBottomWidth() const
{ if(surround->border.bottom.style == BNONE || surround->border.bottom.style == BHIDDEN) return 0; return surround->border.bottom.width; }
EBorderStyle borderBottomStyle() const { return surround->border.bottom.style; }
const QColor & borderBottomColor() const { return surround->border.bottom.color; }
bool borderBottomIsTransparent() const { return surround->border.bottom.isTransparent(); }
unsigned short outlineSize() const { return outlineWidth() + outlineOffset(); }
unsigned short outlineWidth() const { if (background->m_outline.style == BNONE || background->m_outline.style == BHIDDEN) return 0; return background->m_outline.width; }
EBorderStyle outlineStyle() const { return background->m_outline.style; }
bool outlineStyleIsAuto() const { return background->m_outline._auto; }
const QColor & outlineColor() const { return background->m_outline.color; }
EOverflow overflow() const { return noninherited_flags._overflow; }
EVisibility visibility() const { return inherited_flags._visibility; }
EVerticalAlign verticalAlign() const { return noninherited_flags._vertical_align; }
Length verticalAlignLength() const { return box->vertical_align; }
Length clipLeft() const { return visual->clip.left; }
Length clipRight() const { return visual->clip.right; }
Length clipTop() const { return visual->clip.top; }
Length clipBottom() const { return visual->clip.bottom; }
LengthBox clip() const { return visual->clip; }
bool hasClip() const { return visual->hasClip; }
EUnicodeBidi unicodeBidi() const { return noninherited_flags._unicodeBidi; }
EClear clear() const { return noninherited_flags._clear; }
ETableLayout tableLayout() const { return noninherited_flags._table_layout; }
short colSpan() const { return visual->colspan; }
const QFont & font() const { return inherited->font.f; }
// use with care. call font->update() after modifications
const Font &htmlFont() { return inherited->font; }
const QFontMetrics & fontMetrics() const { return inherited->font.fm; }
const QColor & color() const { return inherited->color; }
Length textIndent() const { return inherited->indent; }
ETextAlign textAlign() const { return inherited_flags._text_align; }
ETextTransform textTransform() const { return inherited_flags._text_transform; }
int textDecorationsInEffect() const { return inherited_flags._text_decorations; }
int textDecoration() const { return visual->textDecoration; }
int wordSpacing() const { return inherited->font.wordSpacing; }
int letterSpacing() const { return inherited->font.letterSpacing; }
EDirection direction() const { return inherited_flags._direction; }
Length lineHeight() const { return inherited->line_height; }
EWhiteSpace whiteSpace() const { return inherited_flags._white_space; }
const QColor & backgroundColor() const { return background->m_color; }
CachedImage *backgroundImage() const { return background->m_background.m_image; }
EBackgroundRepeat backgroundRepeat() const { return background->m_background.m_bgRepeat; }
bool backgroundAttachment() const { return background->m_background.m_bgAttachment; }
Length backgroundXPosition() const { return background->m_background.m_xPosition; }
Length backgroundYPosition() const { return background->m_background.m_yPosition; }
BackgroundLayer* accessBackgroundLayers() { return &(background.access()->m_background); }
const BackgroundLayer* backgroundLayers() const { return &(background->m_background); }
// returns true for collapsing borders, false for separate borders
bool borderCollapse() const { return inherited_flags._border_collapse; }
short horizontalBorderSpacing() const { return inherited->horizontal_border_spacing; }
short verticalBorderSpacing() const { return inherited->vertical_border_spacing; }
EEmptyCell emptyCells() const { return inherited_flags._empty_cells; }
ECaptionSide captionSide() const { return inherited_flags._caption_side; }
short counterIncrement() const { return visual->counter_increment; }
short counterReset() const { return visual->counter_reset; }
EListStyleType listStyleType() const { return inherited_flags._list_style_type; }
CachedImage *listStyleImage() const { return inherited->style_image; }
EListStylePosition listStylePosition() const { return inherited_flags._list_style_position; }
Length marginTop() const { return surround->margin.top; }
Length marginBottom() const { return surround->margin.bottom; }
Length marginLeft() const { return surround->margin.left; }
Length marginRight() const { return surround->margin.right; }
Length paddingTop() const { return surround->padding.top; }
Length paddingBottom() const { return surround->padding.bottom; }
Length paddingLeft() const { return surround->padding.left; }
Length paddingRight() const { return surround->padding.right; }
ECursor cursor() const { return inherited_flags._cursor_style; }
CachedImage *cursorImage() const { return inherited->cursor_image; }
short widows() const { return inherited->widows; }
short orphans() const { return inherited->orphans; }
EPageBreak pageBreakInside() const { return inherited->page_break_inside; }
EPageBreak pageBreakBefore() const { return noninherited_flags._page_break_before; }
EPageBreak pageBreakAfter() const { return noninherited_flags._page_break_after; }
// CSS3 Getter Methods
#ifndef KHTML_NO_XBL
BindingURI* bindingURIs() const { return css3NonInheritedData->bindingURI; }
#endif
int outlineOffset() const {
if (background->m_outline.style == BNONE || background->m_outline.style == BHIDDEN) return 0; return background->m_outline._offset;
}
ShadowData* textShadow() const { return css3InheritedData->textShadow; }
float opacity() const { return css3NonInheritedData->opacity; }
EBoxAlignment boxAlign() const { return css3NonInheritedData->flexibleBox->align; }
EBoxDirection boxDirection() const { return inherited_flags._box_direction; }
float boxFlex() { return css3NonInheritedData->flexibleBox->flex; }
unsigned int boxFlexGroup() const { return css3NonInheritedData->flexibleBox->flex_group; }
EBoxLines boxLines() { return css3NonInheritedData->flexibleBox->lines; }
unsigned int boxOrdinalGroup() const { return css3NonInheritedData->flexibleBox->ordinal_group; }
EBoxOrient boxOrient() const { return css3NonInheritedData->flexibleBox->orient; }
EBoxAlignment boxPack() const { return css3NonInheritedData->flexibleBox->pack; }
Length marqueeIncrement() const { return css3NonInheritedData->marquee->increment; }
int marqueeSpeed() const { return css3NonInheritedData->marquee->speed; }
int marqueeLoopCount() const { return css3NonInheritedData->marquee->loops; }
EMarqueeBehavior marqueeBehavior() const { return css3NonInheritedData->marquee->behavior; }
EMarqueeDirection marqueeDirection() const { return css3NonInheritedData->marquee->direction; }
EUserModify userModify() const { return css3InheritedData->userModify; }
EUserDrag userDrag() const { return css3NonInheritedData->userDrag; }
EUserSelect userSelect() const { return css3NonInheritedData->userSelect; }
bool textOverflow() const { return css3NonInheritedData->textOverflow; }
EMarginCollapse marginTopCollapse() const { return css3NonInheritedData->marginTopCollapse; }
EMarginCollapse marginBottomCollapse() const { return css3NonInheritedData->marginBottomCollapse; }
EWordWrap wordWrap() const { return css3InheritedData->wordWrap; }
ENBSPMode nbspMode() const { return css3InheritedData->nbspMode; }
EKHTMLLineBreak khtmlLineBreak() const { return css3InheritedData->khtmlLineBreak; }
EMatchNearestMailBlockquoteColor matchNearestMailBlockquoteColor() const { return css3NonInheritedData->matchNearestMailBlockquoteColor; }
// End CSS3 Getters
#if APPLE_CHANGES
// Apple-specific property getter methods
int lineClamp() const { return css3NonInheritedData->lineClamp; }
bool textSizeAdjust() const { return css3InheritedData->textSizeAdjust; }
#endif
// attribute setter methods
void setDisplay(EDisplay v) { noninherited_flags._effectiveDisplay = v; }
void setOriginalDisplay(EDisplay v) { noninherited_flags._originalDisplay = v; }
void setPosition(EPosition v) { noninherited_flags._position = v; }
void setFloating(EFloat v) { noninherited_flags._floating = v; }
void setLeft(Length v) { SET_VAR(surround,offset.left,v) }
void setRight(Length v) { SET_VAR(surround,offset.right,v) }
void setTop(Length v) { SET_VAR(surround,offset.top,v) }
void setBottom(Length v){ SET_VAR(surround,offset.bottom,v) }
void setWidth(Length v) { SET_VAR(box,width,v) }
void setHeight(Length v) { SET_VAR(box,height,v) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -