Opened 6 years ago

Last modified 2 years ago

#9884 assigned bug

B_FULL_UPDATE_ON_RESIZE doesn't call Draw() intermittedly

Reported by: jscipione Owned by: nobody
Priority: normal Milestone: R1
Component: Servers/app_server Version: R1/alpha4.1
Keywords: Cc:
Blocked By: Blocking:
Has a Patch: no Platform: All

Description

Experienced this issue in DeskCalc with B_FULL_UPDATE_ON_RESIZE and B_FRAME_EVENTS view flags and B_FOLLOW_ALL_SIDES for the resizing mode flag of the view. When you resize the window App Server calls FrameResized() but occasionally doesn't call Draw() afterwords. In DeskCalc this is worked around by calling Invalidate() at the end of FrameResized() but that shouldn't be needed.

I've attached a test program to this ticket that you can see the issue more clearly. Build it with:

gcc -lbe -o resizetest resizetest.cpp

Then run the program from terminal like this to see the output:

./resizetest

I've tested this program on both BeOS R5 and Haiku and both OS's seem to experience this issue but it happens much more often on Haiku.

The view starts off green. On R5 as you resize the view it flashes red then settles on blue (iow Draw() then FrameResized() get called) while on Haiku it flashes blue then settles on red (iow FrameResized() then Draw() get called). While this is different between the two OS's I don't think it's a problem, I just wanted to point out the difference in case it helps to track down the bug.

The real problem is that when you're done resizing the window occasionally the view will end up blue on Haiku because Draw() never got called. This is a little bit tough to do with the test program but is very easy to pull off on DeskCalc. If you look at the output of the program in Terminal though it shows what is happening: FrameResized() gets called several times with no corresponding Draw().

This might be related to #7010.

Attachments (1)

resizetest.cpp (1.2 KB) - added by jscipione 6 years ago.
resize test program

Download all attachments as: .zip

Change History (3)

Changed 6 years ago by jscipione

Attachment: resizetest.cpp added

resize test program

comment:1 Changed 6 years ago by jscipione

In hrev45852, (specifically [786b0f8](http://cgit.haiku-os.org/haiku/commit/?id=786b0f8)) I removed the B_FULL_UPDATE_ON_RESIZE flag from DeskCalc trying to work around this issue. Once the bug is fixed, the B_FULL_UPDATE_ON_RESIZE flag should be added to CalcView again and Invalidate() should be taken out of FrameResized().

Last edited 6 years ago by jscipione (previous) (diff)

comment:2 Changed 2 years ago by axeld

Owner: changed from axeld to nobody
Status: newassigned
Note: See TracTickets for help on using tickets.