зеркало из https://github.com/mozilla/pjs.git
Bug 113083. Concentrate view setup code into a few shared functions in nsContainerFrame. Only change style-dependent view properties after style change, not during reflow, in response to nsChangeHint_SyncFrameView. Change 'clip' to only do SyncFrameView, not reflow. r=dbaron,sr=kin
This commit is contained in:
Родитель
fd1a1dc6b6
Коммит
3681ee88af
|
@ -95,203 +95,203 @@
|
||||||
// support them correctly the old constants need to be renamed and
|
// support them correctly the old constants need to be renamed and
|
||||||
// new ones should be entered.
|
// new ones should be entered.
|
||||||
|
|
||||||
CSS_PROP(-moz-appearance, appearance, MozAppearance, REFLOW)
|
CSS_PROP(-moz-appearance, appearance, MozAppearance, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-border-radius, _moz_border_radius, MozBorderRadius, VISUAL)
|
CSS_PROP(-moz-border-radius, _moz_border_radius, MozBorderRadius, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-topleft, _moz_border_radius_topLeft, MozBorderRadiusTopleft, VISUAL)
|
CSS_PROP(-moz-border-radius-topleft, _moz_border_radius_topLeft, MozBorderRadiusTopleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-topright, _moz_border_radius_topRight, MozBorderRadiusTopright, VISUAL)
|
CSS_PROP(-moz-border-radius-topright, _moz_border_radius_topRight, MozBorderRadiusTopright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-bottomleft, _moz_border_radius_bottomLeft, MozBorderRadiusBottomleft, VISUAL)
|
CSS_PROP(-moz-border-radius-bottomleft, _moz_border_radius_bottomLeft, MozBorderRadiusBottomleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-bottomright, _moz_border_radius_bottomRight, MozBorderRadiusBottomright, VISUAL)
|
CSS_PROP(-moz-border-radius-bottomright, _moz_border_radius_bottomRight, MozBorderRadiusBottomright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius, _moz_outline_radius, MozOutlineRadius, VISUAL)
|
CSS_PROP(-moz-outline-radius, _moz_outline_radius, MozOutlineRadius, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-topleft, _moz_outline_radius_topLeft, MozOutlineRadiusTopleft, VISUAL)
|
CSS_PROP(-moz-outline-radius-topleft, _moz_outline_radius_topLeft, MozOutlineRadiusTopleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-topright, _moz_outline_radius_topRight, MozOutlineRadiusTopright, VISUAL)
|
CSS_PROP(-moz-outline-radius-topright, _moz_outline_radius_topRight, MozOutlineRadiusTopright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-bottomleft, _moz_outline_radius_bottomLeft, MozOutlineRadiusBottomleft, VISUAL)
|
CSS_PROP(-moz-outline-radius-bottomleft, _moz_outline_radius_bottomLeft, MozOutlineRadiusBottomleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-bottomright, _moz_outline_radius_bottomRight, MozOutlineRadiusBottomright, VISUAL)
|
CSS_PROP(-moz-outline-radius-bottomright, _moz_outline_radius_bottomRight, MozOutlineRadiusBottomright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(azimuth, azimuth, Azimuth, AURAL)
|
CSS_PROP(azimuth, azimuth, Azimuth, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(background, background, Background, VISUAL)
|
CSS_PROP(background, background, Background, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-attachment, background_attachment, BackgroundAttachment, FRAMECHANGE)
|
CSS_PROP(background-attachment, background_attachment, BackgroundAttachment, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(background-color, background_color, BackgroundColor, VISUAL)
|
CSS_PROP(background-color, background_color, BackgroundColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-image, background_image, BackgroundImage, VISUAL)
|
CSS_PROP(background-image, background_image, BackgroundImage, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-position, background_position, BackgroundPosition, VISUAL)
|
CSS_PROP(background-position, background_position, BackgroundPosition, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-repeat, background_repeat, BackgroundRepeat, VISUAL)
|
CSS_PROP(background-repeat, background_repeat, BackgroundRepeat, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(-x-background-x-position, background_x_position, BackgroundXPosition, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-background-x-position, background_x_position, BackgroundXPosition, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-background-y-position, background_y_position, BackgroundYPosition, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-background-y-position, background_y_position, BackgroundYPosition, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP(-moz-binding, binding, MozBinding, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-binding, binding, MozBinding, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(border, border, Border, REFLOW)
|
CSS_PROP(border, border, Border, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-bottom, border_bottom, BorderBottom, REFLOW)
|
CSS_PROP(border-bottom, border_bottom, BorderBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-bottom-color, border_bottom_color, BorderBottomColor, VISUAL)
|
CSS_PROP(border-bottom-color, border_bottom_color, BorderBottomColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-bottom-colors, border_bottom_colors, MozBorderBottomColors, VISUAL)
|
CSS_PROP(-moz-border-bottom-colors, border_bottom_colors, MozBorderBottomColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-bottom-style, border_bottom_style, BorderBottomStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-bottom-style, border_bottom_style, BorderBottomStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-bottom-width, border_bottom_width, BorderBottomWidth, REFLOW)
|
CSS_PROP(border-bottom-width, border_bottom_width, BorderBottomWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-collapse, border_collapse, BorderCollapse, FRAMECHANGE)
|
CSS_PROP(border-collapse, border_collapse, BorderCollapse, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(border-color, border_color, BorderColor, VISUAL)
|
CSS_PROP(border-color, border_color, BorderColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-left, border_left, BorderLeft, REFLOW)
|
CSS_PROP(border-left, border_left, BorderLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-left-color, border_left_color, BorderLeftColor, VISUAL)
|
CSS_PROP(border-left-color, border_left_color, BorderLeftColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-left-colors, border_left_colors, MozBorderLeftColors, VISUAL)
|
CSS_PROP(-moz-border-left-colors, border_left_colors, MozBorderLeftColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-left-style, border_left_style, BorderLeftStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-left-style, border_left_style, BorderLeftStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-left-width, border_left_width, BorderLeftWidth, REFLOW)
|
CSS_PROP(border-left-width, border_left_width, BorderLeftWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-right, border_right, BorderRight, REFLOW)
|
CSS_PROP(border-right, border_right, BorderRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-right-color, border_right_color, BorderRightColor, VISUAL)
|
CSS_PROP(border-right-color, border_right_color, BorderRightColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-right-colors, border_right_colors, MozBorderRightColors, VISUAL)
|
CSS_PROP(-moz-border-right-colors, border_right_colors, MozBorderRightColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-right-style, border_right_style, BorderRightStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-right-style, border_right_style, BorderRightStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-right-width, border_right_width, BorderRightWidth, REFLOW)
|
CSS_PROP(border-right-width, border_right_width, BorderRightWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-spacing, border_spacing, BorderSpacing, REFLOW)
|
CSS_PROP(border-spacing, border_spacing, BorderSpacing, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-style, border_style, BorderStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-style, border_style, BorderStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-top, border_top, BorderTop, REFLOW)
|
CSS_PROP(border-top, border_top, BorderTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-top-color, border_top_color, BorderTopColor, VISUAL)
|
CSS_PROP(border-top-color, border_top_color, BorderTopColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-top-colors, border_top_colors, MozBorderTopColors, VISUAL)
|
CSS_PROP(-moz-border-top-colors, border_top_colors, MozBorderTopColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-top-style, border_top_style, BorderTopStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-top-style, border_top_style, BorderTopStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-top-width, border_top_width, BorderTopWidth, REFLOW)
|
CSS_PROP(border-top-width, border_top_width, BorderTopWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-width, border_width, BorderWidth, REFLOW)
|
CSS_PROP(border-width, border_width, BorderWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-border-x-spacing, border_x_spacing, BorderXSpacing, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-border-x-spacing, border_x_spacing, BorderXSpacing, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-border-y-spacing, border_y_spacing, BorderYSpacing, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-border-y-spacing, border_y_spacing, BorderYSpacing, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(bottom, bottom, Bottom, REFLOW)
|
CSS_PROP(bottom, bottom, Bottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-box-align, box_align, MozBoxAlign, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-align, box_align, MozBoxAlign, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-direction, box_direction, MozBoxDirection, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-direction, box_direction, MozBoxDirection, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-flex, box_flex, MozBoxFlex, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-flex, box_flex, MozBoxFlex, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-flex-group, box_flex_group, MozBoxFlexGroup, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-flex-group, box_flex_group, MozBoxFlexGroup, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-orient, box_orient, MozBoxOrient, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-orient, box_orient, MozBoxOrient, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-pack, box_pack, MozBoxPack, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-pack, box_pack, MozBoxPack, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-sizing, box_sizing, MozBoxSizing, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-sizing, box_sizing, MozBoxSizing, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-ordinal-group, box_ordinal_group, MozBoxOrdinalGroup, FRAMECHANGE)
|
CSS_PROP(-moz-box-ordinal-group, box_ordinal_group, MozBoxOrdinalGroup, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(caption-side, caption_side, CaptionSide, REFLOW)
|
CSS_PROP(caption-side, caption_side, CaptionSide, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(clear, clear, Clear, REFLOW)
|
CSS_PROP(clear, clear, Clear, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(clip, clip, Clip, REFLOW)
|
CSS_PROP(clip, clip, Clip, nsChangeHint_SyncFrameView)
|
||||||
CSS_PROP_INTERNAL(-x-clip-bottom, clip_bottom, ClipBottom, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-bottom, clip_bottom, ClipBottom, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-clip-left, clip_left, ClipLeft, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-left, clip_left, ClipLeft, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-clip-right, clip_right, ClipRight, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-right, clip_right, ClipRight, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-clip-top, clip_top, ClipTop, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-top, clip_top, ClipTop, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP(color, color, Color, VISUAL)
|
CSS_PROP(color, color, Color, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(content, content, Content, FRAMECHANGE)
|
CSS_PROP(content, content, Content, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(counter-increment, counter_increment, CounterIncrement, REFLOW)
|
CSS_PROP(counter-increment, counter_increment, CounterIncrement, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(counter-reset, counter_reset, CounterReset, REFLOW)
|
CSS_PROP(counter-reset, counter_reset, CounterReset, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-counter-increment, _moz_counter_increment, MozCounterIncrement, REFLOW) // XXX bug 137285
|
CSS_PROP(-moz-counter-increment, _moz_counter_increment, MozCounterIncrement, NS_STYLE_HINT_REFLOW) // XXX bug 137285
|
||||||
CSS_PROP(-moz-counter-reset, _moz_counter_reset, MozCounterReset, REFLOW) // XXX bug 137285
|
CSS_PROP(-moz-counter-reset, _moz_counter_reset, MozCounterReset, NS_STYLE_HINT_REFLOW) // XXX bug 137285
|
||||||
CSS_PROP(cue, cue, Cue, AURAL)
|
CSS_PROP(cue, cue, Cue, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(cue-after, cue_after, CueAfter, AURAL)
|
CSS_PROP(cue-after, cue_after, CueAfter, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(cue-before, cue_before, CueBefore, AURAL)
|
CSS_PROP(cue-before, cue_before, CueBefore, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(cursor, cursor, Cursor, VISUAL)
|
CSS_PROP(cursor, cursor, Cursor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(direction, direction, Direction, REFLOW)
|
CSS_PROP(direction, direction, Direction, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(display, display, Display, FRAMECHANGE)
|
CSS_PROP(display, display, Display, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(elevation, elevation, Elevation, AURAL)
|
CSS_PROP(elevation, elevation, Elevation, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(empty-cells, empty_cells, EmptyCells, VISUAL)
|
CSS_PROP(empty-cells, empty_cells, EmptyCells, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(float, float, CssFloat, FRAMECHANGE)
|
CSS_PROP(float, float, CssFloat, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(-moz-float-edge, float_edge, MozFloatEdge, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-float-edge, float_edge, MozFloatEdge, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(font, font, Font, REFLOW)
|
CSS_PROP(font, font, Font, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-family, font_family, FontFamily, REFLOW)
|
CSS_PROP(font-family, font_family, FontFamily, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-size, font_size, FontSize, REFLOW)
|
CSS_PROP(font-size, font_size, FontSize, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-size-adjust, font_size_adjust, FontSizeAdjust, REFLOW)
|
CSS_PROP(font-size-adjust, font_size_adjust, FontSizeAdjust, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-stretch, font_stretch, FontStretch, REFLOW)
|
CSS_PROP(font-stretch, font_stretch, FontStretch, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-style, font_style, FontStyle, REFLOW)
|
CSS_PROP(font-style, font_style, FontStyle, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-variant, font_variant, FontVariant, REFLOW)
|
CSS_PROP(font-variant, font_variant, FontVariant, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-weight, font_weight, FontWeight, REFLOW)
|
CSS_PROP(font-weight, font_weight, FontWeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-force-broken-image-icon, force_broken_image_icon, MozForceBrokenImageIcon, FRAMECHANGE) // bug 58646
|
CSS_PROP(-moz-force-broken-image-icon, force_broken_image_icon, MozForceBrokenImageIcon, NS_STYLE_HINT_FRAMECHANGE) // bug 58646
|
||||||
CSS_PROP(height, height, Height, REFLOW)
|
CSS_PROP(height, height, Height, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-image-region, image_region, MozImageRegion, REFLOW)
|
CSS_PROP(-moz-image-region, image_region, MozImageRegion, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-bottom, image_region_bottom, MozImageRegionBottom, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-bottom, image_region_bottom, MozImageRegionBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-left, image_region_left, MozImageRegionLeft, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-left, image_region_left, MozImageRegionLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-right, image_region_right, MozImageRegionRight, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-right, image_region_right, MozImageRegionRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-top, image_region_top, MozImageRegionTop, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-top, image_region_top, MozImageRegionTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-key-equivalent, key_equivalent, MozKeyEquivalent, CONTENT) // This will need some other notification, but what? // XXX bug 3935
|
CSS_PROP(-moz-key-equivalent, key_equivalent, MozKeyEquivalent, NS_STYLE_HINT_CONTENT) // This will need some other notification, but what? // XXX bug 3935
|
||||||
CSS_PROP(left, left, Left, REFLOW)
|
CSS_PROP(left, left, Left, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(letter-spacing, letter_spacing, LetterSpacing, REFLOW)
|
CSS_PROP(letter-spacing, letter_spacing, LetterSpacing, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(line-height, line_height, LineHeight, REFLOW)
|
CSS_PROP(line-height, line_height, LineHeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style, list_style, ListStyle, REFLOW)
|
CSS_PROP(list-style, list_style, ListStyle, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style-image, list_style_image, ListStyleImage, REFLOW)
|
CSS_PROP(list-style-image, list_style_image, ListStyleImage, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style-position, list_style_position, ListStylePosition, REFLOW)
|
CSS_PROP(list-style-position, list_style_position, ListStylePosition, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style-type, list_style_type, ListStyleType, REFLOW)
|
CSS_PROP(list-style-type, list_style_type, ListStyleType, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin, margin, Margin, REFLOW)
|
CSS_PROP(margin, margin, Margin, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-bottom, margin_bottom, MarginBottom, REFLOW)
|
CSS_PROP(margin-bottom, margin_bottom, MarginBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-left, margin_left, MarginLeft, REFLOW)
|
CSS_PROP(margin-left, margin_left, MarginLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-right, margin_right, MarginRight, REFLOW)
|
CSS_PROP(margin-right, margin_right, MarginRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-top, margin_top, MarginTop, REFLOW)
|
CSS_PROP(margin-top, margin_top, MarginTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(marker-offset, marker_offset, MarkerOffset, REFLOW)
|
CSS_PROP(marker-offset, marker_offset, MarkerOffset, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(marks, marks, Marks, VISUAL)
|
CSS_PROP(marks, marks, Marks, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(max-height, max_height, MaxHeight, REFLOW)
|
CSS_PROP(max-height, max_height, MaxHeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(max-width, max_width, MaxWidth, REFLOW)
|
CSS_PROP(max-width, max_width, MaxWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(min-height, min_height, MinHeight, REFLOW)
|
CSS_PROP(min-height, min_height, MinHeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(min-width, min_width, MinWidth, REFLOW)
|
CSS_PROP(min-width, min_width, MinWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-opacity, opacity, MozOpacity, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-opacity, opacity, MozOpacity, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(orphans, orphans, Orphans, REFLOW)
|
CSS_PROP(orphans, orphans, Orphans, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(outline, outline, Outline, VISUAL)
|
CSS_PROP(outline, outline, Outline, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(outline, outline_color, OutlineColor, VISUAL)
|
CSS_PROP(outline, outline_color, OutlineColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(outline, outline_style, OutlineStyle, VISUAL)
|
CSS_PROP(outline, outline_style, OutlineStyle, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(outline, outline_width, OutlineWidth, VISUAL)
|
CSS_PROP(outline, outline_width, OutlineWidth, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline, _moz_outline, MozOutline, VISUAL) // XXX This is temporary fix for nsbeta3+ Bug 48973, turning outline into -moz-outline XXX bug 48973
|
CSS_PROP(-moz-outline, _moz_outline, MozOutline, NS_STYLE_HINT_VISUAL) // XXX This is temporary fix for nsbeta3+ Bug 48973, turning outline into -moz-outline XXX bug 48973
|
||||||
CSS_PROP(-moz-outline-color, _moz_outline_color, MozOutlineColor, VISUAL) // XXX bug 48973
|
CSS_PROP(-moz-outline-color, _moz_outline_color, MozOutlineColor, NS_STYLE_HINT_VISUAL) // XXX bug 48973
|
||||||
CSS_PROP(-moz-outline-style, _moz_outline_style, MozOutlineStyle, VISUAL) // XXX bug 48973
|
CSS_PROP(-moz-outline-style, _moz_outline_style, MozOutlineStyle, NS_STYLE_HINT_VISUAL) // XXX bug 48973
|
||||||
CSS_PROP(-moz-outline-width, _moz_outline_width, MozOutlineWidth, VISUAL) // XXX bug 48973
|
CSS_PROP(-moz-outline-width, _moz_outline_width, MozOutlineWidth, NS_STYLE_HINT_VISUAL) // XXX bug 48973
|
||||||
CSS_PROP(overflow, overflow, Overflow, FRAMECHANGE)
|
CSS_PROP(overflow, overflow, Overflow, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(padding, padding, Padding, REFLOW)
|
CSS_PROP(padding, padding, Padding, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-bottom, padding_bottom, PaddingBottom, REFLOW)
|
CSS_PROP(padding-bottom, padding_bottom, PaddingBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-left, padding_left, PaddingLeft, REFLOW)
|
CSS_PROP(padding-left, padding_left, PaddingLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-right, padding_right, PaddingRight, REFLOW)
|
CSS_PROP(padding-right, padding_right, PaddingRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-top, padding_top, PaddingTop, REFLOW)
|
CSS_PROP(padding-top, padding_top, PaddingTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page, page, Page, REFLOW)
|
CSS_PROP(page, page, Page, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page-break-after, page_break_after, PageBreakAfter, REFLOW)
|
CSS_PROP(page-break-after, page_break_after, PageBreakAfter, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page-break-before, page_break_before, PageBreakBefore, REFLOW)
|
CSS_PROP(page-break-before, page_break_before, PageBreakBefore, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page-break-inside, page_break_inside, PageBreakInside, REFLOW)
|
CSS_PROP(page-break-inside, page_break_inside, PageBreakInside, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(pause, pause, Pause, AURAL)
|
CSS_PROP(pause, pause, Pause, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pause-after, pause_after, PauseAfter, AURAL)
|
CSS_PROP(pause-after, pause_after, PauseAfter, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pause-before, pause_before, PauseBefore, AURAL)
|
CSS_PROP(pause-before, pause_before, PauseBefore, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pitch, pitch, Pitch, AURAL)
|
CSS_PROP(pitch, pitch, Pitch, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pitch-range, pitch_range, PitchRange, AURAL)
|
CSS_PROP(pitch-range, pitch_range, PitchRange, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(play-during, play_during, PlayDuring, AURAL)
|
CSS_PROP(play-during, play_during, PlayDuring, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP_INTERNAL(-x-play-during-flags, play_during_flags, PlayDuringFlags, AURAL) // XXX why is this here?
|
CSS_PROP_INTERNAL(-x-play-during-flags, play_during_flags, PlayDuringFlags, NS_STYLE_HINT_AURAL) // XXX why is this here?
|
||||||
CSS_PROP(position, position, Position, FRAMECHANGE)
|
CSS_PROP(position, position, Position, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(quotes, quotes, Quotes, REFLOW)
|
CSS_PROP(quotes, quotes, Quotes, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-quotes-close, quotes_close, QuotesClose, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-quotes-close, quotes_close, QuotesClose, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-quotes-open, quotes_open, QuotesOpen, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-quotes-open, quotes_open, QuotesOpen, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-resizer, resizer, MozResizer, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-resizer, resizer, MozResizer, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(richness, richness, Richness, AURAL)
|
CSS_PROP(richness, richness, Richness, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(right, right, Right, REFLOW)
|
CSS_PROP(right, right, Right, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(size, size, Size, REFLOW)
|
CSS_PROP(size, size, Size, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-size-height, size_height, SizeHeight, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-size-height, size_height, SizeHeight, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-size-width, size_width, SizeWidth, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-size-width, size_width, SizeWidth, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(speak, speak, Speak, AURAL)
|
CSS_PROP(speak, speak, Speak, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speak-header, speak_header, SpeakHeader, AURAL)
|
CSS_PROP(speak-header, speak_header, SpeakHeader, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speak-numeral, speak_numeral, SpeakNumeral, AURAL)
|
CSS_PROP(speak-numeral, speak_numeral, SpeakNumeral, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speak-punctuation, speak_punctuation, SpeakPunctuation, AURAL)
|
CSS_PROP(speak-punctuation, speak_punctuation, SpeakPunctuation, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speech-rate, speech_rate, SpeechRate, AURAL)
|
CSS_PROP(speech-rate, speech_rate, SpeechRate, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(stress, stress, Stress, AURAL)
|
CSS_PROP(stress, stress, Stress, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(table-layout, table_layout, TableLayout, REFLOW)
|
CSS_PROP(table-layout, table_layout, TableLayout, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(text-align, text_align, TextAlign, REFLOW)
|
CSS_PROP(text-align, text_align, TextAlign, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(text-decoration, text_decoration, TextDecoration, VISUAL)
|
CSS_PROP(text-decoration, text_decoration, TextDecoration, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(text-indent, text_indent, TextIndent, REFLOW)
|
CSS_PROP(text-indent, text_indent, TextIndent, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(text-shadow, text_shadow, TextShadow, VISUAL)
|
CSS_PROP(text-shadow, text_shadow, TextShadow, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-color, text_shadow_color, TextShadowColor, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-color, text_shadow_color, TextShadowColor, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-radius, text_shadow_radius, TextShadowRadius, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-radius, text_shadow_radius, TextShadowRadius, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-x, text_shadow_x, TextShadowX, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-x, text_shadow_x, TextShadowX, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-y, text_shadow_y, TextShadowY, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-y, text_shadow_y, TextShadowY, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP(text-transform, text_transform, TextTransform, REFLOW)
|
CSS_PROP(text-transform, text_transform, TextTransform, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(top, top, Top, REFLOW)
|
CSS_PROP(top, top, Top, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(unicode-bidi, unicode_bidi, UnicodeBidi, REFLOW)
|
CSS_PROP(unicode-bidi, unicode_bidi, UnicodeBidi, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-user-focus, user_focus, MozUserFocus, CONTENT) // XXX bug 3935
|
CSS_PROP(-moz-user-focus, user_focus, MozUserFocus, NS_STYLE_HINT_CONTENT) // XXX bug 3935
|
||||||
CSS_PROP(-moz-user-input, user_input, MozUserInput, FRAMECHANGE) // XXX ??? // XXX bug 3935
|
CSS_PROP(-moz-user-input, user_input, MozUserInput, NS_STYLE_HINT_FRAMECHANGE) // XXX ??? // XXX bug 3935
|
||||||
CSS_PROP(-moz-user-modify, user_modify, MozUserModify, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-user-modify, user_modify, MozUserModify, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(-moz-user-select, user_select, MozUserSelect, CONTENT) // XXX bug 3935
|
CSS_PROP(-moz-user-select, user_select, MozUserSelect, NS_STYLE_HINT_CONTENT) // XXX bug 3935
|
||||||
CSS_PROP(vertical-align, vertical_align, VerticalAlign, REFLOW)
|
CSS_PROP(vertical-align, vertical_align, VerticalAlign, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(visibility, visibility, Visibility, REFLOW) // reflow for collapse
|
CSS_PROP(visibility, visibility, Visibility, NS_STYLE_HINT_REFLOW) // reflow for collapse
|
||||||
CSS_PROP(voice-family, voice_family, VoiceFamily, AURAL)
|
CSS_PROP(voice-family, voice_family, VoiceFamily, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(volume, volume, Volume, AURAL)
|
CSS_PROP(volume, volume, Volume, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(white-space, white_space, WhiteSpace, REFLOW)
|
CSS_PROP(white-space, white_space, WhiteSpace, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(widows, widows, Widows, REFLOW)
|
CSS_PROP(widows, widows, Widows, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(width, width, Width, REFLOW)
|
CSS_PROP(width, width, Width, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(word-spacing, word_spacing, WordSpacing, REFLOW)
|
CSS_PROP(word-spacing, word_spacing, WordSpacing, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(z-index, z_index, ZIndex, REFLOW)
|
CSS_PROP(z-index, z_index, ZIndex, NS_STYLE_HINT_REFLOW)
|
||||||
#ifdef MOZ_SVG
|
#ifdef MOZ_SVG
|
||||||
// XXX treat SVG's CSS Properties as internal for now.
|
// XXX treat SVG's CSS Properties as internal for now.
|
||||||
// Do we want to create an nsIDOMSVGCSS2Properties interface?
|
// Do we want to create an nsIDOMSVGCSS2Properties interface?
|
||||||
CSS_PROP_INTERNAL(fill, fill, Fill, VISUAL)
|
CSS_PROP_INTERNAL(fill, fill, Fill, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(fill-opacity, fill_opacity, FillOpacity, VISUAL)
|
CSS_PROP_INTERNAL(fill-opacity, fill_opacity, FillOpacity, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(fill-rule, fill_rule, FillRule, VISUAL)
|
CSS_PROP_INTERNAL(fill-rule, fill_rule, FillRule, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke, stroke, Stroke, VISUAL)
|
CSS_PROP_INTERNAL(stroke, stroke, Stroke, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-dasharray, stroke_dasharray, StrokeDasharray, VISUAL)
|
CSS_PROP_INTERNAL(stroke-dasharray, stroke_dasharray, StrokeDasharray, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-dashoffset, stroke_dashoffset, StrokeDashoffset, VISUAL)
|
CSS_PROP_INTERNAL(stroke-dashoffset, stroke_dashoffset, StrokeDashoffset, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-linecap, stroke_linecap, StrokeLinecap, VISUAL)
|
CSS_PROP_INTERNAL(stroke-linecap, stroke_linecap, StrokeLinecap, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-linejoin, stroke_linejoin, StrokeLinejoin, VISUAL)
|
CSS_PROP_INTERNAL(stroke-linejoin, stroke_linejoin, StrokeLinejoin, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-miterlimit, stroke_miterlimit, StrokeMiterlimit, VISUAL)
|
CSS_PROP_INTERNAL(stroke-miterlimit, stroke_miterlimit, StrokeMiterlimit, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-opacity, stroke_opacity, StrokeOpacity, VISUAL)
|
CSS_PROP_INTERNAL(stroke-opacity, stroke_opacity, StrokeOpacity, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-width, stroke_width, StrokeWidth, VISUAL)
|
CSS_PROP_INTERNAL(stroke-width, stroke_width, StrokeWidth, NS_STYLE_HINT_VISUAL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Clean up after ourselves
|
// Clean up after ourselves
|
||||||
|
|
|
@ -79,6 +79,11 @@ inline nsChangeHint NS_CombineHint(nsChangeHint aH1, nsChangeHint aH2) {
|
||||||
return (nsChangeHint)(aH1 | aH2);
|
return (nsChangeHint)(aH1 | aH2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Merge two hints, taking the union
|
||||||
|
inline nsChangeHint NS_SubtractHint(nsChangeHint aH1, nsChangeHint aH2) {
|
||||||
|
return (nsChangeHint)(aH1 & ~aH2);
|
||||||
|
}
|
||||||
|
|
||||||
// Merge the "src" hint into the "dst" hint
|
// Merge the "src" hint into the "dst" hint
|
||||||
// Returns true iff the destination changed
|
// Returns true iff the destination changed
|
||||||
inline PRBool NS_UpdateHint(nsChangeHint& aDest, nsChangeHint aSrc) {
|
inline PRBool NS_UpdateHint(nsChangeHint& aDest, nsChangeHint aSrc) {
|
||||||
|
|
|
@ -1286,7 +1286,7 @@ PRBool nsCSSProps::GetColorName(PRInt32 aPropValue, nsCString &aStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// define array of all CSS property hints
|
// define array of all CSS property hints
|
||||||
#define CSS_PROP(_name, _id, _method, _hint) NS_STYLE_HINT_##_hint,
|
#define CSS_PROP(_name, _id, _method, _hint) _hint,
|
||||||
const nsChangeHint nsCSSProps::kHintTable[eCSSProperty_COUNT] = {
|
const nsChangeHint nsCSSProps::kHintTable[eCSSProperty_COUNT] = {
|
||||||
#include "nsCSSPropList.h"
|
#include "nsCSSPropList.h"
|
||||||
};
|
};
|
||||||
|
|
|
@ -1049,23 +1049,28 @@ nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
|
||||||
|
|
||||||
nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
|
nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
|
||||||
{
|
{
|
||||||
if (mBinding != aOther.mBinding || mPosition != aOther.mPosition)
|
nsChangeHint hint = nsChangeHint_None;
|
||||||
return NS_STYLE_HINT_FRAMECHANGE;
|
|
||||||
|
|
||||||
if ((mDisplay == aOther.mDisplay) &&
|
if (mBinding != aOther.mBinding
|
||||||
(mFloats == aOther.mFloats) &&
|
|| mPosition != aOther.mPosition
|
||||||
(mOverflow == aOther.mOverflow)) {
|
|| mDisplay != aOther.mDisplay
|
||||||
if ((mBreakType == aOther.mBreakType) &&
|
|| mFloats != aOther.mFloats
|
||||||
(mBreakBefore == aOther.mBreakBefore) &&
|
|| mOverflow != aOther.mOverflow)
|
||||||
(mBreakAfter == aOther.mBreakAfter) &&
|
NS_UpdateHint(hint, nsChangeHint_ReconstructFrame);
|
||||||
(mClipFlags == aOther.mClipFlags) &&
|
|
||||||
(mClip == aOther.mClip) &&
|
// XXX the following is conservative, for now: changing float breaking shouldn't
|
||||||
(mAppearance == aOther.mAppearance)) {
|
// necessarily require a repaint, reflow should suffice.
|
||||||
return NS_STYLE_HINT_NONE;
|
if (mBreakType != aOther.mBreakType
|
||||||
}
|
|| mBreakBefore != aOther.mBreakBefore
|
||||||
return NS_STYLE_HINT_REFLOW;
|
|| mBreakAfter != aOther.mBreakAfter
|
||||||
}
|
|| mAppearance != aOther.mAppearance)
|
||||||
return NS_STYLE_HINT_FRAMECHANGE;
|
NS_UpdateHint(hint, NS_CombineHint(nsChangeHint_ReflowFrame, nsChangeHint_RepaintFrame));
|
||||||
|
|
||||||
|
if (mClipFlags != aOther.mClipFlags
|
||||||
|
|| mClip != aOther.mClip)
|
||||||
|
NS_UpdateHint(hint, nsChangeHint_SyncFrameView);
|
||||||
|
|
||||||
|
return hint;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------
|
// --------------------
|
||||||
|
|
|
@ -9930,111 +9930,13 @@ static PRBool gInApplyRenderingChangeToTree = PR_FALSE;
|
||||||
static void
|
static void
|
||||||
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager);
|
nsIViewManager* aViewManager,
|
||||||
|
nsChangeHint aChange);
|
||||||
static void
|
|
||||||
SyncAndInvalidateView(nsIPresContext* aPresContext,
|
|
||||||
nsIView* aView,
|
|
||||||
nsIFrame* aFrame,
|
|
||||||
nsIViewManager* aViewManager)
|
|
||||||
{
|
|
||||||
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
|
||||||
"should only be called within ApplyRenderingChangeToTree");
|
|
||||||
|
|
||||||
const nsStyleBackground* bg;
|
|
||||||
const nsStyleDisplay* disp;
|
|
||||||
const nsStyleVisibility* vis;
|
|
||||||
PRBool isCanvas;
|
|
||||||
PRBool hasBG =
|
|
||||||
nsCSSRendering::FindBackground(aPresContext, aFrame, &bg, &isCanvas);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&) disp);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Visibility, (const nsStyleStruct*&) vis);
|
|
||||||
|
|
||||||
aViewManager->SetViewOpacity(aView, vis->mOpacity);
|
|
||||||
|
|
||||||
// See if the view should be hidden or visible
|
|
||||||
PRBool viewIsVisible = PR_TRUE;
|
|
||||||
PRBool viewHasTransparentContent =
|
|
||||||
!isCanvas &&
|
|
||||||
(!hasBG ||
|
|
||||||
(bg->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT));
|
|
||||||
|
|
||||||
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
else if (NS_STYLE_VISIBILITY_HIDDEN == vis->mVisible) {
|
|
||||||
// If it has a widget, hide the view because the widget can't deal with it
|
|
||||||
nsIWidget* widget = nsnull;
|
|
||||||
aView->GetWidget(widget);
|
|
||||||
if (widget) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
NS_RELEASE(widget);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// If it's a scroll frame, then hide the view. This means that
|
|
||||||
// child elements can't override their parent's visibility, but
|
|
||||||
// it's not practical to leave it visible in all cases because
|
|
||||||
// the scrollbars will be showing
|
|
||||||
nsIAtom* frameType;
|
|
||||||
aFrame->GetFrameType(&frameType);
|
|
||||||
|
|
||||||
if (frameType == nsLayoutAtoms::scrollFrame) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
} else {
|
|
||||||
// If it's a container element, then leave the view visible, but
|
|
||||||
// mark it as having transparent content. The reason we need to
|
|
||||||
// do this is that child elements can override their parent's
|
|
||||||
// hidden visibility and be visible anyway
|
|
||||||
nsIFrame* firstChild;
|
|
||||||
|
|
||||||
aFrame->FirstChild(aPresContext, nsnull, &firstChild);
|
|
||||||
if (firstChild) {
|
|
||||||
// It's not a left frame, so the view needs to be visible, but
|
|
||||||
// marked as having transparent content
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
} else {
|
|
||||||
// It's a leaf frame so go ahead and hide the view
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
NS_IF_RELEASE(frameType);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// if the view is for a popup, don't show the view if the popup is closed
|
|
||||||
nsCOMPtr<nsIWidget> widget;
|
|
||||||
aView->GetWidget(*getter_AddRefs(widget));
|
|
||||||
if (widget) {
|
|
||||||
nsWindowType windowType;
|
|
||||||
widget->GetWindowType(windowType);
|
|
||||||
if (windowType == eWindowType_popup)
|
|
||||||
widget->IsVisible(viewIsVisible);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the frame has visible content that overflows the content area, then we
|
|
||||||
// need the view marked as having transparent content
|
|
||||||
if (NS_STYLE_OVERFLOW_VISIBLE == disp->mOverflow) {
|
|
||||||
nsFrameState frameState;
|
|
||||||
|
|
||||||
aFrame->GetFrameState(&frameState);
|
|
||||||
if (frameState & NS_FRAME_OUTSIDE_CHILDREN) {
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (viewIsVisible) {
|
|
||||||
aViewManager->SetViewContentTransparency(aView, viewHasTransparentContent);
|
|
||||||
aViewManager->SetViewVisibility(aView, nsViewVisibility_kShow);
|
|
||||||
aViewManager->UpdateView(aView, NS_VMREFRESH_NO_SYNC);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
aViewManager->SetViewVisibility(aView, nsViewVisibility_kHide);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager, nsRect& aBoundsRect)
|
nsIViewManager* aViewManager, nsRect& aBoundsRect,
|
||||||
|
nsChangeHint aChange)
|
||||||
{
|
{
|
||||||
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
||||||
"should only be called within ApplyRenderingChangeToTree");
|
"should only be called within ApplyRenderingChangeToTree");
|
||||||
|
@ -10043,7 +9945,12 @@ UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
aFrame->GetView(aPresContext, &view);
|
aFrame->GetView(aPresContext, &view);
|
||||||
|
|
||||||
if (view) {
|
if (view) {
|
||||||
SyncAndInvalidateView(aPresContext, view, aFrame, aViewManager);
|
if (aChange & nsChangeHint_RepaintFrame) {
|
||||||
|
aViewManager->UpdateView(view, NS_VMREFRESH_NO_SYNC);
|
||||||
|
}
|
||||||
|
if (aChange & nsChangeHint_SyncFrameView) {
|
||||||
|
nsContainerFrame::SyncFrameViewProperties(aPresContext, aFrame, nsnull, view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRect bounds;
|
nsRect bounds;
|
||||||
|
@ -10071,11 +9978,11 @@ UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
nsIFrame* outOfFlowFrame = ((nsPlaceholderFrame*)child)->GetOutOfFlowFrame();
|
nsIFrame* outOfFlowFrame = ((nsPlaceholderFrame*)child)->GetOutOfFlowFrame();
|
||||||
NS_ASSERTION(outOfFlowFrame, "no out-of-flow frame");
|
NS_ASSERTION(outOfFlowFrame, "no out-of-flow frame");
|
||||||
|
|
||||||
DoApplyRenderingChangeToTree(aPresContext, outOfFlowFrame, aViewManager);
|
DoApplyRenderingChangeToTree(aPresContext, outOfFlowFrame, aViewManager, aChange);
|
||||||
}
|
}
|
||||||
else { // regular frame
|
else { // regular frame
|
||||||
nsRect childBounds;
|
nsRect childBounds;
|
||||||
UpdateViewsForTree(aPresContext, child, aViewManager, childBounds);
|
UpdateViewsForTree(aPresContext, child, aViewManager, childBounds, aChange);
|
||||||
bounds.UnionRect(bounds, childBounds);
|
bounds.UnionRect(bounds, childBounds);
|
||||||
}
|
}
|
||||||
NS_IF_RELEASE(frameType);
|
NS_IF_RELEASE(frameType);
|
||||||
|
@ -10093,7 +10000,8 @@ UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
static void
|
static void
|
||||||
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager)
|
nsIViewManager* aViewManager,
|
||||||
|
nsChangeHint aChange)
|
||||||
{
|
{
|
||||||
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
||||||
"should only be called within ApplyRenderingChangeToTree");
|
"should only be called within ApplyRenderingChangeToTree");
|
||||||
|
@ -10114,9 +10022,9 @@ DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
aFrame->GetOffsetFromView(aPresContext, viewOffset, &parentView);
|
aFrame->GetOffsetFromView(aPresContext, viewOffset, &parentView);
|
||||||
NS_ASSERTION(nsnull != parentView, "no view");
|
NS_ASSERTION(nsnull != parentView, "no view");
|
||||||
}
|
}
|
||||||
UpdateViewsForTree(aPresContext, aFrame, aViewManager, invalidRect);
|
UpdateViewsForTree(aPresContext, aFrame, aViewManager, invalidRect, aChange);
|
||||||
|
|
||||||
if (! view) { // if frame has view, will already be invalidated
|
if (! view && (aChange & nsChangeHint_RepaintFrame)) { // if frame has view, will already be invalidated
|
||||||
// XXX Instead of calling this we should really be calling
|
// XXX Instead of calling this we should really be calling
|
||||||
// Invalidate on on the nsFrame (which does this)
|
// Invalidate on on the nsFrame (which does this)
|
||||||
const nsStyleOutline* outline;
|
const nsStyleOutline* outline;
|
||||||
|
@ -10138,14 +10046,20 @@ DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
static void
|
static void
|
||||||
ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager)
|
nsIViewManager* aViewManager,
|
||||||
|
nsChangeHint aChange)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIPresShell> shell;
|
nsCOMPtr<nsIPresShell> shell;
|
||||||
aPresContext->GetShell(getter_AddRefs(shell));
|
aPresContext->GetShell(getter_AddRefs(shell));
|
||||||
PRBool isPaintingSuppressed = PR_FALSE;
|
PRBool isPaintingSuppressed = PR_FALSE;
|
||||||
shell->IsPaintingSuppressed(&isPaintingSuppressed);
|
shell->IsPaintingSuppressed(&isPaintingSuppressed);
|
||||||
if (isPaintingSuppressed)
|
if (isPaintingSuppressed) {
|
||||||
return; // Don't allow synchronous rendering changes when painting is turned off.
|
// Don't allow synchronous rendering changes when painting is turned off.
|
||||||
|
aChange = NS_SubtractHint(aChange, nsChangeHint_RepaintFrame);
|
||||||
|
if (!aChange) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If the frame's background is propagated to an ancestor, walk up to
|
// If the frame's background is propagated to an ancestor, walk up to
|
||||||
// that ancestor.
|
// that ancestor.
|
||||||
|
@ -10179,7 +10093,7 @@ ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
gInApplyRenderingChangeToTree = PR_TRUE;
|
gInApplyRenderingChangeToTree = PR_TRUE;
|
||||||
#endif
|
#endif
|
||||||
DoApplyRenderingChangeToTree(aPresContext, aFrame, viewManager);
|
DoApplyRenderingChangeToTree(aPresContext, aFrame, viewManager, aChange);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
gInApplyRenderingChangeToTree = PR_FALSE;
|
gInApplyRenderingChangeToTree = PR_FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
@ -10250,7 +10164,7 @@ nsCSSFrameConstructor::StyleChangeReflow(nsIPresContext* aPresContext,
|
||||||
// This isn't the most efficient way to do it, but it saves code
|
// This isn't the most efficient way to do it, but it saves code
|
||||||
// size and doesn't add much cost compared to the reflow..
|
// size and doesn't add much cost compared to the reflow..
|
||||||
if (ancestor != aFrame)
|
if (ancestor != aFrame)
|
||||||
ApplyRenderingChangeToTree(aPresContext, ancestor, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, ancestor, nsnull, nsChangeHint_RepaintFrame);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -10349,11 +10263,8 @@ nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList,
|
||||||
if (hint & nsChangeHint_ReflowFrame) {
|
if (hint & nsChangeHint_ReflowFrame) {
|
||||||
StyleChangeReflow(aPresContext, frame, nsnull);
|
StyleChangeReflow(aPresContext, frame, nsnull);
|
||||||
}
|
}
|
||||||
if (hint & nsChangeHint_RepaintFrame) {
|
if (hint & (nsChangeHint_RepaintFrame | nsChangeHint_SyncFrameView)) {
|
||||||
ApplyRenderingChangeToTree(aPresContext, frame, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, frame, nsnull, hint);
|
||||||
}
|
|
||||||
if (hint & nsChangeHint_SyncFrameView) {
|
|
||||||
// TBD: split out view sync from ApplyRenderingChange and friends
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10463,7 +10374,7 @@ nsCSSFrameConstructor::ContentStatesChanged(nsIPresContext* aPresContext,
|
||||||
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame1, app1))
|
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame1, app1))
|
||||||
theme->WidgetStateChanged(primaryFrame1, app1, nsnull, &repaint);
|
theme->WidgetStateChanged(primaryFrame1, app1, nsnull, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame1, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame1, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(frameChange1 & nsChangeHint_ReconstructDoc) && (primaryFrame2)) {
|
if (!(frameChange1 & nsChangeHint_ReconstructDoc) && (primaryFrame2)) {
|
||||||
|
@ -10477,7 +10388,7 @@ nsCSSFrameConstructor::ContentStatesChanged(nsIPresContext* aPresContext,
|
||||||
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame2, app2))
|
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame2, app2))
|
||||||
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10523,7 +10434,7 @@ nsCSSFrameConstructor::ContentStatesChanged(nsIPresContext* aPresContext,
|
||||||
if (theme)
|
if (theme)
|
||||||
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
// max change needed for top level frames
|
// max change needed for top level frames
|
||||||
|
@ -10701,7 +10612,7 @@ nsCSSFrameConstructor::AttributeChanged(nsIPresContext* aPresContext,
|
||||||
PRBool repaint = PR_FALSE;
|
PRBool repaint = PR_FALSE;
|
||||||
theme->WidgetStateChanged(primaryFrame, disp->mAppearance, aAttribute, &repaint);
|
theme->WidgetStateChanged(primaryFrame, disp->mAppearance, aAttribute, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10791,11 +10702,6 @@ nsCSSFrameConstructor::StyleRuleChanged(nsIPresContext* aPresContext,
|
||||||
|
|
||||||
PRBool reframe = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
PRBool reframe = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
||||||
| nsChangeHint_Unknown)) != 0;
|
| nsChangeHint_Unknown)) != 0;
|
||||||
PRBool reflow = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
|
||||||
| nsChangeHint_ReflowFrame | nsChangeHint_Unknown)) != 0;
|
|
||||||
PRBool render = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
|
||||||
| nsChangeHint_ReflowFrame | nsChangeHint_RepaintFrame
|
|
||||||
| nsChangeHint_Unknown)) != 0;
|
|
||||||
PRBool restyle = (aHint & ~(nsChangeHint_AttrChange)) != 0;
|
PRBool restyle = (aHint & ~(nsChangeHint_AttrChange)) != 0;
|
||||||
// TBD: add "review" to update view?
|
// TBD: add "review" to update view?
|
||||||
|
|
||||||
|
@ -10809,14 +10715,20 @@ nsCSSFrameConstructor::StyleRuleChanged(nsIPresContext* aPresContext,
|
||||||
result = ReconstructDocElementHierarchy(aPresContext);
|
result = ReconstructDocElementHierarchy(aPresContext);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
PRBool reflow = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
||||||
|
| nsChangeHint_ReflowFrame | nsChangeHint_Unknown)) != 0;
|
||||||
|
PRBool renderOrSync = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
||||||
|
| nsChangeHint_ReflowFrame | nsChangeHint_RepaintFrame
|
||||||
|
| nsChangeHint_Unknown | nsChangeHint_SyncFrameView)) != 0;
|
||||||
|
|
||||||
// XXX hack, skip the root and scrolling frames
|
// XXX hack, skip the root and scrolling frames
|
||||||
frame->FirstChild(aPresContext, nsnull, &frame);
|
frame->FirstChild(aPresContext, nsnull, &frame);
|
||||||
frame->FirstChild(aPresContext, nsnull, &frame);
|
frame->FirstChild(aPresContext, nsnull, &frame);
|
||||||
if (reflow) {
|
if (reflow) {
|
||||||
StyleChangeReflow(aPresContext, frame, nsnull);
|
StyleChangeReflow(aPresContext, frame, nsnull);
|
||||||
}
|
}
|
||||||
else if (render) {
|
if (renderOrSync) {
|
||||||
ApplyRenderingChangeToTree(aPresContext, frame, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, frame, nsnull, aHint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,11 @@ inline nsChangeHint NS_CombineHint(nsChangeHint aH1, nsChangeHint aH2) {
|
||||||
return (nsChangeHint)(aH1 | aH2);
|
return (nsChangeHint)(aH1 | aH2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Merge two hints, taking the union
|
||||||
|
inline nsChangeHint NS_SubtractHint(nsChangeHint aH1, nsChangeHint aH2) {
|
||||||
|
return (nsChangeHint)(aH1 & ~aH2);
|
||||||
|
}
|
||||||
|
|
||||||
// Merge the "src" hint into the "dst" hint
|
// Merge the "src" hint into the "dst" hint
|
||||||
// Returns true iff the destination changed
|
// Returns true iff the destination changed
|
||||||
inline PRBool NS_UpdateHint(nsChangeHint& aDest, nsChangeHint aSrc) {
|
inline PRBool NS_UpdateHint(nsChangeHint& aDest, nsChangeHint aSrc) {
|
||||||
|
|
|
@ -91,15 +91,14 @@ nsCSSPropList.h</a>
|
||||||
Insert the property in the list alphabetically, using the existing
|
Insert the property in the list alphabetically, using the existing
|
||||||
property names as a template. The format of the entry you will create is:
|
property names as a template. The format of the entry you will create is:
|
||||||
</p>
|
</p>
|
||||||
<pre>CSS_PROP(-moz-force-broken-image-iconst, force_broken_image_icons, FRAMECHANGE) // bug 58646</pre>
|
<pre>CSS_PROP(-moz-force-broken-image-iconst, force_broken_image_icons, NS_STYLE_HINT_FRAMECHANGE) // bug 58646</pre>
|
||||||
|
|
||||||
<p>The first value is the formal property name, in other words the property
|
<p>The first value is the formal property name, in other words the property
|
||||||
name as it is seen by the CSS parser.<br>
|
name as it is seen by the CSS parser.<br>
|
||||||
The second value is the name of the property as it will appear internally.<br>
|
The second value is the name of the property as it will appear internally.<br>
|
||||||
The last value indicates what must change when the value of the property
|
The last value indicates what must change when the value of the property
|
||||||
changes. It should be one of (<a href="http://lxr.mozilla.org/seamonkey/source/layout/base/public/nsStyleConsts.h#46">
|
changes. It should be an
|
||||||
VISUAL, AURAL, REFLOW, CONTENT, FRAMECHANGE</a>
|
<a href="http://lxr.mozilla.org/seamonkey/source/content/shared/public/nsChangeHint.h">nsChangeHint</a>.</p>
|
||||||
).</p>
|
|
||||||
|
|
||||||
<p>If you need to introduce new constants for the values of the property, they
|
<p>If you need to introduce new constants for the values of the property, they
|
||||||
must be added to <a href="http://lxr.mozilla.org/seamonkey/source/layout/base/public/nsStyleConsts.h">
|
must be added to <a href="http://lxr.mozilla.org/seamonkey/source/layout/base/public/nsStyleConsts.h">
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#include "nsGUIEvent.h"
|
#include "nsGUIEvent.h"
|
||||||
#include "nsLayoutAtoms.h"
|
#include "nsLayoutAtoms.h"
|
||||||
#include "nsIServiceManager.h"
|
#include "nsIServiceManager.h"
|
||||||
|
#include "nsContainerFrame.h"
|
||||||
#ifdef ACCESSIBILITY
|
#ifdef ACCESSIBILITY
|
||||||
#include "nsIAccessibilityService.h"
|
#include "nsIAccessibilityService.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -283,14 +284,15 @@ nsImageControlFrame::Init(nsIPresContext* aPresContext,
|
||||||
// the view's size is not know yet, but its size will be kept in synch with our frame.
|
// the view's size is not know yet, but its size will be kept in synch with our frame.
|
||||||
nsRect boundBox(0, 0, 0, 0);
|
nsRect boundBox(0, 0, 0, 0);
|
||||||
result = view->Init(viewMan, boundBox, parView);
|
result = view->Init(viewMan, boundBox, parView);
|
||||||
viewMan->SetViewContentTransparency(view, PR_TRUE);
|
|
||||||
|
nsContainerFrame::SyncFrameViewProperties(aPresContext, this, aContext, view);
|
||||||
|
|
||||||
|
// this gets reset during reflow anyway
|
||||||
|
// viewMan->SetViewContentTransparency(view, PR_TRUE);
|
||||||
|
|
||||||
// XXX put the view last in document order until we know how to do better
|
// XXX put the view last in document order until we know how to do better
|
||||||
viewMan->InsertChild(parView, view, nsnull, PR_TRUE);
|
viewMan->InsertChild(parView, view, nsnull, PR_TRUE);
|
||||||
SetView(aPresContext, view);
|
SetView(aPresContext, view);
|
||||||
|
|
||||||
const nsStyleVisibility* vis = (const nsStyleVisibility*) mStyleContext->GetStyleData(eStyleStruct_Visibility);
|
|
||||||
// set the opacity
|
|
||||||
viewMan->SetViewOpacity(view, vis->mOpacity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
|
|
|
@ -504,77 +504,266 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
|
||||||
const nsRect* aCombinedArea,
|
const nsRect* aCombinedArea,
|
||||||
PRUint32 aFlags)
|
PRUint32 aFlags)
|
||||||
{
|
{
|
||||||
if (aView) {
|
if (!aView) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the view is sized and positioned correctly
|
||||||
|
if (0 == (aFlags & NS_FRAME_NO_MOVE_VIEW)) {
|
||||||
|
PositionFrameView(aPresContext, aFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) {
|
||||||
nsCOMPtr<nsIViewManager> vm;
|
nsCOMPtr<nsIViewManager> vm;
|
||||||
nsFrameState kidState;
|
|
||||||
nsSize frameSize;
|
|
||||||
|
|
||||||
aView->GetViewManager(*getter_AddRefs(vm));
|
aView->GetViewManager(*getter_AddRefs(vm));
|
||||||
|
nsRect oldBounds;
|
||||||
|
aView->GetBounds(oldBounds);
|
||||||
|
nsFrameState kidState;
|
||||||
aFrame->GetFrameState(&kidState);
|
aFrame->GetFrameState(&kidState);
|
||||||
aFrame->GetSize(frameSize);
|
|
||||||
|
// If the frame has child frames that stick outside the content
|
||||||
// Make sure the view is sized and positioned correctly
|
// area, then size the view large enough to include those child
|
||||||
if (0 == (aFlags & NS_FRAME_NO_MOVE_VIEW)) {
|
// frames
|
||||||
PositionFrameView(aPresContext, aFrame);
|
if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) {
|
||||||
|
vm->ResizeView(aView, *aCombinedArea);
|
||||||
|
} else {
|
||||||
|
// If the width is unchanged and the height is not decreased then repaint only the
|
||||||
|
// newly exposed or contracted area, otherwise repaint the union of the old and new areas
|
||||||
|
|
||||||
|
// XXX: We currently invalidate the newly exposed areas only when the
|
||||||
|
// container frame's width is unchanged and the height is either unchanged or increased
|
||||||
|
// This is because some frames do not invalidate themselves properly. see bug 73825.
|
||||||
|
// Once bug 73825 is fixed, we should always pass PR_TRUE instead of
|
||||||
|
// frameSize.width == width && frameSize.height >= height.
|
||||||
|
nsSize frameSize;
|
||||||
|
aFrame->GetSize(frameSize);
|
||||||
|
nsRect newSize(0, 0, frameSize.width, frameSize.height);
|
||||||
|
vm->ResizeView(aView, newSize,
|
||||||
|
(frameSize.width == oldBounds.width && frameSize.height >= oldBounds.height));
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRect newSize(0, 0, frameSize.width, frameSize.height);
|
nsRect newBounds;
|
||||||
if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) {
|
aView->GetBounds(newBounds);
|
||||||
// If the frame has child frames that stick outside the content
|
|
||||||
// area, then size the view large enough to include those child
|
|
||||||
// frames
|
|
||||||
if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) {
|
|
||||||
vm->ResizeView(aView, *aCombinedArea);
|
|
||||||
newSize = *aCombinedArea;
|
|
||||||
} else {
|
|
||||||
nsRect bounds;
|
|
||||||
aView->GetBounds(bounds);
|
|
||||||
// If the width is unchanged and the height is not decreased then repaint only the
|
|
||||||
// newly exposed or contracted area, otherwise repaint the union of the old and new areas
|
|
||||||
|
|
||||||
// XXX: We currently invalidate the newly exposed areas only when the
|
// if the bounds have changed and clipping is enabled, we need to update the clip area
|
||||||
// container frame's width is unchanged and the height is either unchanged or increased
|
// and also possibly the transparency (in case the view grew bigger than the clip area
|
||||||
// This is because some frames do not invalidate themselves properly. see bug 73825.
|
// so clipping is now cutting out part of the view)
|
||||||
// Once bug 73825 is fixed, we should always pass PR_TRUE instead of
|
if (oldBounds != newBounds) {
|
||||||
// frameSize.width == width && frameSize.height >= height.
|
SyncFrameViewAfterSizeChange(aPresContext, aFrame, nsnull, aView, aFlags);
|
||||||
vm->ResizeView(aView, newSize,
|
}
|
||||||
(frameSize.width == bounds.width && frameSize.height >= bounds.height));
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SyncFrameViewGeometryDependentProperties(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIViewManager> vm;
|
||||||
|
aView->GetViewManager(*getter_AddRefs(vm));
|
||||||
|
|
||||||
|
PRBool isCanvas;
|
||||||
|
const nsStyleBackground* bg;
|
||||||
|
PRBool hasBG =
|
||||||
|
nsCSSRendering::FindBackground(aPresContext, aFrame, &bg, &isCanvas);
|
||||||
|
|
||||||
|
// background-attachment: fixed is not really geometry dependent, but
|
||||||
|
// we set it here because it's cheap to do so
|
||||||
|
PRBool fixedBackground = hasBG &&
|
||||||
|
NS_STYLE_BG_ATTACHMENT_FIXED == bg->mBackgroundAttachment;
|
||||||
|
// If the frame has a fixed background attachment, then indicate that the
|
||||||
|
// view's contents should be repainted and not bitblt'd
|
||||||
|
vm->SetViewBitBltEnabled(aView, !fixedBackground);
|
||||||
|
|
||||||
|
PRBool viewHasTransparentContent =
|
||||||
|
!hasBG ||
|
||||||
|
(bg->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT) ||
|
||||||
|
!aFrame->CanPaintBackground();
|
||||||
|
if (isCanvas && viewHasTransparentContent) {
|
||||||
|
nsIView* rootView;
|
||||||
|
vm->GetRootView(rootView);
|
||||||
|
nsIView* rootParent;
|
||||||
|
rootView->GetParent(rootParent);
|
||||||
|
if (nsnull == rootParent) {
|
||||||
|
viewHasTransparentContent = PR_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
nsFrameState kidState;
|
||||||
|
aFrame->GetFrameState(&kidState);
|
||||||
|
|
||||||
|
if (!viewHasTransparentContent) {
|
||||||
|
// If we're showing the view but the frame is hidden, then the view is transparent
|
||||||
|
nsViewVisibility visibility;
|
||||||
|
aView->GetVisibility(visibility);
|
||||||
|
const nsStyleVisibility* vis;
|
||||||
|
::GetStyleData(aStyleContext, &vis);
|
||||||
|
if ((nsViewVisibility_kShow == visibility
|
||||||
|
&& NS_STYLE_VISIBILITY_HIDDEN == vis->mVisible)
|
||||||
|
|| (NS_STYLE_OVERFLOW_VISIBLE == display->mOverflow
|
||||||
|
&& (kidState & NS_FRAME_OUTSIDE_CHILDREN) != 0)) {
|
||||||
|
viewHasTransparentContent = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the frame has visible content that overflows the content area, then we
|
||||||
|
// need the view marked as having transparent content
|
||||||
|
|
||||||
|
// There are two types of clipping:
|
||||||
|
// - 'clip' which only applies to absolutely positioned elements, and is
|
||||||
|
// relative to the element's border edge. 'clip' applies to the entire
|
||||||
|
// element
|
||||||
|
// - 'overflow-clip' which only applies to block-level elements and replaced
|
||||||
|
// elements that have 'overflow' set to 'hidden'. 'overflow-clip' is relative
|
||||||
|
// to the content area and applies to content only (not border or background).
|
||||||
|
// Note that out-of-flow frames like floated or absolutely positioned frames
|
||||||
|
// are block-level, but we can't rely on the 'display' value being set correctly
|
||||||
|
// in the style context...
|
||||||
|
PRBool isBlockLevel = display->IsBlockLevel() || (kidState & NS_FRAME_OUT_OF_FLOW);
|
||||||
|
PRBool hasClip = display->IsAbsolutelyPositioned() && (display->mClipFlags & NS_STYLE_CLIP_RECT);
|
||||||
|
PRBool hasOverflowClip = isBlockLevel && (display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN);
|
||||||
|
if (hasClip || hasOverflowClip) {
|
||||||
|
nsSize frameSize;
|
||||||
|
aFrame->GetSize(frameSize);
|
||||||
|
nsRect clipRect;
|
||||||
|
|
||||||
|
if (hasClip) {
|
||||||
|
// Start with the 'auto' values and then factor in user specified values
|
||||||
|
clipRect.SetRect(0, 0, frameSize.width, frameSize.height);
|
||||||
|
|
||||||
|
if (display->mClipFlags & NS_STYLE_CLIP_RECT) {
|
||||||
|
if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.y = display->mClip.y;
|
||||||
|
}
|
||||||
|
if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.x = display->mClip.x;
|
||||||
|
}
|
||||||
|
if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.width = display->mClip.width;
|
||||||
|
}
|
||||||
|
if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.height = display->mClip.height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasOverflowClip) {
|
||||||
|
const nsStyleBorder* borderStyle;
|
||||||
|
::GetStyleData(aStyleContext, &borderStyle);
|
||||||
|
const nsStylePadding* paddingStyle;
|
||||||
|
::GetStyleData(aStyleContext, &paddingStyle);
|
||||||
|
|
||||||
|
nsMargin border, padding;
|
||||||
|
// XXX We don't support the 'overflow-clip' property yet so just use the
|
||||||
|
// content area (which is the default value) as the clip shape
|
||||||
|
nsRect overflowClipRect(0, 0, frameSize.width, frameSize.height);
|
||||||
|
borderStyle->GetBorder(border);
|
||||||
|
overflowClipRect.Deflate(border);
|
||||||
|
// XXX We need to handle percentage padding
|
||||||
|
if (paddingStyle->GetPadding(padding)) {
|
||||||
|
overflowClipRect.Deflate(padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasClip) {
|
||||||
|
// If both 'clip' and 'overflow-clip' apply then use the intersection
|
||||||
|
// of the two
|
||||||
|
clipRect.IntersectRect(clipRect, overflowClipRect);
|
||||||
|
} else {
|
||||||
|
clipRect = overflowClipRect;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
aView->GetBounds(newSize);
|
|
||||||
nscoord x, y;
|
|
||||||
aView->GetPosition(&x, &y);
|
|
||||||
newSize.x -= x;
|
|
||||||
newSize.y -= y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const nsStyleBackground* bg;
|
nsRect newSize;
|
||||||
const nsStyleVisibility* vis;
|
aView->GetBounds(newSize);
|
||||||
const nsStyleDisplay* display;
|
nscoord x, y;
|
||||||
PRBool isCanvas;
|
aView->GetPosition(&x, &y);
|
||||||
PRBool hasBG =
|
newSize.x -= x;
|
||||||
nsCSSRendering::FindBackground(aPresContext, aFrame, &bg, &isCanvas);
|
newSize.y -= y;
|
||||||
aFrame->GetStyleData(eStyleStruct_Visibility, (const nsStyleStruct*&)vis);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display);
|
|
||||||
|
|
||||||
// Set the view's opacity
|
// If part of the view is being clipped out, then mark it transparent
|
||||||
vm->SetViewOpacity(aView, vis->mOpacity);
|
if (clipRect.y > newSize.y
|
||||||
|
|| clipRect.x > newSize.x
|
||||||
|
|| clipRect.XMost() < newSize.XMost()
|
||||||
|
|| clipRect.YMost() < newSize.YMost()) {
|
||||||
|
viewHasTransparentContent = PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set clipping of child views.
|
||||||
|
nsRegion region;
|
||||||
|
region.Copy(nsRectFast(clipRect));
|
||||||
|
vm->SetViewChildClipRegion(aView, ®ion);
|
||||||
|
} else {
|
||||||
|
// Remove clipping of child views.
|
||||||
|
vm->SetViewChildClipRegion(aView, nsnull);
|
||||||
|
}
|
||||||
|
|
||||||
|
vm->SetViewContentTransparency(aView, viewHasTransparentContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsContainerFrame::SyncFrameViewAfterSizeChange(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags)
|
||||||
|
{
|
||||||
|
if (!aView) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIStyleContext> savedStyleContext;
|
||||||
|
if (nsnull == aStyleContext) {
|
||||||
|
aFrame->GetStyleContext(getter_AddRefs(savedStyleContext));
|
||||||
|
aStyleContext = savedStyleContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
nsFrameState kidState;
|
||||||
|
aFrame->GetFrameState(&kidState);
|
||||||
|
|
||||||
|
PRBool isBlockLevel = display->IsBlockLevel() || (kidState & NS_FRAME_OUT_OF_FLOW);
|
||||||
|
PRBool hasClip = display->IsAbsolutelyPositioned() && (display->mClipFlags & NS_STYLE_CLIP_RECT);
|
||||||
|
PRBool hasOverflowClip = isBlockLevel && (display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN);
|
||||||
|
if (hasClip || hasOverflowClip) {
|
||||||
|
SyncFrameViewGeometryDependentProperties(aPresContext, aFrame, aStyleContext, aView, aFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsContainerFrame::SyncFrameViewProperties(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags)
|
||||||
|
{
|
||||||
|
if (!aView) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIViewManager> vm;
|
||||||
|
aView->GetViewManager(*getter_AddRefs(vm));
|
||||||
|
|
||||||
|
nsCOMPtr<nsIStyleContext> savedStyleContext;
|
||||||
|
if (nsnull == aStyleContext) {
|
||||||
|
aFrame->GetStyleContext(getter_AddRefs(savedStyleContext));
|
||||||
|
aStyleContext = savedStyleContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleVisibility* vis;
|
||||||
|
::GetStyleData(aStyleContext, &vis);
|
||||||
|
|
||||||
|
// Set the view's opacity
|
||||||
|
vm->SetViewOpacity(aView, vis->mOpacity);
|
||||||
|
|
||||||
|
// Make sure visibility is correct
|
||||||
|
if (0 == (aFlags & NS_FRAME_NO_VISIBILITY)) {
|
||||||
// See if the view should be hidden or visible
|
// See if the view should be hidden or visible
|
||||||
PRBool viewIsVisible = PR_TRUE;
|
PRBool viewIsVisible = PR_TRUE;
|
||||||
PRBool viewHasTransparentContent =
|
|
||||||
(!hasBG ||
|
|
||||||
(bg->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT) ||
|
|
||||||
!aFrame->CanPaintBackground());
|
|
||||||
if (isCanvas && viewHasTransparentContent) {
|
|
||||||
nsIView* rootView;
|
|
||||||
vm->GetRootView(rootView);
|
|
||||||
nsIView* rootParent;
|
|
||||||
rootView->GetParent(rootParent);
|
|
||||||
if (nsnull == rootParent) {
|
|
||||||
viewHasTransparentContent = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
||||||
viewIsVisible = PR_FALSE;
|
viewIsVisible = PR_FALSE;
|
||||||
|
@ -597,147 +786,106 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
|
||||||
|
|
||||||
if (frameType == nsLayoutAtoms::scrollFrame || frameType == nsLayoutAtoms::listControlFrame) {
|
if (frameType == nsLayoutAtoms::scrollFrame || frameType == nsLayoutAtoms::listControlFrame) {
|
||||||
viewIsVisible = PR_FALSE;
|
viewIsVisible = PR_FALSE;
|
||||||
|
|
||||||
} else {
|
|
||||||
// If we're a container element, then leave the view visible, but
|
|
||||||
// mark it as having transparent content. The reason we need to
|
|
||||||
// do this is that child elements can override their parent's
|
|
||||||
// hidden visibility and be visible anyway
|
|
||||||
nsIFrame* firstChild;
|
|
||||||
|
|
||||||
aFrame->FirstChild(aPresContext, nsnull, &firstChild);
|
|
||||||
if (firstChild) {
|
|
||||||
// Not a left frame, so the view needs to be visible, but marked
|
|
||||||
// as having transparent content
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
} else {
|
|
||||||
// Leaf frame so go ahead and hide the view
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If the frame has visible content that overflows the content area, then we
|
|
||||||
// need the view marked as having transparent content
|
|
||||||
if (NS_STYLE_OVERFLOW_VISIBLE == display->mOverflow) {
|
|
||||||
if (kidState & NS_FRAME_OUTSIDE_CHILDREN) {
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure visibility is correct
|
|
||||||
if (0 == (aFlags & NS_FRAME_NO_VISIBILITY)) {
|
|
||||||
vm->SetViewVisibility(aView, viewIsVisible ? nsViewVisibility_kShow :
|
|
||||||
nsViewVisibility_kHide);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure z-index is correct
|
|
||||||
PRInt32 zIndex = 0;
|
|
||||||
PRInt32 oldZIndex;
|
|
||||||
PRBool oldAutoZIndex;
|
|
||||||
PRBool oldTopMost;
|
|
||||||
PRBool autoZIndex = PR_FALSE;
|
|
||||||
const nsStylePosition* position;
|
|
||||||
|
|
||||||
aView->GetZIndex(oldZIndex, oldAutoZIndex, oldTopMost);
|
|
||||||
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Position, (const nsStyleStruct*&)position);
|
|
||||||
if (position->mZIndex.GetUnit() == eStyleUnit_Integer) {
|
|
||||||
zIndex = position->mZIndex.GetIntValue();
|
|
||||||
|
|
||||||
} else if (position->mZIndex.GetUnit() == eStyleUnit_Auto) {
|
|
||||||
autoZIndex = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
vm->SetViewZIndex(aView, autoZIndex, zIndex, oldTopMost);
|
|
||||||
|
|
||||||
// There are two types of clipping:
|
|
||||||
// - 'clip' which only applies to absolutely positioned elements, and is
|
|
||||||
// relative to the element's border edge. 'clip' applies to the entire
|
|
||||||
// element
|
|
||||||
// - 'overflow-clip' which only applies to block-level elements and replaced
|
|
||||||
// elements that have 'overflow' set to 'hidden'. 'overflow-clip' is relative
|
|
||||||
// to the content area and applies to content only (not border or background).
|
|
||||||
// Note that out-of-flow frames like floated or absolutely positioned frames
|
|
||||||
// are block-level, but we can't rely on the 'display' value being set correctly
|
|
||||||
// in the style context...
|
|
||||||
PRBool hasClip, hasOverflowClip;
|
|
||||||
PRBool isBlockLevel = display->IsBlockLevel() || (0 != (kidState & NS_FRAME_OUT_OF_FLOW));
|
|
||||||
hasClip = display->IsAbsolutelyPositioned() && (display->mClipFlags & NS_STYLE_CLIP_RECT);
|
|
||||||
hasOverflowClip = isBlockLevel && (display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN);
|
|
||||||
if (hasClip || hasOverflowClip) {
|
|
||||||
nsRect clipRect;
|
|
||||||
|
|
||||||
if (hasClip) {
|
|
||||||
// Start with the 'auto' values and then factor in user specified values
|
|
||||||
clipRect.SetRect(0, 0, frameSize.width, frameSize.height);
|
|
||||||
|
|
||||||
if (display->mClipFlags & NS_STYLE_CLIP_RECT) {
|
|
||||||
if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.y = display->mClip.y;
|
|
||||||
}
|
|
||||||
if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.x = display->mClip.x;
|
|
||||||
}
|
|
||||||
if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.width = display->mClip.width;
|
|
||||||
}
|
|
||||||
if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.height = display->mClip.height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasOverflowClip) {
|
|
||||||
const nsStyleBorder* borderStyle;
|
|
||||||
const nsStylePadding* paddingStyle;
|
|
||||||
nsMargin border, padding;
|
|
||||||
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)paddingStyle);
|
|
||||||
|
|
||||||
// XXX We don't support the 'overflow-clip' property yet so just use the
|
|
||||||
// content area (which is the default value) as the clip shape
|
|
||||||
nsRect overflowClipRect(0, 0, frameSize.width, frameSize.height);
|
|
||||||
borderStyle->GetBorder(border);
|
|
||||||
overflowClipRect.Deflate(border);
|
|
||||||
// XXX We need to handle percentage padding
|
|
||||||
if (paddingStyle->GetPadding(padding)) {
|
|
||||||
overflowClipRect.Deflate(padding);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasClip) {
|
|
||||||
// If both 'clip' and 'overflow-clip' apply then use the intersection
|
|
||||||
// of the two
|
|
||||||
clipRect.IntersectRect(clipRect, overflowClipRect);
|
|
||||||
} else {
|
|
||||||
clipRect = overflowClipRect;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If part of the view is being clipped out, then mark it transparent
|
|
||||||
if (clipRect.y > newSize.y
|
|
||||||
|| clipRect.x > newSize.x
|
|
||||||
|| clipRect.XMost() < newSize.XMost()
|
|
||||||
|| clipRect.YMost() < newSize.YMost()) {
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set clipping of child views.
|
|
||||||
nsRegion region;
|
|
||||||
region.Copy(clipRect);
|
|
||||||
vm->SetViewChildClipRegion(aView, ®ion);
|
|
||||||
} else {
|
} else {
|
||||||
// Remove clipping of child views.
|
// if the view is for a popup, don't show the view if the popup is closed
|
||||||
vm->SetViewChildClipRegion(aView, nsnull);
|
nsCOMPtr<nsIWidget> widget;
|
||||||
|
aView->GetWidget(*getter_AddRefs(widget));
|
||||||
|
if (widget) {
|
||||||
|
nsWindowType windowType;
|
||||||
|
widget->GetWindowType(windowType);
|
||||||
|
if (windowType == eWindowType_popup) {
|
||||||
|
widget->IsVisible(viewIsVisible);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure content transparency is correct
|
vm->SetViewVisibility(aView, viewIsVisible ? nsViewVisibility_kShow :
|
||||||
if (viewIsVisible) {
|
nsViewVisibility_kHide);
|
||||||
vm->SetViewContentTransparency(aView, viewHasTransparentContent);
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
// See if the frame is being relatively positioned or absolutely
|
||||||
|
// positioned
|
||||||
|
PRBool isTopMostView = display->IsPositioned();
|
||||||
|
|
||||||
|
// Make sure z-index is correct
|
||||||
|
const nsStylePosition* position;
|
||||||
|
::GetStyleData(aStyleContext, &position);
|
||||||
|
|
||||||
|
PRInt32 zIndex = 0;
|
||||||
|
PRBool autoZIndex = PR_FALSE;
|
||||||
|
|
||||||
|
if (position->mZIndex.GetUnit() == eStyleUnit_Integer) {
|
||||||
|
zIndex = position->mZIndex.GetIntValue();
|
||||||
|
} else if (position->mZIndex.GetUnit() == eStyleUnit_Auto) {
|
||||||
|
autoZIndex = PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
vm->SetViewZIndex(aView, autoZIndex, zIndex, isTopMostView);
|
||||||
|
|
||||||
|
SyncFrameViewGeometryDependentProperties(aPresContext, aFrame, aStyleContext, aView, aFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsContainerFrame::FrameNeedsView(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext)
|
||||||
|
{
|
||||||
|
const nsStyleVisibility* vis;
|
||||||
|
::GetStyleData(aStyleContext, &vis);
|
||||||
|
|
||||||
|
if (vis->mOpacity != 1.0f) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// See if the frame has a fixed background attachment
|
||||||
|
const nsStyleBackground *color;
|
||||||
|
PRBool isCanvas;
|
||||||
|
PRBool hasBackground =
|
||||||
|
nsCSSRendering::FindBackground(aPresContext, aFrame, &color, &isCanvas);
|
||||||
|
if (hasBackground &&
|
||||||
|
NS_STYLE_BG_ATTACHMENT_FIXED == color->mBackgroundAttachment) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
|
||||||
|
if (NS_STYLE_POSITION_RELATIVE == display->mPosition) {
|
||||||
|
return PR_TRUE;
|
||||||
|
} else if (display->IsAbsolutelyPositioned()) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIAtom> pseudoTag;
|
||||||
|
aStyleContext->GetPseudoType(*getter_AddRefs(pseudoTag));
|
||||||
|
if (pseudoTag == nsLayoutAtoms::scrolledContentPseudo) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// See if the frame is block-level and has 'overflow' set to 'hidden'. If
|
||||||
|
// so, then we need to give it a view so clipping
|
||||||
|
// of any child views works correctly. Note that if it's floated it is also
|
||||||
|
// block-level, but we can't trust that the style context 'display' value is
|
||||||
|
// set correctly
|
||||||
|
if ((display->IsBlockLevel() || display->IsFloating()) &&
|
||||||
|
(display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN)) {
|
||||||
|
// XXX Check for the frame being a block frame and only force a view
|
||||||
|
// in that case, because adding a view for box frames seems to cause
|
||||||
|
// problems for XUL...
|
||||||
|
nsCOMPtr<nsIAtom> frameType;
|
||||||
|
|
||||||
|
aFrame->GetFrameType(getter_AddRefs(frameType));
|
||||||
|
if ((frameType == nsLayoutAtoms::blockFrame) ||
|
||||||
|
(frameType == nsLayoutAtoms::areaFrame)) {
|
||||||
|
return PR_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return PR_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -100,14 +100,7 @@ public:
|
||||||
static void PositionFrameView(nsIPresContext* aPresContext,
|
static void PositionFrameView(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aKidFrame);
|
nsIFrame* aKidFrame);
|
||||||
|
|
||||||
// Sets several view attributes:
|
// Set the view's size and position after its frame has been reflowed.
|
||||||
// - if requested sizes the frame's view based on the current size and origin.
|
|
||||||
// Takes into account the combined area and (if overflow is visible) whether
|
|
||||||
// the frame has children that extend outside
|
|
||||||
// - opacity
|
|
||||||
// - visibility
|
|
||||||
// - content transparency
|
|
||||||
// - clip
|
|
||||||
//
|
//
|
||||||
// Flags:
|
// Flags:
|
||||||
// NS_FRAME_NO_MOVE_VIEW - don't position the frame's view. Set this if you
|
// NS_FRAME_NO_MOVE_VIEW - don't position the frame's view. Set this if you
|
||||||
|
@ -119,6 +112,34 @@ public:
|
||||||
const nsRect* aCombinedArea,
|
const nsRect* aCombinedArea,
|
||||||
PRUint32 aFlags = 0);
|
PRUint32 aFlags = 0);
|
||||||
|
|
||||||
|
// Sets view attributes from the frame style that depend on the view's size
|
||||||
|
// (clip, transparency). This needs to be called if you change the size of
|
||||||
|
// a view and the view's frame could have clipping set on it.
|
||||||
|
// @param aStyleContext can be null, in which case the frame's style context is used
|
||||||
|
static void SyncFrameViewAfterSizeChange(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags = 0);
|
||||||
|
|
||||||
|
// Sets the view's attributes from the frame style.
|
||||||
|
// - opacity
|
||||||
|
// - visibility
|
||||||
|
// - content transparency
|
||||||
|
// - clip
|
||||||
|
// Call this when one of these styles changes or when the view has just
|
||||||
|
// been created.
|
||||||
|
// @param aStyleContext can be null, in which case the frame's style context is used
|
||||||
|
static void SyncFrameViewProperties(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags = 0);
|
||||||
|
|
||||||
|
// Returns PR_TRUE if the frame requires a view
|
||||||
|
static PRBool FrameNeedsView(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame, nsIStyleContext* aStyleContext);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invokes the WillReflow() function, positions the frame and its view (if
|
* Invokes the WillReflow() function, positions the frame and its view (if
|
||||||
* requested), and then calls Reflow(). If the reflow succeeds and the child
|
* requested), and then calls Reflow(). If the reflow succeeds and the child
|
||||||
|
|
|
@ -427,21 +427,6 @@ nsHTMLContainerFrame::ReparentFrameViewList(nsIPresContext* aPresContext,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PRBool
|
|
||||||
IsContainerContent(nsIFrame* aFrame)
|
|
||||||
{
|
|
||||||
nsIContent* content;
|
|
||||||
PRBool result = PR_FALSE;
|
|
||||||
|
|
||||||
aFrame->GetContent(&content);
|
|
||||||
if (content) {
|
|
||||||
content->CanContainChildren(result);
|
|
||||||
NS_RELEASE(content);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsHTMLContainerFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
nsHTMLContainerFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
|
@ -449,244 +434,92 @@ nsHTMLContainerFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aContentParentFrame,
|
nsIFrame* aContentParentFrame,
|
||||||
PRBool aForce)
|
PRBool aForce)
|
||||||
{
|
{
|
||||||
PRBool isTopMostView = PR_FALSE;
|
|
||||||
nsIView* view;
|
nsIView* view;
|
||||||
aFrame->GetView(aPresContext, &view);
|
aFrame->GetView(aPresContext, &view);
|
||||||
|
if (nsnull != view) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// If we don't yet have a view, see if we need a view
|
// If we don't yet have a view, see if we need a view
|
||||||
if (nsnull == view) {
|
if (!(aForce || FrameNeedsView(aPresContext, aFrame, aStyleContext))) {
|
||||||
PRBool fixedBackgroundAttachment = PR_FALSE;
|
// don't need a view
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// Get nsStyleColor and nsStyleDisplay
|
// Create a view
|
||||||
const nsStyleDisplay* display = (const nsStyleDisplay*)
|
nsIFrame* parent = nsnull;
|
||||||
aStyleContext->GetStyleData(eStyleStruct_Display);
|
aFrame->GetParentWithView(aPresContext, &parent);
|
||||||
const nsStylePosition* position = (const nsStylePosition*)
|
NS_ASSERTION(parent, "GetParentWithView failed");
|
||||||
aStyleContext->GetStyleData(eStyleStruct_Position);
|
|
||||||
const nsStyleVisibility* vis = (const nsStyleVisibility*)
|
nsIView* parentView = nsnull;
|
||||||
aStyleContext->GetStyleData(eStyleStruct_Visibility);
|
parent->GetView(aPresContext, &parentView);
|
||||||
|
NS_ASSERTION(parentView, "no parent with view");
|
||||||
|
|
||||||
|
// Create a view
|
||||||
|
static NS_DEFINE_CID(kViewCID, NS_VIEW_CID);
|
||||||
|
nsresult result = CallCreateInstance(kViewCID, &view);
|
||||||
|
if (NS_FAILED(result)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
if (vis->mOpacity != 1.0f) {
|
nsCOMPtr<nsIViewManager> viewManager;
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
parentView->GetViewManager(*getter_AddRefs(viewManager));
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p opacity=%g",
|
NS_ASSERTION(nsnull != viewManager, "null view manager");
|
||||||
aFrame, vis->mOpacity));
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame has a fixed background attachment
|
|
||||||
const nsStyleBackground *color;
|
|
||||||
PRBool isCanvas;
|
|
||||||
PRBool hasBackground =
|
|
||||||
nsCSSRendering::FindBackground(aPresContext, aFrame, &color, &isCanvas);
|
|
||||||
if (hasBackground &&
|
|
||||||
NS_STYLE_BG_ATTACHMENT_FIXED == color->mBackgroundAttachment) {
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
fixedBackgroundAttachment = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame is being relatively positioned or absolutely
|
// Initialize the view
|
||||||
// positioned
|
nsRect bounds;
|
||||||
if (!aForce) {
|
aFrame->GetRect(bounds);
|
||||||
if (NS_STYLE_POSITION_RELATIVE == display->mPosition) {
|
view->Init(viewManager, bounds, parentView);
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p relatively positioned",
|
|
||||||
aFrame));
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
isTopMostView = PR_TRUE;
|
|
||||||
} else if (display->IsAbsolutelyPositioned()) {
|
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p absolutely positioned",
|
|
||||||
aFrame));
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
isTopMostView = PR_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NS_STYLE_POSITION_FIXED == display->mPosition) {
|
SyncFrameViewProperties(aPresContext, aFrame, aStyleContext, view);
|
||||||
isTopMostView = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame is a scrolled frame
|
// Insert the view into the view hierarchy. If the parent view is a
|
||||||
if (!aForce) {
|
// scrolling view we need to do this differently
|
||||||
nsIAtom* pseudoTag;
|
nsIScrollableView* scrollingView;
|
||||||
aStyleContext->GetPseudoType(pseudoTag);
|
if (NS_SUCCEEDED(CallQueryInterface(parentView, &scrollingView))) {
|
||||||
if (pseudoTag == nsLayoutAtoms::scrolledContentPseudo) {
|
scrollingView->SetScrolledView(view);
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
} else {
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: scrolled frame=%p", aFrame));
|
// XXX Drop it at the end of the document order until we can do better
|
||||||
aForce = PR_TRUE;
|
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
||||||
}
|
|
||||||
NS_IF_RELEASE(pseudoTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame is block-level and has 'overflow' set to 'hidden'. If
|
if (nsnull != aContentParentFrame) {
|
||||||
// so and it can have child frames, then we need to give it a view so clipping
|
// If, for some reason, GetView below fails to initialize zParentView,
|
||||||
// of any child views works correctly. Note that if it's floated it is also
|
// then ensure that we completely bypass InsertZPlaceholder below.
|
||||||
// block-level, but we can't trust that the style context 'display' value is
|
// The effect will be as if we never knew about aContentParentFrame
|
||||||
// set correctly
|
// in the first place, so at least this code won't be doing any damage.
|
||||||
if (!aForce) {
|
nsIView* zParentView = parentView;
|
||||||
if ((display->IsBlockLevel() || display->IsFloating()) &&
|
|
||||||
(display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN)) {
|
aContentParentFrame->GetView(aPresContext, &zParentView);
|
||||||
|
|
||||||
// The reason for the check of whether it can contain children is just
|
if (nsnull == zParentView) {
|
||||||
// to avoid giving it a view unnecessarily
|
nsIFrame* zParentFrame = nsnull;
|
||||||
if (::IsContainerContent(aFrame)) {
|
|
||||||
// XXX Check for the frame being a block frame and only force a view
|
|
||||||
// in that case, because adding a view for box frames seems to cause
|
|
||||||
// problems for XUL...
|
|
||||||
nsIAtom* frameType;
|
|
||||||
|
|
||||||
aFrame->GetFrameType(&frameType);
|
|
||||||
if ((frameType == nsLayoutAtoms::blockFrame) ||
|
|
||||||
(frameType == nsLayoutAtoms::areaFrame)) {
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
}
|
|
||||||
NS_IF_RELEASE(frameType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aForce) {
|
|
||||||
// Create a view
|
|
||||||
nsIFrame* parent = nsnull;
|
|
||||||
nsIView* parentView = nsnull;
|
|
||||||
|
|
||||||
aFrame->GetParentWithView(aPresContext, &parent);
|
|
||||||
NS_ASSERTION(parent, "GetParentWithView failed");
|
|
||||||
parent->GetView(aPresContext, &parentView);
|
|
||||||
NS_ASSERTION(parentView, "no parent with view");
|
|
||||||
|
|
||||||
// Create a view
|
|
||||||
static NS_DEFINE_CID(kViewCID, NS_VIEW_CID);
|
|
||||||
|
|
||||||
nsresult result = nsComponentManager::CreateInstance(kViewCID,
|
|
||||||
nsnull,
|
|
||||||
NS_GET_IID(nsIView),
|
|
||||||
(void **)&view);
|
|
||||||
if (NS_OK == result) {
|
|
||||||
nsIViewManager* viewManager;
|
|
||||||
parentView->GetViewManager(viewManager);
|
|
||||||
NS_ASSERTION(nsnull != viewManager, "null view manager");
|
|
||||||
|
|
||||||
// Initialize the view
|
|
||||||
nsRect bounds;
|
|
||||||
aFrame->GetRect(bounds);
|
|
||||||
view->Init(viewManager, bounds, parentView);
|
|
||||||
|
|
||||||
// If the frame has a fixed background attachment, then indicate that the
|
|
||||||
// view's contents should be repainted and not bitblt'd
|
|
||||||
if (fixedBackgroundAttachment) {
|
|
||||||
viewManager->SetViewBitBltEnabled(view, PR_FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert the view into the view hierarchy. If the parent view is a
|
aContentParentFrame->GetParentWithView(aPresContext, &zParentFrame);
|
||||||
// scrolling view we need to do this differently
|
NS_ASSERTION(zParentFrame, "GetParentWithView failed");
|
||||||
nsIScrollableView* scrollingView;
|
zParentFrame->GetView(aPresContext, &zParentView);
|
||||||
if (NS_SUCCEEDED(parentView->QueryInterface(NS_GET_IID(nsIScrollableView), (void**)&scrollingView))) {
|
NS_ASSERTION(zParentView, "no parent with view");
|
||||||
scrollingView->SetScrolledView(view);
|
}
|
||||||
} else {
|
|
||||||
PRInt32 zIndex = 0;
|
if (zParentView != parentView) {
|
||||||
PRBool autoZIndex = PR_FALSE;
|
viewManager->InsertZPlaceholder(zParentView, view, nsnull, PR_TRUE);
|
||||||
|
|
||||||
// Get the z-index to use
|
|
||||||
if (position->mZIndex.GetUnit() == eStyleUnit_Integer) {
|
|
||||||
zIndex = position->mZIndex.GetIntValue();
|
|
||||||
} else if (position->mZIndex.GetUnit() == eStyleUnit_Auto) {
|
|
||||||
autoZIndex = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
viewManager->SetViewZIndex(view, autoZIndex, zIndex, isTopMostView);
|
|
||||||
// XXX Drop it at the end of the document order until we can do better
|
|
||||||
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
|
||||||
|
|
||||||
if (nsnull != aContentParentFrame) {
|
|
||||||
// If, for some reason, GetView below fails to initialize zParentView,
|
|
||||||
// then ensure that we completely bypass InsertZPlaceholder below.
|
|
||||||
// The effect will be as if we never knew about aContentParentFrame
|
|
||||||
// in the first place, so at least this code won't be doing any damage.
|
|
||||||
nsIView* zParentView = parentView;
|
|
||||||
|
|
||||||
aContentParentFrame->GetView(aPresContext, &zParentView);
|
|
||||||
|
|
||||||
if (nsnull == zParentView) {
|
|
||||||
nsIFrame* zParentFrame = nsnull;
|
|
||||||
|
|
||||||
aContentParentFrame->GetParentWithView(aPresContext, &zParentFrame);
|
|
||||||
NS_ASSERTION(zParentFrame, "GetParentWithView failed");
|
|
||||||
zParentFrame->GetView(aPresContext, &zParentView);
|
|
||||||
NS_ASSERTION(zParentView, "no parent with view");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zParentView != parentView) {
|
|
||||||
viewManager->InsertZPlaceholder(zParentView, view, nsnull, PR_TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the view should be hidden
|
|
||||||
PRBool viewIsVisible = PR_TRUE;
|
|
||||||
PRBool viewHasTransparentContent =
|
|
||||||
!isCanvas &&
|
|
||||||
(!hasBackground ||
|
|
||||||
(color->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT));
|
|
||||||
|
|
||||||
|
|
||||||
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
else if (NS_STYLE_VISIBILITY_HIDDEN == vis->mVisible) {
|
|
||||||
// If it has a widget, hide the view because the widget can't deal with it
|
|
||||||
nsIWidget* widget = nsnull;
|
|
||||||
view->GetWidget(widget);
|
|
||||||
if (widget) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
NS_RELEASE(widget);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// If it's a container element, then leave the view visible, but
|
|
||||||
// mark it as having transparent content. The reason we need to
|
|
||||||
// do this is that child elements can override their parent's
|
|
||||||
// hidden visibility and be visible anyway.
|
|
||||||
//
|
|
||||||
// Because this function is called before processing the content
|
|
||||||
// object's child elements, we can't tell if it's a leaf by looking
|
|
||||||
// at whether the frame has any child frames
|
|
||||||
if (::IsContainerContent(aFrame)) {
|
|
||||||
// The view needs to be visible, but marked as having transparent
|
|
||||||
// content
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
} else {
|
|
||||||
// Go ahead and hide the view
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (viewIsVisible) {
|
|
||||||
if (viewHasTransparentContent) {
|
|
||||||
viewManager->SetViewContentTransparency(view, PR_TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
viewManager->SetViewVisibility(view, nsViewVisibility_kHide);
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX If it's fixed positioned, then create a widget so it floats
|
|
||||||
// above the scrolling area
|
|
||||||
if (NS_STYLE_POSITION_FIXED == display->mPosition) {
|
|
||||||
view->CreateWidget(kCChildCID);
|
|
||||||
}
|
|
||||||
|
|
||||||
viewManager->SetViewOpacity(view, vis->mOpacity);
|
|
||||||
NS_RELEASE(viewManager);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remember our view
|
|
||||||
aFrame->SetView(aPresContext, view);
|
|
||||||
|
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p view=%p",
|
|
||||||
aFrame));
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX If it's fixed positioned, then create a widget so it floats
|
||||||
|
// above the scrolling area
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
if (NS_STYLE_POSITION_FIXED == display->mPosition) {
|
||||||
|
view->CreateWidget(kCChildCID);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remember our view
|
||||||
|
aFrame->SetView(aPresContext, view);
|
||||||
|
|
||||||
|
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
||||||
|
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p view=%p",
|
||||||
|
aFrame));
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -504,77 +504,266 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
|
||||||
const nsRect* aCombinedArea,
|
const nsRect* aCombinedArea,
|
||||||
PRUint32 aFlags)
|
PRUint32 aFlags)
|
||||||
{
|
{
|
||||||
if (aView) {
|
if (!aView) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the view is sized and positioned correctly
|
||||||
|
if (0 == (aFlags & NS_FRAME_NO_MOVE_VIEW)) {
|
||||||
|
PositionFrameView(aPresContext, aFrame);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) {
|
||||||
nsCOMPtr<nsIViewManager> vm;
|
nsCOMPtr<nsIViewManager> vm;
|
||||||
nsFrameState kidState;
|
|
||||||
nsSize frameSize;
|
|
||||||
|
|
||||||
aView->GetViewManager(*getter_AddRefs(vm));
|
aView->GetViewManager(*getter_AddRefs(vm));
|
||||||
|
nsRect oldBounds;
|
||||||
|
aView->GetBounds(oldBounds);
|
||||||
|
nsFrameState kidState;
|
||||||
aFrame->GetFrameState(&kidState);
|
aFrame->GetFrameState(&kidState);
|
||||||
aFrame->GetSize(frameSize);
|
|
||||||
|
// If the frame has child frames that stick outside the content
|
||||||
// Make sure the view is sized and positioned correctly
|
// area, then size the view large enough to include those child
|
||||||
if (0 == (aFlags & NS_FRAME_NO_MOVE_VIEW)) {
|
// frames
|
||||||
PositionFrameView(aPresContext, aFrame);
|
if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) {
|
||||||
|
vm->ResizeView(aView, *aCombinedArea);
|
||||||
|
} else {
|
||||||
|
// If the width is unchanged and the height is not decreased then repaint only the
|
||||||
|
// newly exposed or contracted area, otherwise repaint the union of the old and new areas
|
||||||
|
|
||||||
|
// XXX: We currently invalidate the newly exposed areas only when the
|
||||||
|
// container frame's width is unchanged and the height is either unchanged or increased
|
||||||
|
// This is because some frames do not invalidate themselves properly. see bug 73825.
|
||||||
|
// Once bug 73825 is fixed, we should always pass PR_TRUE instead of
|
||||||
|
// frameSize.width == width && frameSize.height >= height.
|
||||||
|
nsSize frameSize;
|
||||||
|
aFrame->GetSize(frameSize);
|
||||||
|
nsRect newSize(0, 0, frameSize.width, frameSize.height);
|
||||||
|
vm->ResizeView(aView, newSize,
|
||||||
|
(frameSize.width == oldBounds.width && frameSize.height >= oldBounds.height));
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRect newSize(0, 0, frameSize.width, frameSize.height);
|
nsRect newBounds;
|
||||||
if (0 == (aFlags & NS_FRAME_NO_SIZE_VIEW)) {
|
aView->GetBounds(newBounds);
|
||||||
// If the frame has child frames that stick outside the content
|
|
||||||
// area, then size the view large enough to include those child
|
|
||||||
// frames
|
|
||||||
if ((kidState & NS_FRAME_OUTSIDE_CHILDREN) && aCombinedArea) {
|
|
||||||
vm->ResizeView(aView, *aCombinedArea);
|
|
||||||
newSize = *aCombinedArea;
|
|
||||||
} else {
|
|
||||||
nsRect bounds;
|
|
||||||
aView->GetBounds(bounds);
|
|
||||||
// If the width is unchanged and the height is not decreased then repaint only the
|
|
||||||
// newly exposed or contracted area, otherwise repaint the union of the old and new areas
|
|
||||||
|
|
||||||
// XXX: We currently invalidate the newly exposed areas only when the
|
// if the bounds have changed and clipping is enabled, we need to update the clip area
|
||||||
// container frame's width is unchanged and the height is either unchanged or increased
|
// and also possibly the transparency (in case the view grew bigger than the clip area
|
||||||
// This is because some frames do not invalidate themselves properly. see bug 73825.
|
// so clipping is now cutting out part of the view)
|
||||||
// Once bug 73825 is fixed, we should always pass PR_TRUE instead of
|
if (oldBounds != newBounds) {
|
||||||
// frameSize.width == width && frameSize.height >= height.
|
SyncFrameViewAfterSizeChange(aPresContext, aFrame, nsnull, aView, aFlags);
|
||||||
vm->ResizeView(aView, newSize,
|
}
|
||||||
(frameSize.width == bounds.width && frameSize.height >= bounds.height));
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
SyncFrameViewGeometryDependentProperties(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags)
|
||||||
|
{
|
||||||
|
nsCOMPtr<nsIViewManager> vm;
|
||||||
|
aView->GetViewManager(*getter_AddRefs(vm));
|
||||||
|
|
||||||
|
PRBool isCanvas;
|
||||||
|
const nsStyleBackground* bg;
|
||||||
|
PRBool hasBG =
|
||||||
|
nsCSSRendering::FindBackground(aPresContext, aFrame, &bg, &isCanvas);
|
||||||
|
|
||||||
|
// background-attachment: fixed is not really geometry dependent, but
|
||||||
|
// we set it here because it's cheap to do so
|
||||||
|
PRBool fixedBackground = hasBG &&
|
||||||
|
NS_STYLE_BG_ATTACHMENT_FIXED == bg->mBackgroundAttachment;
|
||||||
|
// If the frame has a fixed background attachment, then indicate that the
|
||||||
|
// view's contents should be repainted and not bitblt'd
|
||||||
|
vm->SetViewBitBltEnabled(aView, !fixedBackground);
|
||||||
|
|
||||||
|
PRBool viewHasTransparentContent =
|
||||||
|
!hasBG ||
|
||||||
|
(bg->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT) ||
|
||||||
|
!aFrame->CanPaintBackground();
|
||||||
|
if (isCanvas && viewHasTransparentContent) {
|
||||||
|
nsIView* rootView;
|
||||||
|
vm->GetRootView(rootView);
|
||||||
|
nsIView* rootParent;
|
||||||
|
rootView->GetParent(rootParent);
|
||||||
|
if (nsnull == rootParent) {
|
||||||
|
viewHasTransparentContent = PR_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
nsFrameState kidState;
|
||||||
|
aFrame->GetFrameState(&kidState);
|
||||||
|
|
||||||
|
if (!viewHasTransparentContent) {
|
||||||
|
// If we're showing the view but the frame is hidden, then the view is transparent
|
||||||
|
nsViewVisibility visibility;
|
||||||
|
aView->GetVisibility(visibility);
|
||||||
|
const nsStyleVisibility* vis;
|
||||||
|
::GetStyleData(aStyleContext, &vis);
|
||||||
|
if ((nsViewVisibility_kShow == visibility
|
||||||
|
&& NS_STYLE_VISIBILITY_HIDDEN == vis->mVisible)
|
||||||
|
|| (NS_STYLE_OVERFLOW_VISIBLE == display->mOverflow
|
||||||
|
&& (kidState & NS_FRAME_OUTSIDE_CHILDREN) != 0)) {
|
||||||
|
viewHasTransparentContent = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the frame has visible content that overflows the content area, then we
|
||||||
|
// need the view marked as having transparent content
|
||||||
|
|
||||||
|
// There are two types of clipping:
|
||||||
|
// - 'clip' which only applies to absolutely positioned elements, and is
|
||||||
|
// relative to the element's border edge. 'clip' applies to the entire
|
||||||
|
// element
|
||||||
|
// - 'overflow-clip' which only applies to block-level elements and replaced
|
||||||
|
// elements that have 'overflow' set to 'hidden'. 'overflow-clip' is relative
|
||||||
|
// to the content area and applies to content only (not border or background).
|
||||||
|
// Note that out-of-flow frames like floated or absolutely positioned frames
|
||||||
|
// are block-level, but we can't rely on the 'display' value being set correctly
|
||||||
|
// in the style context...
|
||||||
|
PRBool isBlockLevel = display->IsBlockLevel() || (kidState & NS_FRAME_OUT_OF_FLOW);
|
||||||
|
PRBool hasClip = display->IsAbsolutelyPositioned() && (display->mClipFlags & NS_STYLE_CLIP_RECT);
|
||||||
|
PRBool hasOverflowClip = isBlockLevel && (display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN);
|
||||||
|
if (hasClip || hasOverflowClip) {
|
||||||
|
nsSize frameSize;
|
||||||
|
aFrame->GetSize(frameSize);
|
||||||
|
nsRect clipRect;
|
||||||
|
|
||||||
|
if (hasClip) {
|
||||||
|
// Start with the 'auto' values and then factor in user specified values
|
||||||
|
clipRect.SetRect(0, 0, frameSize.width, frameSize.height);
|
||||||
|
|
||||||
|
if (display->mClipFlags & NS_STYLE_CLIP_RECT) {
|
||||||
|
if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.y = display->mClip.y;
|
||||||
|
}
|
||||||
|
if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.x = display->mClip.x;
|
||||||
|
}
|
||||||
|
if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.width = display->mClip.width;
|
||||||
|
}
|
||||||
|
if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) {
|
||||||
|
clipRect.height = display->mClip.height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasOverflowClip) {
|
||||||
|
const nsStyleBorder* borderStyle;
|
||||||
|
::GetStyleData(aStyleContext, &borderStyle);
|
||||||
|
const nsStylePadding* paddingStyle;
|
||||||
|
::GetStyleData(aStyleContext, &paddingStyle);
|
||||||
|
|
||||||
|
nsMargin border, padding;
|
||||||
|
// XXX We don't support the 'overflow-clip' property yet so just use the
|
||||||
|
// content area (which is the default value) as the clip shape
|
||||||
|
nsRect overflowClipRect(0, 0, frameSize.width, frameSize.height);
|
||||||
|
borderStyle->GetBorder(border);
|
||||||
|
overflowClipRect.Deflate(border);
|
||||||
|
// XXX We need to handle percentage padding
|
||||||
|
if (paddingStyle->GetPadding(padding)) {
|
||||||
|
overflowClipRect.Deflate(padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasClip) {
|
||||||
|
// If both 'clip' and 'overflow-clip' apply then use the intersection
|
||||||
|
// of the two
|
||||||
|
clipRect.IntersectRect(clipRect, overflowClipRect);
|
||||||
|
} else {
|
||||||
|
clipRect = overflowClipRect;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
aView->GetBounds(newSize);
|
|
||||||
nscoord x, y;
|
|
||||||
aView->GetPosition(&x, &y);
|
|
||||||
newSize.x -= x;
|
|
||||||
newSize.y -= y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const nsStyleBackground* bg;
|
nsRect newSize;
|
||||||
const nsStyleVisibility* vis;
|
aView->GetBounds(newSize);
|
||||||
const nsStyleDisplay* display;
|
nscoord x, y;
|
||||||
PRBool isCanvas;
|
aView->GetPosition(&x, &y);
|
||||||
PRBool hasBG =
|
newSize.x -= x;
|
||||||
nsCSSRendering::FindBackground(aPresContext, aFrame, &bg, &isCanvas);
|
newSize.y -= y;
|
||||||
aFrame->GetStyleData(eStyleStruct_Visibility, (const nsStyleStruct*&)vis);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&)display);
|
|
||||||
|
|
||||||
// Set the view's opacity
|
// If part of the view is being clipped out, then mark it transparent
|
||||||
vm->SetViewOpacity(aView, vis->mOpacity);
|
if (clipRect.y > newSize.y
|
||||||
|
|| clipRect.x > newSize.x
|
||||||
|
|| clipRect.XMost() < newSize.XMost()
|
||||||
|
|| clipRect.YMost() < newSize.YMost()) {
|
||||||
|
viewHasTransparentContent = PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set clipping of child views.
|
||||||
|
nsRegion region;
|
||||||
|
region.Copy(nsRectFast(clipRect));
|
||||||
|
vm->SetViewChildClipRegion(aView, ®ion);
|
||||||
|
} else {
|
||||||
|
// Remove clipping of child views.
|
||||||
|
vm->SetViewChildClipRegion(aView, nsnull);
|
||||||
|
}
|
||||||
|
|
||||||
|
vm->SetViewContentTransparency(aView, viewHasTransparentContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsContainerFrame::SyncFrameViewAfterSizeChange(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags)
|
||||||
|
{
|
||||||
|
if (!aView) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIStyleContext> savedStyleContext;
|
||||||
|
if (nsnull == aStyleContext) {
|
||||||
|
aFrame->GetStyleContext(getter_AddRefs(savedStyleContext));
|
||||||
|
aStyleContext = savedStyleContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
nsFrameState kidState;
|
||||||
|
aFrame->GetFrameState(&kidState);
|
||||||
|
|
||||||
|
PRBool isBlockLevel = display->IsBlockLevel() || (kidState & NS_FRAME_OUT_OF_FLOW);
|
||||||
|
PRBool hasClip = display->IsAbsolutelyPositioned() && (display->mClipFlags & NS_STYLE_CLIP_RECT);
|
||||||
|
PRBool hasOverflowClip = isBlockLevel && (display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN);
|
||||||
|
if (hasClip || hasOverflowClip) {
|
||||||
|
SyncFrameViewGeometryDependentProperties(aPresContext, aFrame, aStyleContext, aView, aFlags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nsContainerFrame::SyncFrameViewProperties(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags)
|
||||||
|
{
|
||||||
|
if (!aView) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIViewManager> vm;
|
||||||
|
aView->GetViewManager(*getter_AddRefs(vm));
|
||||||
|
|
||||||
|
nsCOMPtr<nsIStyleContext> savedStyleContext;
|
||||||
|
if (nsnull == aStyleContext) {
|
||||||
|
aFrame->GetStyleContext(getter_AddRefs(savedStyleContext));
|
||||||
|
aStyleContext = savedStyleContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleVisibility* vis;
|
||||||
|
::GetStyleData(aStyleContext, &vis);
|
||||||
|
|
||||||
|
// Set the view's opacity
|
||||||
|
vm->SetViewOpacity(aView, vis->mOpacity);
|
||||||
|
|
||||||
|
// Make sure visibility is correct
|
||||||
|
if (0 == (aFlags & NS_FRAME_NO_VISIBILITY)) {
|
||||||
// See if the view should be hidden or visible
|
// See if the view should be hidden or visible
|
||||||
PRBool viewIsVisible = PR_TRUE;
|
PRBool viewIsVisible = PR_TRUE;
|
||||||
PRBool viewHasTransparentContent =
|
|
||||||
(!hasBG ||
|
|
||||||
(bg->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT) ||
|
|
||||||
!aFrame->CanPaintBackground());
|
|
||||||
if (isCanvas && viewHasTransparentContent) {
|
|
||||||
nsIView* rootView;
|
|
||||||
vm->GetRootView(rootView);
|
|
||||||
nsIView* rootParent;
|
|
||||||
rootView->GetParent(rootParent);
|
|
||||||
if (nsnull == rootParent) {
|
|
||||||
viewHasTransparentContent = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
||||||
viewIsVisible = PR_FALSE;
|
viewIsVisible = PR_FALSE;
|
||||||
|
@ -597,147 +786,106 @@ nsContainerFrame::SyncFrameViewAfterReflow(nsIPresContext* aPresContext,
|
||||||
|
|
||||||
if (frameType == nsLayoutAtoms::scrollFrame || frameType == nsLayoutAtoms::listControlFrame) {
|
if (frameType == nsLayoutAtoms::scrollFrame || frameType == nsLayoutAtoms::listControlFrame) {
|
||||||
viewIsVisible = PR_FALSE;
|
viewIsVisible = PR_FALSE;
|
||||||
|
|
||||||
} else {
|
|
||||||
// If we're a container element, then leave the view visible, but
|
|
||||||
// mark it as having transparent content. The reason we need to
|
|
||||||
// do this is that child elements can override their parent's
|
|
||||||
// hidden visibility and be visible anyway
|
|
||||||
nsIFrame* firstChild;
|
|
||||||
|
|
||||||
aFrame->FirstChild(aPresContext, nsnull, &firstChild);
|
|
||||||
if (firstChild) {
|
|
||||||
// Not a left frame, so the view needs to be visible, but marked
|
|
||||||
// as having transparent content
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
} else {
|
|
||||||
// Leaf frame so go ahead and hide the view
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If the frame has visible content that overflows the content area, then we
|
|
||||||
// need the view marked as having transparent content
|
|
||||||
if (NS_STYLE_OVERFLOW_VISIBLE == display->mOverflow) {
|
|
||||||
if (kidState & NS_FRAME_OUTSIDE_CHILDREN) {
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure visibility is correct
|
|
||||||
if (0 == (aFlags & NS_FRAME_NO_VISIBILITY)) {
|
|
||||||
vm->SetViewVisibility(aView, viewIsVisible ? nsViewVisibility_kShow :
|
|
||||||
nsViewVisibility_kHide);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure z-index is correct
|
|
||||||
PRInt32 zIndex = 0;
|
|
||||||
PRInt32 oldZIndex;
|
|
||||||
PRBool oldAutoZIndex;
|
|
||||||
PRBool oldTopMost;
|
|
||||||
PRBool autoZIndex = PR_FALSE;
|
|
||||||
const nsStylePosition* position;
|
|
||||||
|
|
||||||
aView->GetZIndex(oldZIndex, oldAutoZIndex, oldTopMost);
|
|
||||||
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Position, (const nsStyleStruct*&)position);
|
|
||||||
if (position->mZIndex.GetUnit() == eStyleUnit_Integer) {
|
|
||||||
zIndex = position->mZIndex.GetIntValue();
|
|
||||||
|
|
||||||
} else if (position->mZIndex.GetUnit() == eStyleUnit_Auto) {
|
|
||||||
autoZIndex = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
vm->SetViewZIndex(aView, autoZIndex, zIndex, oldTopMost);
|
|
||||||
|
|
||||||
// There are two types of clipping:
|
|
||||||
// - 'clip' which only applies to absolutely positioned elements, and is
|
|
||||||
// relative to the element's border edge. 'clip' applies to the entire
|
|
||||||
// element
|
|
||||||
// - 'overflow-clip' which only applies to block-level elements and replaced
|
|
||||||
// elements that have 'overflow' set to 'hidden'. 'overflow-clip' is relative
|
|
||||||
// to the content area and applies to content only (not border or background).
|
|
||||||
// Note that out-of-flow frames like floated or absolutely positioned frames
|
|
||||||
// are block-level, but we can't rely on the 'display' value being set correctly
|
|
||||||
// in the style context...
|
|
||||||
PRBool hasClip, hasOverflowClip;
|
|
||||||
PRBool isBlockLevel = display->IsBlockLevel() || (0 != (kidState & NS_FRAME_OUT_OF_FLOW));
|
|
||||||
hasClip = display->IsAbsolutelyPositioned() && (display->mClipFlags & NS_STYLE_CLIP_RECT);
|
|
||||||
hasOverflowClip = isBlockLevel && (display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN);
|
|
||||||
if (hasClip || hasOverflowClip) {
|
|
||||||
nsRect clipRect;
|
|
||||||
|
|
||||||
if (hasClip) {
|
|
||||||
// Start with the 'auto' values and then factor in user specified values
|
|
||||||
clipRect.SetRect(0, 0, frameSize.width, frameSize.height);
|
|
||||||
|
|
||||||
if (display->mClipFlags & NS_STYLE_CLIP_RECT) {
|
|
||||||
if (0 == (NS_STYLE_CLIP_TOP_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.y = display->mClip.y;
|
|
||||||
}
|
|
||||||
if (0 == (NS_STYLE_CLIP_LEFT_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.x = display->mClip.x;
|
|
||||||
}
|
|
||||||
if (0 == (NS_STYLE_CLIP_RIGHT_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.width = display->mClip.width;
|
|
||||||
}
|
|
||||||
if (0 == (NS_STYLE_CLIP_BOTTOM_AUTO & display->mClipFlags)) {
|
|
||||||
clipRect.height = display->mClip.height;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasOverflowClip) {
|
|
||||||
const nsStyleBorder* borderStyle;
|
|
||||||
const nsStylePadding* paddingStyle;
|
|
||||||
nsMargin border, padding;
|
|
||||||
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Border, (const nsStyleStruct*&)borderStyle);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Padding, (const nsStyleStruct*&)paddingStyle);
|
|
||||||
|
|
||||||
// XXX We don't support the 'overflow-clip' property yet so just use the
|
|
||||||
// content area (which is the default value) as the clip shape
|
|
||||||
nsRect overflowClipRect(0, 0, frameSize.width, frameSize.height);
|
|
||||||
borderStyle->GetBorder(border);
|
|
||||||
overflowClipRect.Deflate(border);
|
|
||||||
// XXX We need to handle percentage padding
|
|
||||||
if (paddingStyle->GetPadding(padding)) {
|
|
||||||
overflowClipRect.Deflate(padding);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hasClip) {
|
|
||||||
// If both 'clip' and 'overflow-clip' apply then use the intersection
|
|
||||||
// of the two
|
|
||||||
clipRect.IntersectRect(clipRect, overflowClipRect);
|
|
||||||
} else {
|
|
||||||
clipRect = overflowClipRect;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If part of the view is being clipped out, then mark it transparent
|
|
||||||
if (clipRect.y > newSize.y
|
|
||||||
|| clipRect.x > newSize.x
|
|
||||||
|| clipRect.XMost() < newSize.XMost()
|
|
||||||
|| clipRect.YMost() < newSize.YMost()) {
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set clipping of child views.
|
|
||||||
nsRegion region;
|
|
||||||
region.Copy(clipRect);
|
|
||||||
vm->SetViewChildClipRegion(aView, ®ion);
|
|
||||||
} else {
|
} else {
|
||||||
// Remove clipping of child views.
|
// if the view is for a popup, don't show the view if the popup is closed
|
||||||
vm->SetViewChildClipRegion(aView, nsnull);
|
nsCOMPtr<nsIWidget> widget;
|
||||||
|
aView->GetWidget(*getter_AddRefs(widget));
|
||||||
|
if (widget) {
|
||||||
|
nsWindowType windowType;
|
||||||
|
widget->GetWindowType(windowType);
|
||||||
|
if (windowType == eWindowType_popup) {
|
||||||
|
widget->IsVisible(viewIsVisible);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure content transparency is correct
|
vm->SetViewVisibility(aView, viewIsVisible ? nsViewVisibility_kShow :
|
||||||
if (viewIsVisible) {
|
nsViewVisibility_kHide);
|
||||||
vm->SetViewContentTransparency(aView, viewHasTransparentContent);
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
// See if the frame is being relatively positioned or absolutely
|
||||||
|
// positioned
|
||||||
|
PRBool isTopMostView = display->IsPositioned();
|
||||||
|
|
||||||
|
// Make sure z-index is correct
|
||||||
|
const nsStylePosition* position;
|
||||||
|
::GetStyleData(aStyleContext, &position);
|
||||||
|
|
||||||
|
PRInt32 zIndex = 0;
|
||||||
|
PRBool autoZIndex = PR_FALSE;
|
||||||
|
|
||||||
|
if (position->mZIndex.GetUnit() == eStyleUnit_Integer) {
|
||||||
|
zIndex = position->mZIndex.GetIntValue();
|
||||||
|
} else if (position->mZIndex.GetUnit() == eStyleUnit_Auto) {
|
||||||
|
autoZIndex = PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
vm->SetViewZIndex(aView, autoZIndex, zIndex, isTopMostView);
|
||||||
|
|
||||||
|
SyncFrameViewGeometryDependentProperties(aPresContext, aFrame, aStyleContext, aView, aFlags);
|
||||||
|
}
|
||||||
|
|
||||||
|
PRBool
|
||||||
|
nsContainerFrame::FrameNeedsView(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext)
|
||||||
|
{
|
||||||
|
const nsStyleVisibility* vis;
|
||||||
|
::GetStyleData(aStyleContext, &vis);
|
||||||
|
|
||||||
|
if (vis->mOpacity != 1.0f) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// See if the frame has a fixed background attachment
|
||||||
|
const nsStyleBackground *color;
|
||||||
|
PRBool isCanvas;
|
||||||
|
PRBool hasBackground =
|
||||||
|
nsCSSRendering::FindBackground(aPresContext, aFrame, &color, &isCanvas);
|
||||||
|
if (hasBackground &&
|
||||||
|
NS_STYLE_BG_ATTACHMENT_FIXED == color->mBackgroundAttachment) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
|
||||||
|
if (NS_STYLE_POSITION_RELATIVE == display->mPosition) {
|
||||||
|
return PR_TRUE;
|
||||||
|
} else if (display->IsAbsolutelyPositioned()) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsCOMPtr<nsIAtom> pseudoTag;
|
||||||
|
aStyleContext->GetPseudoType(*getter_AddRefs(pseudoTag));
|
||||||
|
if (pseudoTag == nsLayoutAtoms::scrolledContentPseudo) {
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// See if the frame is block-level and has 'overflow' set to 'hidden'. If
|
||||||
|
// so, then we need to give it a view so clipping
|
||||||
|
// of any child views works correctly. Note that if it's floated it is also
|
||||||
|
// block-level, but we can't trust that the style context 'display' value is
|
||||||
|
// set correctly
|
||||||
|
if ((display->IsBlockLevel() || display->IsFloating()) &&
|
||||||
|
(display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN)) {
|
||||||
|
// XXX Check for the frame being a block frame and only force a view
|
||||||
|
// in that case, because adding a view for box frames seems to cause
|
||||||
|
// problems for XUL...
|
||||||
|
nsCOMPtr<nsIAtom> frameType;
|
||||||
|
|
||||||
|
aFrame->GetFrameType(getter_AddRefs(frameType));
|
||||||
|
if ((frameType == nsLayoutAtoms::blockFrame) ||
|
||||||
|
(frameType == nsLayoutAtoms::areaFrame)) {
|
||||||
|
return PR_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return PR_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -100,14 +100,7 @@ public:
|
||||||
static void PositionFrameView(nsIPresContext* aPresContext,
|
static void PositionFrameView(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aKidFrame);
|
nsIFrame* aKidFrame);
|
||||||
|
|
||||||
// Sets several view attributes:
|
// Set the view's size and position after its frame has been reflowed.
|
||||||
// - if requested sizes the frame's view based on the current size and origin.
|
|
||||||
// Takes into account the combined area and (if overflow is visible) whether
|
|
||||||
// the frame has children that extend outside
|
|
||||||
// - opacity
|
|
||||||
// - visibility
|
|
||||||
// - content transparency
|
|
||||||
// - clip
|
|
||||||
//
|
//
|
||||||
// Flags:
|
// Flags:
|
||||||
// NS_FRAME_NO_MOVE_VIEW - don't position the frame's view. Set this if you
|
// NS_FRAME_NO_MOVE_VIEW - don't position the frame's view. Set this if you
|
||||||
|
@ -119,6 +112,34 @@ public:
|
||||||
const nsRect* aCombinedArea,
|
const nsRect* aCombinedArea,
|
||||||
PRUint32 aFlags = 0);
|
PRUint32 aFlags = 0);
|
||||||
|
|
||||||
|
// Sets view attributes from the frame style that depend on the view's size
|
||||||
|
// (clip, transparency). This needs to be called if you change the size of
|
||||||
|
// a view and the view's frame could have clipping set on it.
|
||||||
|
// @param aStyleContext can be null, in which case the frame's style context is used
|
||||||
|
static void SyncFrameViewAfterSizeChange(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags = 0);
|
||||||
|
|
||||||
|
// Sets the view's attributes from the frame style.
|
||||||
|
// - opacity
|
||||||
|
// - visibility
|
||||||
|
// - content transparency
|
||||||
|
// - clip
|
||||||
|
// Call this when one of these styles changes or when the view has just
|
||||||
|
// been created.
|
||||||
|
// @param aStyleContext can be null, in which case the frame's style context is used
|
||||||
|
static void SyncFrameViewProperties(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame,
|
||||||
|
nsIStyleContext* aStyleContext,
|
||||||
|
nsIView* aView,
|
||||||
|
PRUint32 aFlags = 0);
|
||||||
|
|
||||||
|
// Returns PR_TRUE if the frame requires a view
|
||||||
|
static PRBool FrameNeedsView(nsIPresContext* aPresContext,
|
||||||
|
nsIFrame* aFrame, nsIStyleContext* aStyleContext);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invokes the WillReflow() function, positions the frame and its view (if
|
* Invokes the WillReflow() function, positions the frame and its view (if
|
||||||
* requested), and then calls Reflow(). If the reflow succeeds and the child
|
* requested), and then calls Reflow(). If the reflow succeeds and the child
|
||||||
|
|
|
@ -427,21 +427,6 @@ nsHTMLContainerFrame::ReparentFrameViewList(nsIPresContext* aPresContext,
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PRBool
|
|
||||||
IsContainerContent(nsIFrame* aFrame)
|
|
||||||
{
|
|
||||||
nsIContent* content;
|
|
||||||
PRBool result = PR_FALSE;
|
|
||||||
|
|
||||||
aFrame->GetContent(&content);
|
|
||||||
if (content) {
|
|
||||||
content->CanContainChildren(result);
|
|
||||||
NS_RELEASE(content);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsHTMLContainerFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
nsHTMLContainerFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
|
@ -449,244 +434,92 @@ nsHTMLContainerFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aContentParentFrame,
|
nsIFrame* aContentParentFrame,
|
||||||
PRBool aForce)
|
PRBool aForce)
|
||||||
{
|
{
|
||||||
PRBool isTopMostView = PR_FALSE;
|
|
||||||
nsIView* view;
|
nsIView* view;
|
||||||
aFrame->GetView(aPresContext, &view);
|
aFrame->GetView(aPresContext, &view);
|
||||||
|
if (nsnull != view) {
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// If we don't yet have a view, see if we need a view
|
// If we don't yet have a view, see if we need a view
|
||||||
if (nsnull == view) {
|
if (!(aForce || FrameNeedsView(aPresContext, aFrame, aStyleContext))) {
|
||||||
PRBool fixedBackgroundAttachment = PR_FALSE;
|
// don't need a view
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
// Get nsStyleColor and nsStyleDisplay
|
// Create a view
|
||||||
const nsStyleDisplay* display = (const nsStyleDisplay*)
|
nsIFrame* parent = nsnull;
|
||||||
aStyleContext->GetStyleData(eStyleStruct_Display);
|
aFrame->GetParentWithView(aPresContext, &parent);
|
||||||
const nsStylePosition* position = (const nsStylePosition*)
|
NS_ASSERTION(parent, "GetParentWithView failed");
|
||||||
aStyleContext->GetStyleData(eStyleStruct_Position);
|
|
||||||
const nsStyleVisibility* vis = (const nsStyleVisibility*)
|
nsIView* parentView = nsnull;
|
||||||
aStyleContext->GetStyleData(eStyleStruct_Visibility);
|
parent->GetView(aPresContext, &parentView);
|
||||||
|
NS_ASSERTION(parentView, "no parent with view");
|
||||||
|
|
||||||
|
// Create a view
|
||||||
|
static NS_DEFINE_CID(kViewCID, NS_VIEW_CID);
|
||||||
|
nsresult result = CallCreateInstance(kViewCID, &view);
|
||||||
|
if (NS_FAILED(result)) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
if (vis->mOpacity != 1.0f) {
|
nsCOMPtr<nsIViewManager> viewManager;
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
parentView->GetViewManager(*getter_AddRefs(viewManager));
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p opacity=%g",
|
NS_ASSERTION(nsnull != viewManager, "null view manager");
|
||||||
aFrame, vis->mOpacity));
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame has a fixed background attachment
|
|
||||||
const nsStyleBackground *color;
|
|
||||||
PRBool isCanvas;
|
|
||||||
PRBool hasBackground =
|
|
||||||
nsCSSRendering::FindBackground(aPresContext, aFrame, &color, &isCanvas);
|
|
||||||
if (hasBackground &&
|
|
||||||
NS_STYLE_BG_ATTACHMENT_FIXED == color->mBackgroundAttachment) {
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
fixedBackgroundAttachment = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame is being relatively positioned or absolutely
|
// Initialize the view
|
||||||
// positioned
|
nsRect bounds;
|
||||||
if (!aForce) {
|
aFrame->GetRect(bounds);
|
||||||
if (NS_STYLE_POSITION_RELATIVE == display->mPosition) {
|
view->Init(viewManager, bounds, parentView);
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p relatively positioned",
|
|
||||||
aFrame));
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
isTopMostView = PR_TRUE;
|
|
||||||
} else if (display->IsAbsolutelyPositioned()) {
|
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p absolutely positioned",
|
|
||||||
aFrame));
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
isTopMostView = PR_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NS_STYLE_POSITION_FIXED == display->mPosition) {
|
SyncFrameViewProperties(aPresContext, aFrame, aStyleContext, view);
|
||||||
isTopMostView = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame is a scrolled frame
|
// Insert the view into the view hierarchy. If the parent view is a
|
||||||
if (!aForce) {
|
// scrolling view we need to do this differently
|
||||||
nsIAtom* pseudoTag;
|
nsIScrollableView* scrollingView;
|
||||||
aStyleContext->GetPseudoType(pseudoTag);
|
if (NS_SUCCEEDED(CallQueryInterface(parentView, &scrollingView))) {
|
||||||
if (pseudoTag == nsLayoutAtoms::scrolledContentPseudo) {
|
scrollingView->SetScrolledView(view);
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
} else {
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: scrolled frame=%p", aFrame));
|
// XXX Drop it at the end of the document order until we can do better
|
||||||
aForce = PR_TRUE;
|
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
||||||
}
|
|
||||||
NS_IF_RELEASE(pseudoTag);
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the frame is block-level and has 'overflow' set to 'hidden'. If
|
if (nsnull != aContentParentFrame) {
|
||||||
// so and it can have child frames, then we need to give it a view so clipping
|
// If, for some reason, GetView below fails to initialize zParentView,
|
||||||
// of any child views works correctly. Note that if it's floated it is also
|
// then ensure that we completely bypass InsertZPlaceholder below.
|
||||||
// block-level, but we can't trust that the style context 'display' value is
|
// The effect will be as if we never knew about aContentParentFrame
|
||||||
// set correctly
|
// in the first place, so at least this code won't be doing any damage.
|
||||||
if (!aForce) {
|
nsIView* zParentView = parentView;
|
||||||
if ((display->IsBlockLevel() || display->IsFloating()) &&
|
|
||||||
(display->mOverflow == NS_STYLE_OVERFLOW_HIDDEN)) {
|
aContentParentFrame->GetView(aPresContext, &zParentView);
|
||||||
|
|
||||||
// The reason for the check of whether it can contain children is just
|
if (nsnull == zParentView) {
|
||||||
// to avoid giving it a view unnecessarily
|
nsIFrame* zParentFrame = nsnull;
|
||||||
if (::IsContainerContent(aFrame)) {
|
|
||||||
// XXX Check for the frame being a block frame and only force a view
|
|
||||||
// in that case, because adding a view for box frames seems to cause
|
|
||||||
// problems for XUL...
|
|
||||||
nsIAtom* frameType;
|
|
||||||
|
|
||||||
aFrame->GetFrameType(&frameType);
|
|
||||||
if ((frameType == nsLayoutAtoms::blockFrame) ||
|
|
||||||
(frameType == nsLayoutAtoms::areaFrame)) {
|
|
||||||
aForce = PR_TRUE;
|
|
||||||
}
|
|
||||||
NS_IF_RELEASE(frameType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aForce) {
|
|
||||||
// Create a view
|
|
||||||
nsIFrame* parent = nsnull;
|
|
||||||
nsIView* parentView = nsnull;
|
|
||||||
|
|
||||||
aFrame->GetParentWithView(aPresContext, &parent);
|
|
||||||
NS_ASSERTION(parent, "GetParentWithView failed");
|
|
||||||
parent->GetView(aPresContext, &parentView);
|
|
||||||
NS_ASSERTION(parentView, "no parent with view");
|
|
||||||
|
|
||||||
// Create a view
|
|
||||||
static NS_DEFINE_CID(kViewCID, NS_VIEW_CID);
|
|
||||||
|
|
||||||
nsresult result = nsComponentManager::CreateInstance(kViewCID,
|
|
||||||
nsnull,
|
|
||||||
NS_GET_IID(nsIView),
|
|
||||||
(void **)&view);
|
|
||||||
if (NS_OK == result) {
|
|
||||||
nsIViewManager* viewManager;
|
|
||||||
parentView->GetViewManager(viewManager);
|
|
||||||
NS_ASSERTION(nsnull != viewManager, "null view manager");
|
|
||||||
|
|
||||||
// Initialize the view
|
|
||||||
nsRect bounds;
|
|
||||||
aFrame->GetRect(bounds);
|
|
||||||
view->Init(viewManager, bounds, parentView);
|
|
||||||
|
|
||||||
// If the frame has a fixed background attachment, then indicate that the
|
|
||||||
// view's contents should be repainted and not bitblt'd
|
|
||||||
if (fixedBackgroundAttachment) {
|
|
||||||
viewManager->SetViewBitBltEnabled(view, PR_FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert the view into the view hierarchy. If the parent view is a
|
aContentParentFrame->GetParentWithView(aPresContext, &zParentFrame);
|
||||||
// scrolling view we need to do this differently
|
NS_ASSERTION(zParentFrame, "GetParentWithView failed");
|
||||||
nsIScrollableView* scrollingView;
|
zParentFrame->GetView(aPresContext, &zParentView);
|
||||||
if (NS_SUCCEEDED(parentView->QueryInterface(NS_GET_IID(nsIScrollableView), (void**)&scrollingView))) {
|
NS_ASSERTION(zParentView, "no parent with view");
|
||||||
scrollingView->SetScrolledView(view);
|
}
|
||||||
} else {
|
|
||||||
PRInt32 zIndex = 0;
|
if (zParentView != parentView) {
|
||||||
PRBool autoZIndex = PR_FALSE;
|
viewManager->InsertZPlaceholder(zParentView, view, nsnull, PR_TRUE);
|
||||||
|
|
||||||
// Get the z-index to use
|
|
||||||
if (position->mZIndex.GetUnit() == eStyleUnit_Integer) {
|
|
||||||
zIndex = position->mZIndex.GetIntValue();
|
|
||||||
} else if (position->mZIndex.GetUnit() == eStyleUnit_Auto) {
|
|
||||||
autoZIndex = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
viewManager->SetViewZIndex(view, autoZIndex, zIndex, isTopMostView);
|
|
||||||
// XXX Drop it at the end of the document order until we can do better
|
|
||||||
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
|
||||||
|
|
||||||
if (nsnull != aContentParentFrame) {
|
|
||||||
// If, for some reason, GetView below fails to initialize zParentView,
|
|
||||||
// then ensure that we completely bypass InsertZPlaceholder below.
|
|
||||||
// The effect will be as if we never knew about aContentParentFrame
|
|
||||||
// in the first place, so at least this code won't be doing any damage.
|
|
||||||
nsIView* zParentView = parentView;
|
|
||||||
|
|
||||||
aContentParentFrame->GetView(aPresContext, &zParentView);
|
|
||||||
|
|
||||||
if (nsnull == zParentView) {
|
|
||||||
nsIFrame* zParentFrame = nsnull;
|
|
||||||
|
|
||||||
aContentParentFrame->GetParentWithView(aPresContext, &zParentFrame);
|
|
||||||
NS_ASSERTION(zParentFrame, "GetParentWithView failed");
|
|
||||||
zParentFrame->GetView(aPresContext, &zParentView);
|
|
||||||
NS_ASSERTION(zParentView, "no parent with view");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (zParentView != parentView) {
|
|
||||||
viewManager->InsertZPlaceholder(zParentView, view, nsnull, PR_TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// See if the view should be hidden
|
|
||||||
PRBool viewIsVisible = PR_TRUE;
|
|
||||||
PRBool viewHasTransparentContent =
|
|
||||||
!isCanvas &&
|
|
||||||
(!hasBackground ||
|
|
||||||
(color->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT));
|
|
||||||
|
|
||||||
|
|
||||||
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
else if (NS_STYLE_VISIBILITY_HIDDEN == vis->mVisible) {
|
|
||||||
// If it has a widget, hide the view because the widget can't deal with it
|
|
||||||
nsIWidget* widget = nsnull;
|
|
||||||
view->GetWidget(widget);
|
|
||||||
if (widget) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
NS_RELEASE(widget);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// If it's a container element, then leave the view visible, but
|
|
||||||
// mark it as having transparent content. The reason we need to
|
|
||||||
// do this is that child elements can override their parent's
|
|
||||||
// hidden visibility and be visible anyway.
|
|
||||||
//
|
|
||||||
// Because this function is called before processing the content
|
|
||||||
// object's child elements, we can't tell if it's a leaf by looking
|
|
||||||
// at whether the frame has any child frames
|
|
||||||
if (::IsContainerContent(aFrame)) {
|
|
||||||
// The view needs to be visible, but marked as having transparent
|
|
||||||
// content
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
} else {
|
|
||||||
// Go ahead and hide the view
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (viewIsVisible) {
|
|
||||||
if (viewHasTransparentContent) {
|
|
||||||
viewManager->SetViewContentTransparency(view, PR_TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
viewManager->SetViewVisibility(view, nsViewVisibility_kHide);
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX If it's fixed positioned, then create a widget so it floats
|
|
||||||
// above the scrolling area
|
|
||||||
if (NS_STYLE_POSITION_FIXED == display->mPosition) {
|
|
||||||
view->CreateWidget(kCChildCID);
|
|
||||||
}
|
|
||||||
|
|
||||||
viewManager->SetViewOpacity(view, vis->mOpacity);
|
|
||||||
NS_RELEASE(viewManager);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remember our view
|
|
||||||
aFrame->SetView(aPresContext, view);
|
|
||||||
|
|
||||||
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
|
||||||
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p view=%p",
|
|
||||||
aFrame));
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XXX If it's fixed positioned, then create a widget so it floats
|
||||||
|
// above the scrolling area
|
||||||
|
const nsStyleDisplay* display;
|
||||||
|
::GetStyleData(aStyleContext, &display);
|
||||||
|
if (NS_STYLE_POSITION_FIXED == display->mPosition) {
|
||||||
|
view->CreateWidget(kCChildCID);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remember our view
|
||||||
|
aFrame->SetView(aPresContext, view);
|
||||||
|
|
||||||
|
NS_FRAME_LOG(NS_FRAME_TRACE_CALLS,
|
||||||
|
("nsHTMLContainerFrame::CreateViewForFrame: frame=%p view=%p",
|
||||||
|
aFrame));
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -419,45 +419,17 @@ nsScrollFrame::CreateScrollingView(nsIPresContext* aPresContext)
|
||||||
nsresult rv = CallCreateInstance(kScrollingViewCID, &view);
|
nsresult rv = CallCreateInstance(kScrollingViewCID, &view);
|
||||||
|
|
||||||
if (NS_OK == rv) {
|
if (NS_OK == rv) {
|
||||||
const nsStylePosition* position = (const nsStylePosition*)
|
|
||||||
mStyleContext->GetStyleData(eStyleStruct_Position);
|
|
||||||
const nsStyleBorder* borderStyle = (const nsStyleBorder*)
|
|
||||||
mStyleContext->GetStyleData(eStyleStruct_Border);
|
|
||||||
const nsStyleDisplay* display = (const nsStyleDisplay*)
|
|
||||||
mStyleContext->GetStyleData(eStyleStruct_Display);
|
|
||||||
const nsStyleVisibility* vis =
|
|
||||||
(const nsStyleVisibility*)mStyleContext->GetStyleData(eStyleStruct_Visibility);
|
|
||||||
|
|
||||||
// Get the z-index
|
|
||||||
PRInt32 zIndex = 0;
|
|
||||||
PRBool autoZIndex = PR_FALSE;
|
|
||||||
|
|
||||||
if (eStyleUnit_Integer == position->mZIndex.GetUnit()) {
|
|
||||||
zIndex = position->mZIndex.GetIntValue();
|
|
||||||
} else if (position->mZIndex.GetUnit() == eStyleUnit_Auto) {
|
|
||||||
autoZIndex = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize the scrolling view
|
// Initialize the scrolling view
|
||||||
view->Init(viewManager, mRect, parentView,
|
view->Init(viewManager, mRect, parentView);
|
||||||
vis->IsVisible() ?
|
|
||||||
nsViewVisibility_kShow :
|
|
||||||
nsViewVisibility_kHide);
|
|
||||||
|
|
||||||
// Initialize the view's z-index
|
SyncFrameViewProperties(aPresContext, this, mStyleContext, view);
|
||||||
viewManager->SetViewZIndex(view, autoZIndex, zIndex);
|
|
||||||
|
|
||||||
// Insert the view into the view hierarchy
|
// Insert the view into the view hierarchy
|
||||||
// XXX Put it last in document order, until we can do better
|
// XXX Put it last in document order, until we can do better
|
||||||
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
||||||
|
|
||||||
// Set the view's opacity
|
const nsStyleDisplay* display;
|
||||||
viewManager->SetViewOpacity(view, vis->mOpacity);
|
::GetStyleData(mStyleContext, &display);
|
||||||
|
|
||||||
// Because we only paint the border and we don't paint a background,
|
|
||||||
// inform the view manager that we have transparent content
|
|
||||||
viewManager->SetViewContentTransparency(view, PR_TRUE);
|
|
||||||
|
|
||||||
// If it's fixed positioned, then create a widget too
|
// If it's fixed positioned, then create a widget too
|
||||||
CreateScrollingViewWidget(view, display);
|
CreateScrollingViewWidget(view, display);
|
||||||
|
|
||||||
|
@ -520,6 +492,8 @@ nsScrollFrame::CreateScrollingView(nsIPresContext* aPresContext)
|
||||||
}
|
}
|
||||||
scrollingView->SetScrollPreference(scrollPref);
|
scrollingView->SetScrollPreference(scrollPref);
|
||||||
|
|
||||||
|
const nsStyleBorder* borderStyle;
|
||||||
|
::GetStyleData(mStyleContext, &borderStyle);
|
||||||
// Set the scrolling view's insets to whatever our border is
|
// Set the scrolling view's insets to whatever our border is
|
||||||
nsMargin border;
|
nsMargin border;
|
||||||
if (!borderStyle->GetBorder(border)) {
|
if (!borderStyle->GetBorder(border)) {
|
||||||
|
|
|
@ -103,6 +103,8 @@ public:
|
||||||
nsFramePaintLayer aWhichLayer,
|
nsFramePaintLayer aWhichLayer,
|
||||||
PRUint32 aFlags = 0);
|
PRUint32 aFlags = 0);
|
||||||
|
|
||||||
|
virtual PRBool CanPaintBackground() { return PR_FALSE; }
|
||||||
|
|
||||||
NS_IMETHOD GetFrameForPoint(nsIPresContext* aPresContext,
|
NS_IMETHOD GetFrameForPoint(nsIPresContext* aPresContext,
|
||||||
const nsPoint& aPoint,
|
const nsPoint& aPoint,
|
||||||
nsFramePaintLayer aWhichLayer,
|
nsFramePaintLayer aWhichLayer,
|
||||||
|
|
|
@ -60,6 +60,7 @@
|
||||||
#include "nsGUIEvent.h"
|
#include "nsGUIEvent.h"
|
||||||
#include "nsLayoutAtoms.h"
|
#include "nsLayoutAtoms.h"
|
||||||
#include "nsIServiceManager.h"
|
#include "nsIServiceManager.h"
|
||||||
|
#include "nsContainerFrame.h"
|
||||||
#ifdef ACCESSIBILITY
|
#ifdef ACCESSIBILITY
|
||||||
#include "nsIAccessibilityService.h"
|
#include "nsIAccessibilityService.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -283,14 +284,15 @@ nsImageControlFrame::Init(nsIPresContext* aPresContext,
|
||||||
// the view's size is not know yet, but its size will be kept in synch with our frame.
|
// the view's size is not know yet, but its size will be kept in synch with our frame.
|
||||||
nsRect boundBox(0, 0, 0, 0);
|
nsRect boundBox(0, 0, 0, 0);
|
||||||
result = view->Init(viewMan, boundBox, parView);
|
result = view->Init(viewMan, boundBox, parView);
|
||||||
viewMan->SetViewContentTransparency(view, PR_TRUE);
|
|
||||||
|
nsContainerFrame::SyncFrameViewProperties(aPresContext, this, aContext, view);
|
||||||
|
|
||||||
|
// this gets reset during reflow anyway
|
||||||
|
// viewMan->SetViewContentTransparency(view, PR_TRUE);
|
||||||
|
|
||||||
// XXX put the view last in document order until we know how to do better
|
// XXX put the view last in document order until we know how to do better
|
||||||
viewMan->InsertChild(parView, view, nsnull, PR_TRUE);
|
viewMan->InsertChild(parView, view, nsnull, PR_TRUE);
|
||||||
SetView(aPresContext, view);
|
SetView(aPresContext, view);
|
||||||
|
|
||||||
const nsStyleVisibility* vis = (const nsStyleVisibility*) mStyleContext->GetStyleData(eStyleStruct_Visibility);
|
|
||||||
// set the opacity
|
|
||||||
viewMan->SetViewOpacity(view, vis->mOpacity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
|
|
|
@ -9930,111 +9930,13 @@ static PRBool gInApplyRenderingChangeToTree = PR_FALSE;
|
||||||
static void
|
static void
|
||||||
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager);
|
nsIViewManager* aViewManager,
|
||||||
|
nsChangeHint aChange);
|
||||||
static void
|
|
||||||
SyncAndInvalidateView(nsIPresContext* aPresContext,
|
|
||||||
nsIView* aView,
|
|
||||||
nsIFrame* aFrame,
|
|
||||||
nsIViewManager* aViewManager)
|
|
||||||
{
|
|
||||||
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
|
||||||
"should only be called within ApplyRenderingChangeToTree");
|
|
||||||
|
|
||||||
const nsStyleBackground* bg;
|
|
||||||
const nsStyleDisplay* disp;
|
|
||||||
const nsStyleVisibility* vis;
|
|
||||||
PRBool isCanvas;
|
|
||||||
PRBool hasBG =
|
|
||||||
nsCSSRendering::FindBackground(aPresContext, aFrame, &bg, &isCanvas);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Display, (const nsStyleStruct*&) disp);
|
|
||||||
aFrame->GetStyleData(eStyleStruct_Visibility, (const nsStyleStruct*&) vis);
|
|
||||||
|
|
||||||
aViewManager->SetViewOpacity(aView, vis->mOpacity);
|
|
||||||
|
|
||||||
// See if the view should be hidden or visible
|
|
||||||
PRBool viewIsVisible = PR_TRUE;
|
|
||||||
PRBool viewHasTransparentContent =
|
|
||||||
!isCanvas &&
|
|
||||||
(!hasBG ||
|
|
||||||
(bg->mBackgroundFlags & NS_STYLE_BG_COLOR_TRANSPARENT));
|
|
||||||
|
|
||||||
if (NS_STYLE_VISIBILITY_COLLAPSE == vis->mVisible) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
else if (NS_STYLE_VISIBILITY_HIDDEN == vis->mVisible) {
|
|
||||||
// If it has a widget, hide the view because the widget can't deal with it
|
|
||||||
nsIWidget* widget = nsnull;
|
|
||||||
aView->GetWidget(widget);
|
|
||||||
if (widget) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
NS_RELEASE(widget);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// If it's a scroll frame, then hide the view. This means that
|
|
||||||
// child elements can't override their parent's visibility, but
|
|
||||||
// it's not practical to leave it visible in all cases because
|
|
||||||
// the scrollbars will be showing
|
|
||||||
nsIAtom* frameType;
|
|
||||||
aFrame->GetFrameType(&frameType);
|
|
||||||
|
|
||||||
if (frameType == nsLayoutAtoms::scrollFrame) {
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
} else {
|
|
||||||
// If it's a container element, then leave the view visible, but
|
|
||||||
// mark it as having transparent content. The reason we need to
|
|
||||||
// do this is that child elements can override their parent's
|
|
||||||
// hidden visibility and be visible anyway
|
|
||||||
nsIFrame* firstChild;
|
|
||||||
|
|
||||||
aFrame->FirstChild(aPresContext, nsnull, &firstChild);
|
|
||||||
if (firstChild) {
|
|
||||||
// It's not a left frame, so the view needs to be visible, but
|
|
||||||
// marked as having transparent content
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
} else {
|
|
||||||
// It's a leaf frame so go ahead and hide the view
|
|
||||||
viewIsVisible = PR_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
NS_IF_RELEASE(frameType);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// if the view is for a popup, don't show the view if the popup is closed
|
|
||||||
nsCOMPtr<nsIWidget> widget;
|
|
||||||
aView->GetWidget(*getter_AddRefs(widget));
|
|
||||||
if (widget) {
|
|
||||||
nsWindowType windowType;
|
|
||||||
widget->GetWindowType(windowType);
|
|
||||||
if (windowType == eWindowType_popup)
|
|
||||||
widget->IsVisible(viewIsVisible);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the frame has visible content that overflows the content area, then we
|
|
||||||
// need the view marked as having transparent content
|
|
||||||
if (NS_STYLE_OVERFLOW_VISIBLE == disp->mOverflow) {
|
|
||||||
nsFrameState frameState;
|
|
||||||
|
|
||||||
aFrame->GetFrameState(&frameState);
|
|
||||||
if (frameState & NS_FRAME_OUTSIDE_CHILDREN) {
|
|
||||||
viewHasTransparentContent = PR_TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (viewIsVisible) {
|
|
||||||
aViewManager->SetViewContentTransparency(aView, viewHasTransparentContent);
|
|
||||||
aViewManager->SetViewVisibility(aView, nsViewVisibility_kShow);
|
|
||||||
aViewManager->UpdateView(aView, NS_VMREFRESH_NO_SYNC);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
aViewManager->SetViewVisibility(aView, nsViewVisibility_kHide);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager, nsRect& aBoundsRect)
|
nsIViewManager* aViewManager, nsRect& aBoundsRect,
|
||||||
|
nsChangeHint aChange)
|
||||||
{
|
{
|
||||||
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
||||||
"should only be called within ApplyRenderingChangeToTree");
|
"should only be called within ApplyRenderingChangeToTree");
|
||||||
|
@ -10043,7 +9945,12 @@ UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
aFrame->GetView(aPresContext, &view);
|
aFrame->GetView(aPresContext, &view);
|
||||||
|
|
||||||
if (view) {
|
if (view) {
|
||||||
SyncAndInvalidateView(aPresContext, view, aFrame, aViewManager);
|
if (aChange & nsChangeHint_RepaintFrame) {
|
||||||
|
aViewManager->UpdateView(view, NS_VMREFRESH_NO_SYNC);
|
||||||
|
}
|
||||||
|
if (aChange & nsChangeHint_SyncFrameView) {
|
||||||
|
nsContainerFrame::SyncFrameViewProperties(aPresContext, aFrame, nsnull, view);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRect bounds;
|
nsRect bounds;
|
||||||
|
@ -10071,11 +9978,11 @@ UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
nsIFrame* outOfFlowFrame = ((nsPlaceholderFrame*)child)->GetOutOfFlowFrame();
|
nsIFrame* outOfFlowFrame = ((nsPlaceholderFrame*)child)->GetOutOfFlowFrame();
|
||||||
NS_ASSERTION(outOfFlowFrame, "no out-of-flow frame");
|
NS_ASSERTION(outOfFlowFrame, "no out-of-flow frame");
|
||||||
|
|
||||||
DoApplyRenderingChangeToTree(aPresContext, outOfFlowFrame, aViewManager);
|
DoApplyRenderingChangeToTree(aPresContext, outOfFlowFrame, aViewManager, aChange);
|
||||||
}
|
}
|
||||||
else { // regular frame
|
else { // regular frame
|
||||||
nsRect childBounds;
|
nsRect childBounds;
|
||||||
UpdateViewsForTree(aPresContext, child, aViewManager, childBounds);
|
UpdateViewsForTree(aPresContext, child, aViewManager, childBounds, aChange);
|
||||||
bounds.UnionRect(bounds, childBounds);
|
bounds.UnionRect(bounds, childBounds);
|
||||||
}
|
}
|
||||||
NS_IF_RELEASE(frameType);
|
NS_IF_RELEASE(frameType);
|
||||||
|
@ -10093,7 +10000,8 @@ UpdateViewsForTree(nsIPresContext* aPresContext, nsIFrame* aFrame,
|
||||||
static void
|
static void
|
||||||
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager)
|
nsIViewManager* aViewManager,
|
||||||
|
nsChangeHint aChange)
|
||||||
{
|
{
|
||||||
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
NS_PRECONDITION(gInApplyRenderingChangeToTree,
|
||||||
"should only be called within ApplyRenderingChangeToTree");
|
"should only be called within ApplyRenderingChangeToTree");
|
||||||
|
@ -10114,9 +10022,9 @@ DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
aFrame->GetOffsetFromView(aPresContext, viewOffset, &parentView);
|
aFrame->GetOffsetFromView(aPresContext, viewOffset, &parentView);
|
||||||
NS_ASSERTION(nsnull != parentView, "no view");
|
NS_ASSERTION(nsnull != parentView, "no view");
|
||||||
}
|
}
|
||||||
UpdateViewsForTree(aPresContext, aFrame, aViewManager, invalidRect);
|
UpdateViewsForTree(aPresContext, aFrame, aViewManager, invalidRect, aChange);
|
||||||
|
|
||||||
if (! view) { // if frame has view, will already be invalidated
|
if (! view && (aChange & nsChangeHint_RepaintFrame)) { // if frame has view, will already be invalidated
|
||||||
// XXX Instead of calling this we should really be calling
|
// XXX Instead of calling this we should really be calling
|
||||||
// Invalidate on on the nsFrame (which does this)
|
// Invalidate on on the nsFrame (which does this)
|
||||||
const nsStyleOutline* outline;
|
const nsStyleOutline* outline;
|
||||||
|
@ -10138,14 +10046,20 @@ DoApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
static void
|
static void
|
||||||
ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
nsIFrame* aFrame,
|
nsIFrame* aFrame,
|
||||||
nsIViewManager* aViewManager)
|
nsIViewManager* aViewManager,
|
||||||
|
nsChangeHint aChange)
|
||||||
{
|
{
|
||||||
nsCOMPtr<nsIPresShell> shell;
|
nsCOMPtr<nsIPresShell> shell;
|
||||||
aPresContext->GetShell(getter_AddRefs(shell));
|
aPresContext->GetShell(getter_AddRefs(shell));
|
||||||
PRBool isPaintingSuppressed = PR_FALSE;
|
PRBool isPaintingSuppressed = PR_FALSE;
|
||||||
shell->IsPaintingSuppressed(&isPaintingSuppressed);
|
shell->IsPaintingSuppressed(&isPaintingSuppressed);
|
||||||
if (isPaintingSuppressed)
|
if (isPaintingSuppressed) {
|
||||||
return; // Don't allow synchronous rendering changes when painting is turned off.
|
// Don't allow synchronous rendering changes when painting is turned off.
|
||||||
|
aChange = NS_SubtractHint(aChange, nsChangeHint_RepaintFrame);
|
||||||
|
if (!aChange) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If the frame's background is propagated to an ancestor, walk up to
|
// If the frame's background is propagated to an ancestor, walk up to
|
||||||
// that ancestor.
|
// that ancestor.
|
||||||
|
@ -10179,7 +10093,7 @@ ApplyRenderingChangeToTree(nsIPresContext* aPresContext,
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
gInApplyRenderingChangeToTree = PR_TRUE;
|
gInApplyRenderingChangeToTree = PR_TRUE;
|
||||||
#endif
|
#endif
|
||||||
DoApplyRenderingChangeToTree(aPresContext, aFrame, viewManager);
|
DoApplyRenderingChangeToTree(aPresContext, aFrame, viewManager, aChange);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
gInApplyRenderingChangeToTree = PR_FALSE;
|
gInApplyRenderingChangeToTree = PR_FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
@ -10250,7 +10164,7 @@ nsCSSFrameConstructor::StyleChangeReflow(nsIPresContext* aPresContext,
|
||||||
// This isn't the most efficient way to do it, but it saves code
|
// This isn't the most efficient way to do it, but it saves code
|
||||||
// size and doesn't add much cost compared to the reflow..
|
// size and doesn't add much cost compared to the reflow..
|
||||||
if (ancestor != aFrame)
|
if (ancestor != aFrame)
|
||||||
ApplyRenderingChangeToTree(aPresContext, ancestor, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, ancestor, nsnull, nsChangeHint_RepaintFrame);
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -10349,11 +10263,8 @@ nsCSSFrameConstructor::ProcessRestyledFrames(nsStyleChangeList& aChangeList,
|
||||||
if (hint & nsChangeHint_ReflowFrame) {
|
if (hint & nsChangeHint_ReflowFrame) {
|
||||||
StyleChangeReflow(aPresContext, frame, nsnull);
|
StyleChangeReflow(aPresContext, frame, nsnull);
|
||||||
}
|
}
|
||||||
if (hint & nsChangeHint_RepaintFrame) {
|
if (hint & (nsChangeHint_RepaintFrame | nsChangeHint_SyncFrameView)) {
|
||||||
ApplyRenderingChangeToTree(aPresContext, frame, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, frame, nsnull, hint);
|
||||||
}
|
|
||||||
if (hint & nsChangeHint_SyncFrameView) {
|
|
||||||
// TBD: split out view sync from ApplyRenderingChange and friends
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10463,7 +10374,7 @@ nsCSSFrameConstructor::ContentStatesChanged(nsIPresContext* aPresContext,
|
||||||
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame1, app1))
|
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame1, app1))
|
||||||
theme->WidgetStateChanged(primaryFrame1, app1, nsnull, &repaint);
|
theme->WidgetStateChanged(primaryFrame1, app1, nsnull, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame1, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame1, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(frameChange1 & nsChangeHint_ReconstructDoc) && (primaryFrame2)) {
|
if (!(frameChange1 & nsChangeHint_ReconstructDoc) && (primaryFrame2)) {
|
||||||
|
@ -10477,7 +10388,7 @@ nsCSSFrameConstructor::ContentStatesChanged(nsIPresContext* aPresContext,
|
||||||
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame2, app2))
|
if (theme && theme->ThemeSupportsWidget(aPresContext, primaryFrame2, app2))
|
||||||
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10523,7 +10434,7 @@ nsCSSFrameConstructor::ContentStatesChanged(nsIPresContext* aPresContext,
|
||||||
if (theme)
|
if (theme)
|
||||||
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
theme->WidgetStateChanged(primaryFrame2, app2, nsnull, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame2, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
// max change needed for top level frames
|
// max change needed for top level frames
|
||||||
|
@ -10701,7 +10612,7 @@ nsCSSFrameConstructor::AttributeChanged(nsIPresContext* aPresContext,
|
||||||
PRBool repaint = PR_FALSE;
|
PRBool repaint = PR_FALSE;
|
||||||
theme->WidgetStateChanged(primaryFrame, disp->mAppearance, aAttribute, &repaint);
|
theme->WidgetStateChanged(primaryFrame, disp->mAppearance, aAttribute, &repaint);
|
||||||
if (repaint)
|
if (repaint)
|
||||||
ApplyRenderingChangeToTree(aPresContext, primaryFrame, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, primaryFrame, nsnull, nsChangeHint_RepaintFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10791,11 +10702,6 @@ nsCSSFrameConstructor::StyleRuleChanged(nsIPresContext* aPresContext,
|
||||||
|
|
||||||
PRBool reframe = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
PRBool reframe = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
||||||
| nsChangeHint_Unknown)) != 0;
|
| nsChangeHint_Unknown)) != 0;
|
||||||
PRBool reflow = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
|
||||||
| nsChangeHint_ReflowFrame | nsChangeHint_Unknown)) != 0;
|
|
||||||
PRBool render = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
|
||||||
| nsChangeHint_ReflowFrame | nsChangeHint_RepaintFrame
|
|
||||||
| nsChangeHint_Unknown)) != 0;
|
|
||||||
PRBool restyle = (aHint & ~(nsChangeHint_AttrChange)) != 0;
|
PRBool restyle = (aHint & ~(nsChangeHint_AttrChange)) != 0;
|
||||||
// TBD: add "review" to update view?
|
// TBD: add "review" to update view?
|
||||||
|
|
||||||
|
@ -10809,14 +10715,20 @@ nsCSSFrameConstructor::StyleRuleChanged(nsIPresContext* aPresContext,
|
||||||
result = ReconstructDocElementHierarchy(aPresContext);
|
result = ReconstructDocElementHierarchy(aPresContext);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
PRBool reflow = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
||||||
|
| nsChangeHint_ReflowFrame | nsChangeHint_Unknown)) != 0;
|
||||||
|
PRBool renderOrSync = (aHint & (nsChangeHint_ReconstructDoc | nsChangeHint_ReconstructFrame
|
||||||
|
| nsChangeHint_ReflowFrame | nsChangeHint_RepaintFrame
|
||||||
|
| nsChangeHint_Unknown | nsChangeHint_SyncFrameView)) != 0;
|
||||||
|
|
||||||
// XXX hack, skip the root and scrolling frames
|
// XXX hack, skip the root and scrolling frames
|
||||||
frame->FirstChild(aPresContext, nsnull, &frame);
|
frame->FirstChild(aPresContext, nsnull, &frame);
|
||||||
frame->FirstChild(aPresContext, nsnull, &frame);
|
frame->FirstChild(aPresContext, nsnull, &frame);
|
||||||
if (reflow) {
|
if (reflow) {
|
||||||
StyleChangeReflow(aPresContext, frame, nsnull);
|
StyleChangeReflow(aPresContext, frame, nsnull);
|
||||||
}
|
}
|
||||||
else if (render) {
|
if (renderOrSync) {
|
||||||
ApplyRenderingChangeToTree(aPresContext, frame, nsnull);
|
ApplyRenderingChangeToTree(aPresContext, frame, nsnull, aHint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -95,203 +95,203 @@
|
||||||
// support them correctly the old constants need to be renamed and
|
// support them correctly the old constants need to be renamed and
|
||||||
// new ones should be entered.
|
// new ones should be entered.
|
||||||
|
|
||||||
CSS_PROP(-moz-appearance, appearance, MozAppearance, REFLOW)
|
CSS_PROP(-moz-appearance, appearance, MozAppearance, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-border-radius, _moz_border_radius, MozBorderRadius, VISUAL)
|
CSS_PROP(-moz-border-radius, _moz_border_radius, MozBorderRadius, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-topleft, _moz_border_radius_topLeft, MozBorderRadiusTopleft, VISUAL)
|
CSS_PROP(-moz-border-radius-topleft, _moz_border_radius_topLeft, MozBorderRadiusTopleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-topright, _moz_border_radius_topRight, MozBorderRadiusTopright, VISUAL)
|
CSS_PROP(-moz-border-radius-topright, _moz_border_radius_topRight, MozBorderRadiusTopright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-bottomleft, _moz_border_radius_bottomLeft, MozBorderRadiusBottomleft, VISUAL)
|
CSS_PROP(-moz-border-radius-bottomleft, _moz_border_radius_bottomLeft, MozBorderRadiusBottomleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-radius-bottomright, _moz_border_radius_bottomRight, MozBorderRadiusBottomright, VISUAL)
|
CSS_PROP(-moz-border-radius-bottomright, _moz_border_radius_bottomRight, MozBorderRadiusBottomright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius, _moz_outline_radius, MozOutlineRadius, VISUAL)
|
CSS_PROP(-moz-outline-radius, _moz_outline_radius, MozOutlineRadius, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-topleft, _moz_outline_radius_topLeft, MozOutlineRadiusTopleft, VISUAL)
|
CSS_PROP(-moz-outline-radius-topleft, _moz_outline_radius_topLeft, MozOutlineRadiusTopleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-topright, _moz_outline_radius_topRight, MozOutlineRadiusTopright, VISUAL)
|
CSS_PROP(-moz-outline-radius-topright, _moz_outline_radius_topRight, MozOutlineRadiusTopright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-bottomleft, _moz_outline_radius_bottomLeft, MozOutlineRadiusBottomleft, VISUAL)
|
CSS_PROP(-moz-outline-radius-bottomleft, _moz_outline_radius_bottomLeft, MozOutlineRadiusBottomleft, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline-radius-bottomright, _moz_outline_radius_bottomRight, MozOutlineRadiusBottomright, VISUAL)
|
CSS_PROP(-moz-outline-radius-bottomright, _moz_outline_radius_bottomRight, MozOutlineRadiusBottomright, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(azimuth, azimuth, Azimuth, AURAL)
|
CSS_PROP(azimuth, azimuth, Azimuth, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(background, background, Background, VISUAL)
|
CSS_PROP(background, background, Background, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-attachment, background_attachment, BackgroundAttachment, FRAMECHANGE)
|
CSS_PROP(background-attachment, background_attachment, BackgroundAttachment, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(background-color, background_color, BackgroundColor, VISUAL)
|
CSS_PROP(background-color, background_color, BackgroundColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-image, background_image, BackgroundImage, VISUAL)
|
CSS_PROP(background-image, background_image, BackgroundImage, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-position, background_position, BackgroundPosition, VISUAL)
|
CSS_PROP(background-position, background_position, BackgroundPosition, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(background-repeat, background_repeat, BackgroundRepeat, VISUAL)
|
CSS_PROP(background-repeat, background_repeat, BackgroundRepeat, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(-x-background-x-position, background_x_position, BackgroundXPosition, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-background-x-position, background_x_position, BackgroundXPosition, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-background-y-position, background_y_position, BackgroundYPosition, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-background-y-position, background_y_position, BackgroundYPosition, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP(-moz-binding, binding, MozBinding, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-binding, binding, MozBinding, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(border, border, Border, REFLOW)
|
CSS_PROP(border, border, Border, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-bottom, border_bottom, BorderBottom, REFLOW)
|
CSS_PROP(border-bottom, border_bottom, BorderBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-bottom-color, border_bottom_color, BorderBottomColor, VISUAL)
|
CSS_PROP(border-bottom-color, border_bottom_color, BorderBottomColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-bottom-colors, border_bottom_colors, MozBorderBottomColors, VISUAL)
|
CSS_PROP(-moz-border-bottom-colors, border_bottom_colors, MozBorderBottomColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-bottom-style, border_bottom_style, BorderBottomStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-bottom-style, border_bottom_style, BorderBottomStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-bottom-width, border_bottom_width, BorderBottomWidth, REFLOW)
|
CSS_PROP(border-bottom-width, border_bottom_width, BorderBottomWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-collapse, border_collapse, BorderCollapse, FRAMECHANGE)
|
CSS_PROP(border-collapse, border_collapse, BorderCollapse, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(border-color, border_color, BorderColor, VISUAL)
|
CSS_PROP(border-color, border_color, BorderColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-left, border_left, BorderLeft, REFLOW)
|
CSS_PROP(border-left, border_left, BorderLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-left-color, border_left_color, BorderLeftColor, VISUAL)
|
CSS_PROP(border-left-color, border_left_color, BorderLeftColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-left-colors, border_left_colors, MozBorderLeftColors, VISUAL)
|
CSS_PROP(-moz-border-left-colors, border_left_colors, MozBorderLeftColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-left-style, border_left_style, BorderLeftStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-left-style, border_left_style, BorderLeftStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-left-width, border_left_width, BorderLeftWidth, REFLOW)
|
CSS_PROP(border-left-width, border_left_width, BorderLeftWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-right, border_right, BorderRight, REFLOW)
|
CSS_PROP(border-right, border_right, BorderRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-right-color, border_right_color, BorderRightColor, VISUAL)
|
CSS_PROP(border-right-color, border_right_color, BorderRightColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-right-colors, border_right_colors, MozBorderRightColors, VISUAL)
|
CSS_PROP(-moz-border-right-colors, border_right_colors, MozBorderRightColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-right-style, border_right_style, BorderRightStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-right-style, border_right_style, BorderRightStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-right-width, border_right_width, BorderRightWidth, REFLOW)
|
CSS_PROP(border-right-width, border_right_width, BorderRightWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-spacing, border_spacing, BorderSpacing, REFLOW)
|
CSS_PROP(border-spacing, border_spacing, BorderSpacing, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-style, border_style, BorderStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-style, border_style, BorderStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-top, border_top, BorderTop, REFLOW)
|
CSS_PROP(border-top, border_top, BorderTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-top-color, border_top_color, BorderTopColor, VISUAL)
|
CSS_PROP(border-top-color, border_top_color, BorderTopColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-border-top-colors, border_top_colors, MozBorderTopColors, VISUAL)
|
CSS_PROP(-moz-border-top-colors, border_top_colors, MozBorderTopColors, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(border-top-style, border_top_style, BorderTopStyle, REFLOW) // on/off will need reflow
|
CSS_PROP(border-top-style, border_top_style, BorderTopStyle, NS_STYLE_HINT_REFLOW) // on/off will need reflow
|
||||||
CSS_PROP(border-top-width, border_top_width, BorderTopWidth, REFLOW)
|
CSS_PROP(border-top-width, border_top_width, BorderTopWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(border-width, border_width, BorderWidth, REFLOW)
|
CSS_PROP(border-width, border_width, BorderWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-border-x-spacing, border_x_spacing, BorderXSpacing, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-border-x-spacing, border_x_spacing, BorderXSpacing, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-border-y-spacing, border_y_spacing, BorderYSpacing, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-border-y-spacing, border_y_spacing, BorderYSpacing, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(bottom, bottom, Bottom, REFLOW)
|
CSS_PROP(bottom, bottom, Bottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-box-align, box_align, MozBoxAlign, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-align, box_align, MozBoxAlign, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-direction, box_direction, MozBoxDirection, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-direction, box_direction, MozBoxDirection, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-flex, box_flex, MozBoxFlex, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-flex, box_flex, MozBoxFlex, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-flex-group, box_flex_group, MozBoxFlexGroup, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-flex-group, box_flex_group, MozBoxFlexGroup, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-orient, box_orient, MozBoxOrient, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-orient, box_orient, MozBoxOrient, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-pack, box_pack, MozBoxPack, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-pack, box_pack, MozBoxPack, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-sizing, box_sizing, MozBoxSizing, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-box-sizing, box_sizing, MozBoxSizing, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-box-ordinal-group, box_ordinal_group, MozBoxOrdinalGroup, FRAMECHANGE)
|
CSS_PROP(-moz-box-ordinal-group, box_ordinal_group, MozBoxOrdinalGroup, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(caption-side, caption_side, CaptionSide, REFLOW)
|
CSS_PROP(caption-side, caption_side, CaptionSide, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(clear, clear, Clear, REFLOW)
|
CSS_PROP(clear, clear, Clear, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(clip, clip, Clip, REFLOW)
|
CSS_PROP(clip, clip, Clip, nsChangeHint_SyncFrameView)
|
||||||
CSS_PROP_INTERNAL(-x-clip-bottom, clip_bottom, ClipBottom, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-bottom, clip_bottom, ClipBottom, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-clip-left, clip_left, ClipLeft, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-left, clip_left, ClipLeft, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-clip-right, clip_right, ClipRight, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-right, clip_right, ClipRight, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-clip-top, clip_top, ClipTop, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-clip-top, clip_top, ClipTop, nsChangeHint_SyncFrameView) // XXX bug 3935
|
||||||
CSS_PROP(color, color, Color, VISUAL)
|
CSS_PROP(color, color, Color, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(content, content, Content, FRAMECHANGE)
|
CSS_PROP(content, content, Content, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(counter-increment, counter_increment, CounterIncrement, REFLOW)
|
CSS_PROP(counter-increment, counter_increment, CounterIncrement, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(counter-reset, counter_reset, CounterReset, REFLOW)
|
CSS_PROP(counter-reset, counter_reset, CounterReset, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-counter-increment, _moz_counter_increment, MozCounterIncrement, REFLOW) // XXX bug 137285
|
CSS_PROP(-moz-counter-increment, _moz_counter_increment, MozCounterIncrement, NS_STYLE_HINT_REFLOW) // XXX bug 137285
|
||||||
CSS_PROP(-moz-counter-reset, _moz_counter_reset, MozCounterReset, REFLOW) // XXX bug 137285
|
CSS_PROP(-moz-counter-reset, _moz_counter_reset, MozCounterReset, NS_STYLE_HINT_REFLOW) // XXX bug 137285
|
||||||
CSS_PROP(cue, cue, Cue, AURAL)
|
CSS_PROP(cue, cue, Cue, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(cue-after, cue_after, CueAfter, AURAL)
|
CSS_PROP(cue-after, cue_after, CueAfter, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(cue-before, cue_before, CueBefore, AURAL)
|
CSS_PROP(cue-before, cue_before, CueBefore, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(cursor, cursor, Cursor, VISUAL)
|
CSS_PROP(cursor, cursor, Cursor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(direction, direction, Direction, REFLOW)
|
CSS_PROP(direction, direction, Direction, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(display, display, Display, FRAMECHANGE)
|
CSS_PROP(display, display, Display, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(elevation, elevation, Elevation, AURAL)
|
CSS_PROP(elevation, elevation, Elevation, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(empty-cells, empty_cells, EmptyCells, VISUAL)
|
CSS_PROP(empty-cells, empty_cells, EmptyCells, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(float, float, CssFloat, FRAMECHANGE)
|
CSS_PROP(float, float, CssFloat, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(-moz-float-edge, float_edge, MozFloatEdge, REFLOW) // XXX bug 3935
|
CSS_PROP(-moz-float-edge, float_edge, MozFloatEdge, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(font, font, Font, REFLOW)
|
CSS_PROP(font, font, Font, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-family, font_family, FontFamily, REFLOW)
|
CSS_PROP(font-family, font_family, FontFamily, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-size, font_size, FontSize, REFLOW)
|
CSS_PROP(font-size, font_size, FontSize, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-size-adjust, font_size_adjust, FontSizeAdjust, REFLOW)
|
CSS_PROP(font-size-adjust, font_size_adjust, FontSizeAdjust, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-stretch, font_stretch, FontStretch, REFLOW)
|
CSS_PROP(font-stretch, font_stretch, FontStretch, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-style, font_style, FontStyle, REFLOW)
|
CSS_PROP(font-style, font_style, FontStyle, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-variant, font_variant, FontVariant, REFLOW)
|
CSS_PROP(font-variant, font_variant, FontVariant, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(font-weight, font_weight, FontWeight, REFLOW)
|
CSS_PROP(font-weight, font_weight, FontWeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-force-broken-image-icon, force_broken_image_icon, MozForceBrokenImageIcon, FRAMECHANGE) // bug 58646
|
CSS_PROP(-moz-force-broken-image-icon, force_broken_image_icon, MozForceBrokenImageIcon, NS_STYLE_HINT_FRAMECHANGE) // bug 58646
|
||||||
CSS_PROP(height, height, Height, REFLOW)
|
CSS_PROP(height, height, Height, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-image-region, image_region, MozImageRegion, REFLOW)
|
CSS_PROP(-moz-image-region, image_region, MozImageRegion, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-bottom, image_region_bottom, MozImageRegionBottom, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-bottom, image_region_bottom, MozImageRegionBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-left, image_region_left, MozImageRegionLeft, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-left, image_region_left, MozImageRegionLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-right, image_region_right, MozImageRegionRight, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-right, image_region_right, MozImageRegionRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-image-region-top, image_region_top, MozImageRegionTop, REFLOW)
|
CSS_PROP_INTERNAL(-x-image-region-top, image_region_top, MozImageRegionTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-key-equivalent, key_equivalent, MozKeyEquivalent, CONTENT) // This will need some other notification, but what? // XXX bug 3935
|
CSS_PROP(-moz-key-equivalent, key_equivalent, MozKeyEquivalent, NS_STYLE_HINT_CONTENT) // This will need some other notification, but what? // XXX bug 3935
|
||||||
CSS_PROP(left, left, Left, REFLOW)
|
CSS_PROP(left, left, Left, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(letter-spacing, letter_spacing, LetterSpacing, REFLOW)
|
CSS_PROP(letter-spacing, letter_spacing, LetterSpacing, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(line-height, line_height, LineHeight, REFLOW)
|
CSS_PROP(line-height, line_height, LineHeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style, list_style, ListStyle, REFLOW)
|
CSS_PROP(list-style, list_style, ListStyle, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style-image, list_style_image, ListStyleImage, REFLOW)
|
CSS_PROP(list-style-image, list_style_image, ListStyleImage, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style-position, list_style_position, ListStylePosition, REFLOW)
|
CSS_PROP(list-style-position, list_style_position, ListStylePosition, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(list-style-type, list_style_type, ListStyleType, REFLOW)
|
CSS_PROP(list-style-type, list_style_type, ListStyleType, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin, margin, Margin, REFLOW)
|
CSS_PROP(margin, margin, Margin, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-bottom, margin_bottom, MarginBottom, REFLOW)
|
CSS_PROP(margin-bottom, margin_bottom, MarginBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-left, margin_left, MarginLeft, REFLOW)
|
CSS_PROP(margin-left, margin_left, MarginLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-right, margin_right, MarginRight, REFLOW)
|
CSS_PROP(margin-right, margin_right, MarginRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(margin-top, margin_top, MarginTop, REFLOW)
|
CSS_PROP(margin-top, margin_top, MarginTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(marker-offset, marker_offset, MarkerOffset, REFLOW)
|
CSS_PROP(marker-offset, marker_offset, MarkerOffset, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(marks, marks, Marks, VISUAL)
|
CSS_PROP(marks, marks, Marks, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(max-height, max_height, MaxHeight, REFLOW)
|
CSS_PROP(max-height, max_height, MaxHeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(max-width, max_width, MaxWidth, REFLOW)
|
CSS_PROP(max-width, max_width, MaxWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(min-height, min_height, MinHeight, REFLOW)
|
CSS_PROP(min-height, min_height, MinHeight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(min-width, min_width, MinWidth, REFLOW)
|
CSS_PROP(min-width, min_width, MinWidth, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-opacity, opacity, MozOpacity, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-opacity, opacity, MozOpacity, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(orphans, orphans, Orphans, REFLOW)
|
CSS_PROP(orphans, orphans, Orphans, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(outline, outline, Outline, VISUAL)
|
CSS_PROP(outline, outline, Outline, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(outline, outline_color, OutlineColor, VISUAL)
|
CSS_PROP(outline, outline_color, OutlineColor, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(outline, outline_style, OutlineStyle, VISUAL)
|
CSS_PROP(outline, outline_style, OutlineStyle, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(outline, outline_width, OutlineWidth, VISUAL)
|
CSS_PROP(outline, outline_width, OutlineWidth, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(-moz-outline, _moz_outline, MozOutline, VISUAL) // XXX This is temporary fix for nsbeta3+ Bug 48973, turning outline into -moz-outline XXX bug 48973
|
CSS_PROP(-moz-outline, _moz_outline, MozOutline, NS_STYLE_HINT_VISUAL) // XXX This is temporary fix for nsbeta3+ Bug 48973, turning outline into -moz-outline XXX bug 48973
|
||||||
CSS_PROP(-moz-outline-color, _moz_outline_color, MozOutlineColor, VISUAL) // XXX bug 48973
|
CSS_PROP(-moz-outline-color, _moz_outline_color, MozOutlineColor, NS_STYLE_HINT_VISUAL) // XXX bug 48973
|
||||||
CSS_PROP(-moz-outline-style, _moz_outline_style, MozOutlineStyle, VISUAL) // XXX bug 48973
|
CSS_PROP(-moz-outline-style, _moz_outline_style, MozOutlineStyle, NS_STYLE_HINT_VISUAL) // XXX bug 48973
|
||||||
CSS_PROP(-moz-outline-width, _moz_outline_width, MozOutlineWidth, VISUAL) // XXX bug 48973
|
CSS_PROP(-moz-outline-width, _moz_outline_width, MozOutlineWidth, NS_STYLE_HINT_VISUAL) // XXX bug 48973
|
||||||
CSS_PROP(overflow, overflow, Overflow, FRAMECHANGE)
|
CSS_PROP(overflow, overflow, Overflow, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(padding, padding, Padding, REFLOW)
|
CSS_PROP(padding, padding, Padding, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-bottom, padding_bottom, PaddingBottom, REFLOW)
|
CSS_PROP(padding-bottom, padding_bottom, PaddingBottom, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-left, padding_left, PaddingLeft, REFLOW)
|
CSS_PROP(padding-left, padding_left, PaddingLeft, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-right, padding_right, PaddingRight, REFLOW)
|
CSS_PROP(padding-right, padding_right, PaddingRight, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(padding-top, padding_top, PaddingTop, REFLOW)
|
CSS_PROP(padding-top, padding_top, PaddingTop, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page, page, Page, REFLOW)
|
CSS_PROP(page, page, Page, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page-break-after, page_break_after, PageBreakAfter, REFLOW)
|
CSS_PROP(page-break-after, page_break_after, PageBreakAfter, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page-break-before, page_break_before, PageBreakBefore, REFLOW)
|
CSS_PROP(page-break-before, page_break_before, PageBreakBefore, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(page-break-inside, page_break_inside, PageBreakInside, REFLOW)
|
CSS_PROP(page-break-inside, page_break_inside, PageBreakInside, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(pause, pause, Pause, AURAL)
|
CSS_PROP(pause, pause, Pause, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pause-after, pause_after, PauseAfter, AURAL)
|
CSS_PROP(pause-after, pause_after, PauseAfter, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pause-before, pause_before, PauseBefore, AURAL)
|
CSS_PROP(pause-before, pause_before, PauseBefore, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pitch, pitch, Pitch, AURAL)
|
CSS_PROP(pitch, pitch, Pitch, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(pitch-range, pitch_range, PitchRange, AURAL)
|
CSS_PROP(pitch-range, pitch_range, PitchRange, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(play-during, play_during, PlayDuring, AURAL)
|
CSS_PROP(play-during, play_during, PlayDuring, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP_INTERNAL(-x-play-during-flags, play_during_flags, PlayDuringFlags, AURAL) // XXX why is this here?
|
CSS_PROP_INTERNAL(-x-play-during-flags, play_during_flags, PlayDuringFlags, NS_STYLE_HINT_AURAL) // XXX why is this here?
|
||||||
CSS_PROP(position, position, Position, FRAMECHANGE)
|
CSS_PROP(position, position, Position, NS_STYLE_HINT_FRAMECHANGE)
|
||||||
CSS_PROP(quotes, quotes, Quotes, REFLOW)
|
CSS_PROP(quotes, quotes, Quotes, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-quotes-close, quotes_close, QuotesClose, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-quotes-close, quotes_close, QuotesClose, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-quotes-open, quotes_open, QuotesOpen, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-quotes-open, quotes_open, QuotesOpen, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(-moz-resizer, resizer, MozResizer, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-resizer, resizer, MozResizer, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(richness, richness, Richness, AURAL)
|
CSS_PROP(richness, richness, Richness, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(right, right, Right, REFLOW)
|
CSS_PROP(right, right, Right, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(size, size, Size, REFLOW)
|
CSS_PROP(size, size, Size, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP_INTERNAL(-x-size-height, size_height, SizeHeight, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-size-height, size_height, SizeHeight, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-size-width, size_width, SizeWidth, REFLOW) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-size-width, size_width, SizeWidth, NS_STYLE_HINT_REFLOW) // XXX bug 3935
|
||||||
CSS_PROP(speak, speak, Speak, AURAL)
|
CSS_PROP(speak, speak, Speak, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speak-header, speak_header, SpeakHeader, AURAL)
|
CSS_PROP(speak-header, speak_header, SpeakHeader, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speak-numeral, speak_numeral, SpeakNumeral, AURAL)
|
CSS_PROP(speak-numeral, speak_numeral, SpeakNumeral, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speak-punctuation, speak_punctuation, SpeakPunctuation, AURAL)
|
CSS_PROP(speak-punctuation, speak_punctuation, SpeakPunctuation, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(speech-rate, speech_rate, SpeechRate, AURAL)
|
CSS_PROP(speech-rate, speech_rate, SpeechRate, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(stress, stress, Stress, AURAL)
|
CSS_PROP(stress, stress, Stress, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(table-layout, table_layout, TableLayout, REFLOW)
|
CSS_PROP(table-layout, table_layout, TableLayout, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(text-align, text_align, TextAlign, REFLOW)
|
CSS_PROP(text-align, text_align, TextAlign, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(text-decoration, text_decoration, TextDecoration, VISUAL)
|
CSS_PROP(text-decoration, text_decoration, TextDecoration, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP(text-indent, text_indent, TextIndent, REFLOW)
|
CSS_PROP(text-indent, text_indent, TextIndent, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(text-shadow, text_shadow, TextShadow, VISUAL)
|
CSS_PROP(text-shadow, text_shadow, TextShadow, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-color, text_shadow_color, TextShadowColor, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-color, text_shadow_color, TextShadowColor, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-radius, text_shadow_radius, TextShadowRadius, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-radius, text_shadow_radius, TextShadowRadius, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-x, text_shadow_x, TextShadowX, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-x, text_shadow_x, TextShadowX, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP_INTERNAL(-x-text-shadow-y, text_shadow_y, TextShadowY, VISUAL) // XXX bug 3935
|
CSS_PROP_INTERNAL(-x-text-shadow-y, text_shadow_y, TextShadowY, NS_STYLE_HINT_VISUAL) // XXX bug 3935
|
||||||
CSS_PROP(text-transform, text_transform, TextTransform, REFLOW)
|
CSS_PROP(text-transform, text_transform, TextTransform, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(top, top, Top, REFLOW)
|
CSS_PROP(top, top, Top, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(unicode-bidi, unicode_bidi, UnicodeBidi, REFLOW)
|
CSS_PROP(unicode-bidi, unicode_bidi, UnicodeBidi, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(-moz-user-focus, user_focus, MozUserFocus, CONTENT) // XXX bug 3935
|
CSS_PROP(-moz-user-focus, user_focus, MozUserFocus, NS_STYLE_HINT_CONTENT) // XXX bug 3935
|
||||||
CSS_PROP(-moz-user-input, user_input, MozUserInput, FRAMECHANGE) // XXX ??? // XXX bug 3935
|
CSS_PROP(-moz-user-input, user_input, MozUserInput, NS_STYLE_HINT_FRAMECHANGE) // XXX ??? // XXX bug 3935
|
||||||
CSS_PROP(-moz-user-modify, user_modify, MozUserModify, FRAMECHANGE) // XXX bug 3935
|
CSS_PROP(-moz-user-modify, user_modify, MozUserModify, NS_STYLE_HINT_FRAMECHANGE) // XXX bug 3935
|
||||||
CSS_PROP(-moz-user-select, user_select, MozUserSelect, CONTENT) // XXX bug 3935
|
CSS_PROP(-moz-user-select, user_select, MozUserSelect, NS_STYLE_HINT_CONTENT) // XXX bug 3935
|
||||||
CSS_PROP(vertical-align, vertical_align, VerticalAlign, REFLOW)
|
CSS_PROP(vertical-align, vertical_align, VerticalAlign, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(visibility, visibility, Visibility, REFLOW) // reflow for collapse
|
CSS_PROP(visibility, visibility, Visibility, NS_STYLE_HINT_REFLOW) // reflow for collapse
|
||||||
CSS_PROP(voice-family, voice_family, VoiceFamily, AURAL)
|
CSS_PROP(voice-family, voice_family, VoiceFamily, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(volume, volume, Volume, AURAL)
|
CSS_PROP(volume, volume, Volume, NS_STYLE_HINT_AURAL)
|
||||||
CSS_PROP(white-space, white_space, WhiteSpace, REFLOW)
|
CSS_PROP(white-space, white_space, WhiteSpace, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(widows, widows, Widows, REFLOW)
|
CSS_PROP(widows, widows, Widows, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(width, width, Width, REFLOW)
|
CSS_PROP(width, width, Width, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(word-spacing, word_spacing, WordSpacing, REFLOW)
|
CSS_PROP(word-spacing, word_spacing, WordSpacing, NS_STYLE_HINT_REFLOW)
|
||||||
CSS_PROP(z-index, z_index, ZIndex, REFLOW)
|
CSS_PROP(z-index, z_index, ZIndex, NS_STYLE_HINT_REFLOW)
|
||||||
#ifdef MOZ_SVG
|
#ifdef MOZ_SVG
|
||||||
// XXX treat SVG's CSS Properties as internal for now.
|
// XXX treat SVG's CSS Properties as internal for now.
|
||||||
// Do we want to create an nsIDOMSVGCSS2Properties interface?
|
// Do we want to create an nsIDOMSVGCSS2Properties interface?
|
||||||
CSS_PROP_INTERNAL(fill, fill, Fill, VISUAL)
|
CSS_PROP_INTERNAL(fill, fill, Fill, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(fill-opacity, fill_opacity, FillOpacity, VISUAL)
|
CSS_PROP_INTERNAL(fill-opacity, fill_opacity, FillOpacity, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(fill-rule, fill_rule, FillRule, VISUAL)
|
CSS_PROP_INTERNAL(fill-rule, fill_rule, FillRule, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke, stroke, Stroke, VISUAL)
|
CSS_PROP_INTERNAL(stroke, stroke, Stroke, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-dasharray, stroke_dasharray, StrokeDasharray, VISUAL)
|
CSS_PROP_INTERNAL(stroke-dasharray, stroke_dasharray, StrokeDasharray, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-dashoffset, stroke_dashoffset, StrokeDashoffset, VISUAL)
|
CSS_PROP_INTERNAL(stroke-dashoffset, stroke_dashoffset, StrokeDashoffset, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-linecap, stroke_linecap, StrokeLinecap, VISUAL)
|
CSS_PROP_INTERNAL(stroke-linecap, stroke_linecap, StrokeLinecap, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-linejoin, stroke_linejoin, StrokeLinejoin, VISUAL)
|
CSS_PROP_INTERNAL(stroke-linejoin, stroke_linejoin, StrokeLinejoin, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-miterlimit, stroke_miterlimit, StrokeMiterlimit, VISUAL)
|
CSS_PROP_INTERNAL(stroke-miterlimit, stroke_miterlimit, StrokeMiterlimit, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-opacity, stroke_opacity, StrokeOpacity, VISUAL)
|
CSS_PROP_INTERNAL(stroke-opacity, stroke_opacity, StrokeOpacity, NS_STYLE_HINT_VISUAL)
|
||||||
CSS_PROP_INTERNAL(stroke-width, stroke_width, StrokeWidth, VISUAL)
|
CSS_PROP_INTERNAL(stroke-width, stroke_width, StrokeWidth, NS_STYLE_HINT_VISUAL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Clean up after ourselves
|
// Clean up after ourselves
|
||||||
|
|
|
@ -1286,7 +1286,7 @@ PRBool nsCSSProps::GetColorName(PRInt32 aPropValue, nsCString &aStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// define array of all CSS property hints
|
// define array of all CSS property hints
|
||||||
#define CSS_PROP(_name, _id, _method, _hint) NS_STYLE_HINT_##_hint,
|
#define CSS_PROP(_name, _id, _method, _hint) _hint,
|
||||||
const nsChangeHint nsCSSProps::kHintTable[eCSSProperty_COUNT] = {
|
const nsChangeHint nsCSSProps::kHintTable[eCSSProperty_COUNT] = {
|
||||||
#include "nsCSSPropList.h"
|
#include "nsCSSPropList.h"
|
||||||
};
|
};
|
||||||
|
|
|
@ -1049,23 +1049,28 @@ nsStyleDisplay::nsStyleDisplay(const nsStyleDisplay& aSource)
|
||||||
|
|
||||||
nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
|
nsChangeHint nsStyleDisplay::CalcDifference(const nsStyleDisplay& aOther) const
|
||||||
{
|
{
|
||||||
if (mBinding != aOther.mBinding || mPosition != aOther.mPosition)
|
nsChangeHint hint = nsChangeHint_None;
|
||||||
return NS_STYLE_HINT_FRAMECHANGE;
|
|
||||||
|
|
||||||
if ((mDisplay == aOther.mDisplay) &&
|
if (mBinding != aOther.mBinding
|
||||||
(mFloats == aOther.mFloats) &&
|
|| mPosition != aOther.mPosition
|
||||||
(mOverflow == aOther.mOverflow)) {
|
|| mDisplay != aOther.mDisplay
|
||||||
if ((mBreakType == aOther.mBreakType) &&
|
|| mFloats != aOther.mFloats
|
||||||
(mBreakBefore == aOther.mBreakBefore) &&
|
|| mOverflow != aOther.mOverflow)
|
||||||
(mBreakAfter == aOther.mBreakAfter) &&
|
NS_UpdateHint(hint, nsChangeHint_ReconstructFrame);
|
||||||
(mClipFlags == aOther.mClipFlags) &&
|
|
||||||
(mClip == aOther.mClip) &&
|
// XXX the following is conservative, for now: changing float breaking shouldn't
|
||||||
(mAppearance == aOther.mAppearance)) {
|
// necessarily require a repaint, reflow should suffice.
|
||||||
return NS_STYLE_HINT_NONE;
|
if (mBreakType != aOther.mBreakType
|
||||||
}
|
|| mBreakBefore != aOther.mBreakBefore
|
||||||
return NS_STYLE_HINT_REFLOW;
|
|| mBreakAfter != aOther.mBreakAfter
|
||||||
}
|
|| mAppearance != aOther.mAppearance)
|
||||||
return NS_STYLE_HINT_FRAMECHANGE;
|
NS_UpdateHint(hint, NS_CombineHint(nsChangeHint_ReflowFrame, nsChangeHint_RepaintFrame));
|
||||||
|
|
||||||
|
if (mClipFlags != aOther.mClipFlags
|
||||||
|
|| mClip != aOther.mClip)
|
||||||
|
NS_UpdateHint(hint, nsChangeHint_SyncFrameView);
|
||||||
|
|
||||||
|
return hint;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------
|
// --------------------
|
||||||
|
|
|
@ -2736,12 +2736,8 @@ nsBoxFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
||||||
|
|
||||||
// Create a view
|
// Create a view
|
||||||
static NS_DEFINE_IID(kViewCID, NS_VIEW_CID);
|
static NS_DEFINE_IID(kViewCID, NS_VIEW_CID);
|
||||||
|
nsresult result = CallCreateInstance(kViewCID, &view);
|
||||||
nsresult result = nsComponentManager::CreateInstance(kViewCID,
|
if (NS_SUCCEEDED(result)) {
|
||||||
nsnull,
|
|
||||||
NS_GET_IID(nsIView),
|
|
||||||
(void **)&view);
|
|
||||||
if (NS_OK == result) {
|
|
||||||
nsIViewManager* viewManager;
|
nsIViewManager* viewManager;
|
||||||
parentView->GetViewManager(viewManager);
|
parentView->GetViewManager(viewManager);
|
||||||
NS_ASSERTION(nsnull != viewManager, "null view manager");
|
NS_ASSERTION(nsnull != viewManager, "null view manager");
|
||||||
|
@ -2760,7 +2756,7 @@ nsBoxFrame::CreateViewForFrame(nsIPresContext* aPresContext,
|
||||||
// Insert the view into the view hierarchy. If the parent view is a
|
// Insert the view into the view hierarchy. If the parent view is a
|
||||||
// scrolling view we need to do this differently
|
// scrolling view we need to do this differently
|
||||||
nsIScrollableView* scrollingView;
|
nsIScrollableView* scrollingView;
|
||||||
if (NS_SUCCEEDED(parentView->QueryInterface(NS_GET_IID(nsIScrollableView), (void**)&scrollingView))) {
|
if (NS_SUCCEEDED(CallQueryInterface(parentView, &scrollingView))) {
|
||||||
scrollingView->SetScrolledView(view);
|
scrollingView->SetScrolledView(view);
|
||||||
} else {
|
} else {
|
||||||
viewManager->SetViewZIndex(view, autoZIndex, zIndex);
|
viewManager->SetViewZIndex(view, autoZIndex, zIndex);
|
||||||
|
|
|
@ -243,57 +243,23 @@ nsScrollBoxFrame::CreateScrollingView(nsIPresContext* aPresContext)
|
||||||
GetScrollingParentView(aPresContext, parent, &parentView);
|
GetScrollingParentView(aPresContext, parent, &parentView);
|
||||||
|
|
||||||
// Get the view manager
|
// Get the view manager
|
||||||
nsIViewManager* viewManager;
|
nsCOMPtr<nsIViewManager> viewManager;
|
||||||
parentView->GetViewManager(viewManager);
|
parentView->GetViewManager(*getter_AddRefs(viewManager));
|
||||||
|
|
||||||
|
|
||||||
// Create the scrolling view
|
// Create the scrolling view
|
||||||
nsresult rv = nsComponentManager::CreateInstance(kScrollBoxViewCID,
|
nsresult rv = CallCreateInstance(kScrollBoxViewCID, &view);
|
||||||
nsnull,
|
if (NS_SUCCEEDED(rv)) {
|
||||||
NS_GET_IID(nsIView),
|
|
||||||
(void **)&view);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (NS_OK == rv) {
|
|
||||||
const nsStyleDisplay* display = (const nsStyleDisplay*)
|
|
||||||
mStyleContext->GetStyleData(eStyleStruct_Display);
|
|
||||||
const nsStylePosition* position = (const nsStylePosition*)
|
|
||||||
mStyleContext->GetStyleData(eStyleStruct_Position);
|
|
||||||
const nsStyleBorder* borderStyle = (const nsStyleBorder*)
|
|
||||||
mStyleContext->GetStyleData(eStyleStruct_Border);
|
|
||||||
const nsStyleVisibility* vis =
|
|
||||||
(const nsStyleVisibility*)mStyleContext->GetStyleData(eStyleStruct_Visibility);
|
|
||||||
|
|
||||||
// Get the z-index
|
|
||||||
PRInt32 zIndex = 0;
|
|
||||||
PRBool autoZIndex = PR_FALSE;
|
|
||||||
if (eStyleUnit_Integer == position->mZIndex.GetUnit()) {
|
|
||||||
zIndex = position->mZIndex.GetIntValue();
|
|
||||||
} else if (eStyleUnit_Auto == position->mZIndex.GetUnit()) {
|
|
||||||
autoZIndex = PR_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize the scrolling view
|
// Initialize the scrolling view
|
||||||
view->Init(viewManager, mRect, parentView, vis->IsVisibleOrCollapsed() ?
|
view->Init(viewManager, mRect, parentView);
|
||||||
nsViewVisibility_kShow : nsViewVisibility_kHide);
|
|
||||||
|
|
||||||
viewManager->SetViewZIndex(view, autoZIndex, zIndex);
|
SyncFrameViewProperties(aPresContext, this, mStyleContext, view);
|
||||||
|
|
||||||
// Insert the view into the view hierarchy
|
// Insert the view into the view hierarchy
|
||||||
// XXX Put view last in document order until we know how to do better
|
// XXX Put view last in document order until we know how to do better
|
||||||
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
viewManager->InsertChild(parentView, view, nsnull, PR_TRUE);
|
||||||
|
|
||||||
// Set the view's opacity
|
const nsStyleDisplay* display;
|
||||||
viewManager->SetViewOpacity(view, vis->mOpacity);
|
::GetStyleData(mStyleContext, &display);
|
||||||
|
|
||||||
// Because we only paint the border and we don't paint a background,
|
|
||||||
// inform the view manager that we have transparent content
|
|
||||||
viewManager->SetViewContentTransparency(view, PR_TRUE);
|
|
||||||
|
|
||||||
// If it's fixed positioned, then create a widget too
|
// If it's fixed positioned, then create a widget too
|
||||||
CreateScrollingViewWidget(view, display);
|
CreateScrollingViewWidget(view, display);
|
||||||
|
|
||||||
|
@ -308,6 +274,8 @@ nsScrollBoxFrame::CreateScrollingView(nsIPresContext* aPresContext)
|
||||||
scrollingView->CreateScrollControls();
|
scrollingView->CreateScrollControls();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const nsStyleBorder* borderStyle;
|
||||||
|
::GetStyleData(mStyleContext, &borderStyle);
|
||||||
// Set the scrolling view's insets to whatever our border is
|
// Set the scrolling view's insets to whatever our border is
|
||||||
nsMargin border;
|
nsMargin border;
|
||||||
if (!borderStyle->GetBorder(border)) {
|
if (!borderStyle->GetBorder(border)) {
|
||||||
|
@ -319,8 +287,6 @@ nsScrollBoxFrame::CreateScrollingView(nsIPresContext* aPresContext)
|
||||||
// Remember our view
|
// Remember our view
|
||||||
SetView(aPresContext, view);
|
SetView(aPresContext, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_RELEASE(viewManager);
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2553,15 +2553,17 @@ NS_IMETHODIMP nsViewManager::SetViewChildClipRegion(nsIView *aView, const nsRegi
|
||||||
view->SetClipChildren(newClipFlag);
|
view->SetClipChildren(newClipFlag);
|
||||||
view->SetChildClip(newClipRect);
|
view->SetChildClip(newClipRect);
|
||||||
|
|
||||||
// Invalidate changed areas
|
if (IsViewInserted(view)) {
|
||||||
// Paint (new - old) in the current view
|
// Invalidate changed areas
|
||||||
InvalidateRectDifference(view, newClipRect, oldClipRect, NS_VMREFRESH_NO_SYNC);
|
// Paint (new - old) in the current view
|
||||||
// Paint (old - new) in the parent view, since it'll be clipped out of the current view
|
InvalidateRectDifference(view, newClipRect, oldClipRect, NS_VMREFRESH_NO_SYNC);
|
||||||
nsView* parent = view->GetParent();
|
// Paint (old - new) in the parent view, since it'll be clipped out of the current view
|
||||||
if (parent != nsnull) {
|
nsView* parent = view->GetParent();
|
||||||
view->ConvertToParentCoords(&oldClipRect.x, &oldClipRect.y);
|
if (parent != nsnull) {
|
||||||
view->ConvertToParentCoords(&newClipRect.x, &newClipRect.y);
|
view->ConvertToParentCoords(&oldClipRect.x, &oldClipRect.y);
|
||||||
InvalidateRectDifference(parent, oldClipRect, newClipRect, NS_VMREFRESH_NO_SYNC);
|
view->ConvertToParentCoords(&newClipRect.x, &newClipRect.y);
|
||||||
|
InvalidateRectDifference(parent, oldClipRect, newClipRect, NS_VMREFRESH_NO_SYNC | NS_VMREFRESH_FORCHILD);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -2850,9 +2852,9 @@ NS_IMETHODIMP nsViewManager::SetViewZIndex(nsIView *aView, PRBool aAutoZIndex, P
|
||||||
PRInt32 oldidx = view->GetZIndex();
|
PRInt32 oldidx = view->GetZIndex();
|
||||||
view->SetZIndex(aAutoZIndex, aZIndex, aTopMost);
|
view->SetZIndex(aAutoZIndex, aZIndex, aTopMost);
|
||||||
|
|
||||||
if (IsViewInserted(view)) {
|
if (CompareZIndex(oldidx, oldTopMost, oldIsAuto,
|
||||||
if (CompareZIndex(oldidx, oldTopMost, oldIsAuto,
|
aZIndex, aTopMost, aAutoZIndex) != 0) {
|
||||||
aZIndex, aTopMost, aAutoZIndex) != 0) {
|
if (IsViewInserted(view)) {
|
||||||
nsView *parent = view->GetParent();
|
nsView *parent = view->GetParent();
|
||||||
if (nsnull != parent) {
|
if (nsnull != parent) {
|
||||||
//we don't just call the view manager's RemoveChild()
|
//we don't just call the view manager's RemoveChild()
|
||||||
|
@ -2862,20 +2864,19 @@ NS_IMETHODIMP nsViewManager::SetViewZIndex(nsIView *aView, PRBool aAutoZIndex, P
|
||||||
UpdateTransCnt(view, nsnull);
|
UpdateTransCnt(view, nsnull);
|
||||||
rv = InsertChild(parent, view, aZIndex);
|
rv = InsertChild(parent, view, aZIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX The following else block is a workaround and should be cleaned up (bug 43410)
|
// XXX The following else block is a workaround and should be cleaned up (bug 43410)
|
||||||
} else {
|
|
||||||
nsCOMPtr<nsIWidget> widget;
|
|
||||||
view->GetWidget(*getter_AddRefs(widget));
|
|
||||||
if (widget) {
|
|
||||||
widget->SetZIndex(aZIndex);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
nsCOMPtr<nsIWidget> widget;
|
||||||
|
view->GetWidget(*getter_AddRefs(widget));
|
||||||
|
if (widget) {
|
||||||
|
widget->SetZIndex(aZIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
nsZPlaceholderView* zParentView = view->GetZParent();
|
nsZPlaceholderView* zParentView = view->GetZParent();
|
||||||
if (nsnull != zParentView) {
|
if (nsnull != zParentView) {
|
||||||
SetViewZIndex(zParentView, aAutoZIndex, aZIndex, aTopMost);
|
SetViewZIndex(zParentView, aAutoZIndex, aZIndex, aTopMost);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -2888,13 +2889,15 @@ NS_IMETHODIMP nsViewManager::SetViewContentTransparency(nsIView *aView, PRBool a
|
||||||
|
|
||||||
view->HasTransparency(trans);
|
view->HasTransparency(trans);
|
||||||
|
|
||||||
if (trans != aTransparent && IsViewInserted(view))
|
if (trans != aTransparent) {
|
||||||
{
|
UpdateTransCnt(view, nsnull);
|
||||||
UpdateTransCnt(view, nsnull);
|
view->SetContentTransparency(aTransparent);
|
||||||
view->SetContentTransparency(aTransparent);
|
UpdateTransCnt(nsnull, view);
|
||||||
UpdateTransCnt(nsnull, view);
|
|
||||||
|
if (IsViewInserted(view)) {
|
||||||
UpdateView(view, NS_VMREFRESH_NO_SYNC);
|
UpdateView(view, NS_VMREFRESH_NO_SYNC);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
@ -2906,12 +2909,15 @@ NS_IMETHODIMP nsViewManager::SetViewOpacity(nsIView *aView, float aOpacity)
|
||||||
|
|
||||||
view->GetOpacity(opacity);
|
view->GetOpacity(opacity);
|
||||||
|
|
||||||
if (opacity != aOpacity && IsViewInserted(view))
|
if (opacity != aOpacity)
|
||||||
{
|
{
|
||||||
UpdateTransCnt(view, nsnull);
|
UpdateTransCnt(view, nsnull);
|
||||||
view->SetOpacity(aOpacity);
|
view->SetOpacity(aOpacity);
|
||||||
UpdateTransCnt(nsnull, view);
|
UpdateTransCnt(nsnull, view);
|
||||||
UpdateView(view, NS_VMREFRESH_NO_SYNC);
|
|
||||||
|
if (IsViewInserted(view)) {
|
||||||
|
UpdateView(view, NS_VMREFRESH_NO_SYNC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче