Closed
Bug 9809
Opened 27 years ago
Closed 22 years ago
[outline]Dynamic changes of outline properties aren't repainted
Categories
(Core :: CSS Parsing and Computation, defect, P4)
Core
CSS Parsing and Computation
Tracking
()
RESOLVED
FIXED
People
(Reporter: alla, Assigned: roc)
References
Details
(Keywords: css2, testcase)
Attachments
(1 file, 2 obsolete files)
|
476 bytes,
text/html
|
Details |
When the outline property of some content changes (eg. it tracks focus with
outline) the difference in the styles are not noticed byt the style system,
leading to no repaint.
The cause of this is that StyleSpacingImpl::CalcDifference doesn't compare
outline data.
Comment 2•26 years ago
|
||
Reassigning peterl's bugs to myself.
Comment 3•26 years ago
|
||
Accepting peterl's bugs that have a Target Milestone
Comment 4•26 years ago
|
||
Pushing my M15 bugs to M16
Keywords: css2
Is this still a problem? I know there are still problems with outline
repainting, but are they with the *region* repainted?
Updated•26 years ago
|
Keywords: patch
Summary: [Patch] Dynamic changes of outline properties aren't repainted → Dynamic changes of outline properties aren't repainted
Comment 6•26 years ago
|
||
The style code was fixed a while ago to generate a repaint when the outline
changes (StyleSpacingImpl::CalcDifference() was returning NS_STYLE_HINT_VISUAL).
Problem: a repaint wasn't sufficient to dynamically update the display. See the
the end of the "kipp@netscape.com 1999-07-15 13:26" comment in bug 9816 for more
info. In order to work around some aspects of the problem, I changed the code to
return NS_STYLE_HINT_REFLOW.
We are now left with 2 problems which are both related to the outline area that
Kipp and Troy were talking about in bug 9816.
- We shouldn't need to return NS_STYLE_HINT_REFLOW when the outline changes.
- The outline doesn't paint over surrounding frames. See the testcase that I'm
going to attach.
Reassigned to Troy to add the outline area in nsIFrame.
Assignee: pierre → troy
Status: ASSIGNED → NEW
Comment 7•26 years ago
|
||
Rod, I think you're the one who's doing outlines so re-assigning to you
Assignee: troy → rods
Depends on: 30671
Comment 9•26 years ago
|
||
changed summary
Status: NEW → ASSIGNED
Summary: Dynamic changes of outline properties aren't repainted → [outline]Dynamic changes of outline properties aren't repainted
Comment 10•26 years ago
|
||
*** Bug 18579 has been marked as a duplicate of this bug. ***
Comment 11•26 years ago
|
||
*** Bug 30671 has been marked as a duplicate of this bug. ***
Comment 12•26 years ago
|
||
*** Bug 32893 has been marked as a duplicate of this bug. ***
Comment 13•26 years ago
|
||
*** Bug 34799 has been marked as a duplicate of this bug. ***
I've been thinking about a workaround to fix this (unless someone wants to write
an invalidation API like kipp mentioned in bug 9816), and, well I want to write
down my thoughts here to see what others think about it and so I don't forget
them (and so I can close all these LXR windows I have open).
Anyway, it might work to:
* add an additional style change hint called NS_STYLE_HINT_DOUBLE_VISUAL between
NS_STYLE_HINT_VISUAL and NS_STYLE_HINT_REFLOW
* change nsStyleSpacing::CalcDifference at
http://lxr.mozilla.org/seamonkey/source/layout/base/src/nsStyleContext.cpp#790
to return the new NS_STYLE_HINT_DOUBLE_VISUAL (meaning the frame would have to
be invalidated with both old and new data)
* Change
http://lxr.mozilla.org/seamonkey/source/layout/base/public/nsStyleChangeList.h &
http://lxr.mozilla.org/seamonkey/source/layout/base/src/nsStyleChangeList.cpp so
that nsStyleChangeData also has an nsCOMPtr<nsIStyleContext> previousContext (or
maybe make it a raw pointer and/or use it only for outline hints???)
* change CaptureChange at
http://lxr.mozilla.org/seamonkey/source/layout/html/base/src/nsFrameManager.cpp#1136
to store the old style context using the above change
* Change ProcessRestyledFrames at
http://lxr.mozilla.org/seamonkey/source/layout/html/style/src/nsCSSFrameConstructor.cpp#9099
to call something that does the proper invalidation (this is the part I haven't
thought through completely yet).
That still leaves issues with views and the problems that Pierre's attachment
demonstrates... but does this seem like a sensible approach for propogating the
style information? (The problem I'm talking about fixing still exists,
right...?)
Comment 16•26 years ago
|
||
Outlines paint on the outside of a frame and curently there is no mechanism
built into frame to make the view large enough to contain the frame plus outline
Assignee: rods → karnaze
Status: ASSIGNED → NEW
Comment 17•26 years ago
|
||
Marking remind. This will not make release 1.
Status: NEW → RESOLVED
Closed: 26 years ago
Resolution: --- → REMIND
Updated•26 years ago
|
Target Milestone: M17 → M20
Comment 18•26 years ago
|
||
*** Bug 38773 has been marked as a duplicate of this bug. ***
Comment 19•26 years ago
|
||
*** Bug 30122 has been marked as a duplicate of this bug. ***
Comment 20•26 years ago
|
||
We cannot ship FCS with this still buggy -- this makes the 'outline' property
unusable in many cases. We really should either remove support for 'outline'
altogether or fix this.
Reopening.
Status: RESOLVED → REOPENED
Resolution: REMIND → ---
Comment 21•26 years ago
|
||
See my notes in bug 24676: it looks like outlines have been disabled already.
Comment 22•26 years ago
|
||
Kevin, can you or Rod do the workaround that was discussed. There is not enough
time for the more elaborate solution.
Assignee: karnaze → kmcclusk
Status: REOPENED → NEW
Comment 24•26 years ago
|
||
This bug has been marked "future" because the original netscape engineer working
on this is over-burdened. If you feel this is an error, that you or another
known resource will be working on this bug,or if it blocks your work in some way
-- please attach your concern to the bug for reconsideration.
Status: NEW → ASSIGNED
Target Milestone: M20 → Future
Comment 25•26 years ago
|
||
*** Bug 45498 has been marked as a duplicate of this bug. ***
Comment 26•26 years ago
|
||
bug 18579 alone had 7 dups before marked dup of this
Adding mostfreq keyword.
Keywords: mostfreq
Comment 27•26 years ago
|
||
As per meeting with ChrisD yesterday, taking QA.
QA Contact: chrisd → py8ieh=bugzilla
Comment 28•26 years ago
|
||
blah. Anything I can do to help?
Comment 29•26 years ago
|
||
on linux the outline of dropdown boxes don't vanish before you click in page.
Many bugs about that phenomena have been marked dup of this bug.
Many of them - identical - have also instead been marked dup of bug 39992
39992 has 11 dups already. Is it a dup of this one or not?
Bug 39992 has nothing to do with the 'outline' property.
Comment 31•26 years ago
|
||
jce2, we would love to help on this issue except it is quite involved which is
why we are postponing it until 6.x.
The issue is that outlines need to painted on the outside of a frame. Frames are
contained inside Views. In some cases the view may have to be enlarged to hold
the frame plus the outline (like absolutely positioned elements). Then there are
all the issues with invalidating/clipping/painting just the outline which may
actually (or most likely) be part of the frame's parent frame. Frames know about
views, but views don't know about frames. So this all seemed like a bit too much
to bite off for 6.0.
But we are very open to any research or investigation in this area. And if you
were to find that the impact turned out to be small and of lower risk we could
always consider it for 6.0, or at the very least it would give us a great jump
start on the issue for 6.x Thank you for offeeing your help, let us know if you
are still interested in looking into this issue.
Comment 32•25 years ago
|
||
David Baron: if 39992 has nothing to do with this bug, then many of the dups
here aren't dups at all.
You're right. All the dups of this bug since May (I think -- haven't checked
quite all yet) are really dups of bug 39992. This is a totally different bug.
Those bugs should not have been verified duplicates of this bug. People
verifying dups should be more careful.
| Assignee | ||
Comment 34•25 years ago
|
||
When bug 13213 is fixed, we should be able to take a big bite out of this bug by
ensuring that HTMLReflowMetrics::mOverflowArea contains the outline area (if
any). Then the view will automatically be sized and positioned to include the
outline area.
Depends on: 13213
Comment 35•25 years ago
|
||
marking invalid, because we currently aren't implmenting this per the spec.
Status: ASSIGNED → RESOLVED
Closed: 26 years ago → 25 years ago
Resolution: --- → INVALID
Comment 36•25 years ago
|
||
Reopening. Once we switch '-moz-outline' to 'outline' then we'll have to fix
this bug.
Status: RESOLVED → REOPENED
Resolution: INVALID → ---
Comment 37•25 years ago
|
||
Reassigning to Robert to get this off Rod's open bug list. Robert: I hope that's
ok. If it's not then feel free to reassign it to me and I'll keep it; however
I'm likely to forget about it if it is assigned to me as I don't look at my
assigned bugs list very regularly! :-)
| Assignee | ||
Updated•25 years ago
|
Status: NEW → ASSIGNED
Priority: P3 → P4
Updated•25 years ago
|
Blocks: css2outline
Updated•24 years ago
|
Attachment #872 -
Attachment is obsolete: true
Updated•24 years ago
|
| Assignee | ||
Comment 38•24 years ago
|
||
The view manager work that landed last milestone has made this bug solvable, but
it's still not 1.0 material.
Hardware: PC → All
Target Milestone: Future → mozilla1.1
Comment 39•24 years ago
|
||
*** Bug 148684 has been marked as a duplicate of this bug. ***
Comment 40•24 years ago
|
||
*** Bug 150098 has been marked as a duplicate of this bug. ***
Comment 41•24 years ago
|
||
*** Bug 152858 has been marked as a duplicate of this bug. ***
Comment 42•24 years ago
|
||
*** Bug 161625 has been marked as a duplicate of this bug. ***
Comment 43•23 years ago
|
||
*** Bug 169169 has been marked as a duplicate of this bug. ***
| Assignee | ||
Comment 44•23 years ago
|
||
We're getting close to being able to fix this. Soon I should land code that
computes a correct overflowArea for outlined elements, so views for outlined
elements will be sized correctly.
There's still the problem of what to repaint when outline changes. dbaron
described a way that involves looking at the old style data. I think an easier
way would be to add a style hint that forces invalidation of a frame's entire
view, nsChangeHint_RepaintView.
There are other issues in the duped bugs, like outline painting not respecting
clipping. We'll have to look at those duped bugs before we can decide we have
working outline.
There's also the issue of outlines on elements that don't have views.
See also the discussion in bug 151375.
Blocks: 151375
| Assignee | ||
Comment 46•23 years ago
|
||
RepaintView would repaint the nearest containing view containing the frame, so
taking care of frames without views as well.
There certainly are various other things that would need to be fixed. For
example during reflow we'd have to invalidate the outline area whenever we
invalidate the border area. And other things I haven't thought of...
| Assignee | ||
Comment 47•23 years ago
|
||
We'll have to modify event handling so that mouse events in the outline area go
to the outlined element. I think.
| Assignee | ||
Comment 48•23 years ago
|
||
A better approach would be to simply ensure that a frame with 'outline' always
has a view.
You want to create and destroy views every time the focus changes?
| Assignee | ||
Comment 50•23 years ago
|
||
We only need to create a view for a frame when it first becomes focused. There's
no harm in leaving a view attached to a frame that doesn't really need it
anymore, so there's no need to destroy views when the outline is removed.
If even that is considered too expensive, we can improve the way we create
views. Right now we do a FRAMECHANGE if a view might be needed after a style
change. As you know plans are well advanced to add a FrameNeedsView hint which
will do a FRAMECHANGE only if there isn't already a view. We can even improve
that by instead of upgrading FrameNeedsView to a FRAMECHANGE, just creating a
new view for the existing frame, inserting it into the view hierarchy, and
reparenting the views for the descendant frames of the restyled frame to point
to the restyled frame's new view. That would be followed by a reflow of the
restyled frame to give the new view the correct geometry.
| Assignee | ||
Comment 51•23 years ago
|
||
That would be a lot faster than a FRAMECHANGE and also bypass the brokenness of
the event state manager w.r.t. FRAMECHANGEs.
| Assignee | ||
Comment 52•23 years ago
|
||
One other thing: the style hint for 'outline-width' will end up looking like
nsChangeHint_FrameNeedsView | nsChangeHint_RepaintView | nsChangeHint_ReflowFrame
We need to reflow when the width changes so that the overflow area(s) get
updated correctly.
Updated•23 years ago
|
Comment 53•23 years ago
|
||
*** Bug 159290 has been marked as a duplicate of this bug. ***
Comment 54•23 years ago
|
||
*** Bug 202761 has been marked as a duplicate of this bug. ***
Updated•22 years ago
|
Target Milestone: mozilla1.1alpha → ---
Comment 55•22 years ago
|
||
The testcase no longer works. It doesn't seem like we support css outline at all.
Comment 56•22 years ago
|
||
Comment 57•22 years ago
|
||
Using -moz-outline the test case works for me.
Status: ASSIGNED → RESOLVED
Closed: 25 years ago → 22 years ago
Resolution: --- → WORKSFORME
The point is that outline (outside the border) is harder than -moz-outline
(inside the border) and this bug needs to be fixed before we really support outline.
Status: RESOLVED → REOPENED
Resolution: WORKSFORME → ---
Attachment #151835 -
Attachment is obsolete: true
Comment 59•22 years ago
|
||
Are we still going to support -moz-outline, or are we just going to make it work
outside the frame and rename it outline then.
I thought it was just temporarily renamed to -moz-outline into it worked correctly.
Comment 60•22 years ago
|
||
Fixed by checkin to bug 151375.
Status: REOPENED → RESOLVED
Closed: 22 years ago → 22 years ago
Resolution: --- → FIXED
Comment 61•21 years ago
|
||
Hey Guys! Good Job!
You need to log in
before you can comment on or make changes to this bug.
Description
•