RESOLVED FIXED 42248
[Qt] Hovering the mouse over links produce a trail of underlined links (X11 paint engine)
https://bugs.webkit.org/show_bug.cgi?id=42248
Summary [Qt] Hovering the mouse over links produce a trail of underlined links (X11 p...
Denis Dzyubenko
Reported 2010-07-14 04:53:59 PDT
When a link is underlined on mouseover (like in Qt documentation), moving the mouse fast over those links leave a trail with underlined links. That happens in the demobrowser from Qt and in Qt Assistant.
Attachments
Screenshot (31.22 KB, image/png)
2010-07-14 04:54 PDT, Denis Dzyubenko
no flags
Patch which solving the problem with artefacts (2.02 KB, patch)
2010-07-27 11:00 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (1.19 KB, patch)
2010-09-22 01:55 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (thrid edition) (4.14 KB, patch)
2010-09-22 10:13 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fourth edition) (4.67 KB, patch)
2010-09-22 21:03 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition) (2.99 KB, patch)
2010-10-10 02:35 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) (2.97 KB, patch)
2010-10-10 02:40 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) (2.97 KB, patch)
2010-10-10 05:46 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) (2.97 KB, patch)
2010-10-10 06:02 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) (3.07 KB, patch)
2010-10-10 07:15 PDT, Sergey A. Sukiyazov
kenneth: review-
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuthout #if) (2.91 KB, patch)
2010-10-10 07:50 PDT, Sergey A. Sukiyazov
kenneth: review-
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) (3.01 KB, patch)
2010-10-10 08:27 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) (2.99 KB, patch)
2010-10-10 21:43 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) (2.80 KB, patch)
2010-10-15 22:00 PDT, Sergey A. Sukiyazov
kenneth: review+
commit-queue: commit-queue-
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) (2.79 KB, patch)
2010-10-16 11:55 PDT, Sergey A. Sukiyazov
no flags
Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) (2.81 KB, patch)
2010-10-17 02:36 PDT, Sergey A. Sukiyazov
no flags
Denis Dzyubenko
Comment 1 2010-07-14 04:54:41 PDT
Created attachment 61504 [details] Screenshot
Jocelyn Turcotte
Comment 2 2010-07-14 06:11:55 PDT
Could not reproduce on Windows, unless the bug has been introduced really lately (my Qt HEAD dates of June-30). Marking as blocking the release since I believe it would be a nice to have to polish the Qt documentation experience. Comment or remove the block if you don't think it is worth fixing now.
Andreas Kling
Comment 3 2010-07-16 07:01:32 PDT
Confirmed with Qt's X11 paint engine.
Andreas Kling
Comment 4 2010-07-16 07:02:02 PDT
(In reply to comment #3) > Confirmed with Qt's X11 paint engine. (Does not happen with the raster engine.)
Sergey A. Sukiyazov
Comment 5 2010-07-27 11:00:42 PDT
Created attachment 62711 [details] Patch which solving the problem with artefacts I have analyzed this problem two days ago. The cause of proble is - the line draw otside of bounding rect of graphics item (e.g. links in webkit). If we set line thihckness to 0.99 instead 1.00, we will solve this probleb. The second solution may be next: in the file webkit/WebCore/rendering/InlineTextBox.cpp at line 712 in code context->drawLineForText(IntPoint(tx, ty + baseline + 1), width, isPrinting); need to remove ' + 1', change this code to context->drawLineForText(IntPoint(tx, ty + baseline), width, isPrinting); But this solution may look poor with 'raster' or 'runtime' graphicsystems.
Sergey A. Sukiyazov
Comment 6 2010-07-27 11:02:56 PDT
Sorry :-) 'proble' and 'probleb' must read as 'problem' in previous message.
Benjamin Poulain
Comment 7 2010-07-27 12:31:07 PDT
(In reply to comment #5) > context->drawLineForText(IntPoint(tx, ty + baseline + 1), width, isPrinting); This looks correct to me. The font height is ascent + descent + 1. The +1 is justified here. It looks more like we are not reporting the correct size somewhere in QFontMetrics for X11.
Sergey A. Sukiyazov
Comment 8 2010-07-28 01:26:41 PDT
> It looks more like we are not reporting the correct size somewhere in > QFontMetrics for X11. I agree. Therefore, I propose to change the line thickness from 1.00 to 0.99. It will be looks like in most cases. It will be looks like in most cases. See the patch.
Benjamin Poulain
Comment 9 2010-07-28 02:32:03 PDT
(In reply to comment #8) > Therefore, I propose to change the line thickness from 1.00 to 0.99. This needs more explanations. What is the origin of the issue and why changing the thickness is the solution?
Sergey A. Sukiyazov
Comment 10 2010-07-28 12:46:50 PDT
After I determined that the 'ascent + descent + 1' without ' + 1' eliminates the artifacts, I began to experiment with the values of 'margin' and 'padding' in the CSS. I found that the values of 'margin' greater than 0 (eg 1) also eliminates the artifacts. I think that bounding rect is higer in this case. Next, I tried to change the line thickness to bigger value - 2.0f - artifacts became thicker too. Then I set thickness to 0.99 and artifacts do not appear. I think that, perhaps this is due to the conversion of real coordinates in integer coordinates inside X-server.
Sergey A. Sukiyazov
Comment 11 2010-07-28 12:51:32 PDT
So... It may be not clean and final solution of the problem, but it works :-) And this patch may tell you more right solution of the problem. I hope :-)
Benjamin Poulain
Comment 12 2010-07-29 04:54:37 PDT
The bug was in Qt. The rendering of lines was different between the X11 graphic system and the other graphics systems. The patch ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6 changes the behavior of Qt.
Sergey A. Sukiyazov
Comment 13 2010-07-29 20:05:54 PDT
What is the patch ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6? Where I can look it? Because I couldn't find commint 'ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6 in Qt git repository. I try compile Qt from yesterday git repository (last commit 11468d1086315c2d4f77f3747488e423d499bf56) and the problem still exists. Moving the mouse fast over links still leave a trail with underlined links.
Benjamin Poulain
Comment 14 2010-07-30 02:56:46 PDT
(In reply to comment #13) > What is the patch ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6? Where I can look it? Here you go: http://qt.gitorious.org/+qt-developers/qt/staging/commit/ebbab30af417dfbf3df47dec15c0e2f8d6a30fa6 Patches are in a staging area before going into the main repository. In that case, in staging:oslo-2.
Sergey A. Sukiyazov
Comment 15 2010-07-30 04:34:03 PDT
Thanks :-)
Sergey A. Sukiyazov
Comment 16 2010-09-14 23:13:49 PDT
After revertig patches (http://qt.gitorious.org/qt/qt/commit/041a68007413a20a9a9c97d0f2f04f9e03428f67) this problem come back. Moving the mouse over links leave a trail with underlined links again. This bug need to be reopened.
Benjamin Poulain
Comment 17 2010-09-15 01:49:46 PDT
(In reply to comment #16) > After revertig patches (http://qt.gitorious.org/qt/qt/commit/041a68007413a20a9a9c97d0f2f04f9e03428f67) this problem come back. Moving the mouse over links leave a trail with underlined links again. > > This bug need to be reopened. Actually I can only change it as won't fix. The graphics team is convinced there are too many inconsistency in the X11 specification to solve this problem in a reasonable time. Seeing all the subtle problems my patch introduced, I tend to also think that is not worth it.
Denis Dzyubenko
Comment 18 2010-09-16 03:28:57 PDT
Benjamin: well I believe we should still re-open the bug and fix it somehow - just leaving this as "wont fix" and leaving that ugly bug there sounds wrong to me.
Benjamin Poulain
Comment 19 2010-09-16 04:29:52 PDT
(In reply to comment #18) > Benjamin: well I believe we should still re-open the bug and fix it somehow - just leaving this as "wont fix" and leaving that ugly bug there sounds wrong to me. Raster is becoming the default for X11 as well. I agree this is ugly but I also understand why the graphic team prefer to have other priorities.
Jocelyn Turcotte
Comment 20 2010-09-16 09:46:28 PDT
(In reply to comment #19) Any way we can find a workaround for 4.7.x? I agree that this is rather ugly :)
Sergey A. Sukiyazov
Comment 21 2010-09-22 01:55:25 PDT
Created attachment 68347 [details] Fix GraphicsContextQt::drawLine with X11 paint engine Hi all Qt4.7 release came, but the problem still exists. I'm trying to solve it... And I think what I found solution. Because the problem occured only in the webkit widgets for me (in other widgets, for example QTextEdit, i can't reproduce the problem), I think what webkit code must be corrected. In the method void GraphicsContext::adjustLineToPixelBoundaries(FloatPoint& p1, FloatPoint& p2, float strokeWidth, const StrokeStyle& penStyle), if strokeWidth is odd value, the coordinates increased by constant 0.5f and become outside context boundary rect. So, the replacement qRound to qFloor in the X11 painting system solves this problem, but generatesr probles. I desided use qFloor for point coordinates after calling adjustLineToPixelBoundaries(..) inside GraphicsContextQt::drawLine(...) if painter engine is X11 graphic engine. Attached patch do it and solve the problem.
Sergey A. Sukiyazov
Comment 22 2010-09-22 01:59:26 PDT
keyboard... keyboard... "generatesr probles" must readed as "generates other problems" sorry :-)
Antonio Gomes
Comment 23 2010-09-22 07:12:20 PDT
Comment on attachment 68347 [details] Fix GraphicsContextQt::drawLine with X11 paint engine Does not sound bad. Suggestions: 1) If problem is still happen in trunk, make your patch against trunk; 2) add a ChangeLog to the patch: run $ prepare-ChangeLog --bug XXX ; 3) If you want that backported to QtWebKit2.0 or 2.1, provide a backported patch as well. 4) set r? and qt? to your patch.
Benjamin Poulain
Comment 24 2010-09-22 07:13:58 PDT
(In reply to comment #21) > Qt4.7 release came, but the problem still exists. I'm trying to solve it... And I think what I found solution. > [...] I don't see how this is any better than the fix in X11. You'll have the exact same problem: the fill and outline won't be aligned on the grid. You can't just workaround bug of a graphics system in the upper layer. If you want to fix this, you have to it in the proper layer, in the graphics system X11.
Antonio Gomes
Comment 25 2010-09-22 07:16:34 PDT
(In reply to comment #24) > (In reply to comment #21) > > Qt4.7 release came, but the problem still exists. I'm trying to solve it... And I think what I found solution. > > [...] > > I don't see how this is any better than the fix in X11. You'll have the exact same problem: the fill and outline won't be aligned on the grid. > > You can't just workaround bug of a graphics system in the upper layer. If you want to fix this, you have to it in the proper layer, in the graphics system X11. Ok, Benjamin is a graphics specialist. I'd follow his advice. ps: > 4) set r? and qt? to your patch. doh! qt? = cq? :-)
Jocelyn Turcotte
Comment 26 2010-09-22 07:44:32 PDT
Chatted with Benjamin, there is three ways to fix this bug: 1. Fix it in the X11 paint engine in Qt. This would require a lot of time to fine-tune all corner cases and will most likely break something else 2. Fix it in the Qt paint layer in QtWebKit when using the X11 paint engine. This has the same issues as way 1. 3. Fix it directly in the line drawing routing in WebCore in an #ifdef specific to Qt and the X11 paint engine. This would be the most efficient yet the most ugly layer jumping way of fixing it. So with all this ugliness and since this bug is not a regression but was unburrowed by the new Qt documentation, we thought that changing the new Qt documentation would be the best way to fix this problem. This would not fix other websites having this issue, but I'm not aware of any right now.
Sergey A. Sukiyazov
Comment 27 2010-09-22 10:13:11 PDT
Created attachment 68387 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (thrid edition) Ok. > You can't just workaround bug of a graphics system in the upper layer. If you want to fix this, you have to it in the proper layer, > in the graphics system X11. I don't think so. Because point coordinates increased by 0.05f inside GraphicsContext::adjustLineToPixelBoundaries(...) before they will be passed to graphics engine. I have to admit that the unconditional flooring coordinates for all lines may have the exact same problem: the fill and outline won't be aligned on the grid, as Benjamin says. So we need two different methods to draw lines: for drawing normal lines (old behavior) and drawing lines for texts (new behaviour) or parametrise existing method. For example, change declaration of the method void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2); to void GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2, bool forText = false) we added thrid parameter with default value FALSE, so we kept old behaviour. For Qt implementation of this method we will apply flooring of coordinates if forText is true and graphics engine is X11 -we will have new behavour. The forText parameter will be set to true in void GraphicsContext::drawLineForText(...) for Qt implementation, in other call places of drawLine() the value of forText parameter will be false an old behaviour will be kept. This (thrid :-)) patch flooring coordinates only line is drawing as underline with TextBox. I think that this would be the optimal solution.
Sergey A. Sukiyazov
Comment 28 2010-09-22 10:26:18 PDT
(In reply to comment #23) > (From update of attachment 68347 [details]) > Does not sound bad. Suggestions: > > 1) If problem is still happen in trunk, make your patch against trunk; Yes. This problem occures in trunk. When we find optimal solution I make patch for trunk too. > 2) add a ChangeLog to the patch: run $ prepare-ChangeLog --bug XXX ; see 1) > 3) If you want that backported to QtWebKit2.0 or 2.1, provide a backported patch as well. I use WebKit inside Qt only. If you tell me how do it I do it. > 4) set r? and qt? to your patch. Explain please. I can't understand what is r? and cq?
Benjamin Poulain
Comment 29 2010-09-22 11:05:56 PDT
(In reply to comment #27) > So we need two different methods to draw lines: for drawing normal lines (old behavior) and drawing lines for texts (new behaviour) or parametrise existing method. That would work, but you will need to convince the other ports this is a good idea because this is in common code. Once again, I am gonna state you should not workaround bugs. The right solution is to improve the graphics system X11.
Sergey A. Sukiyazov
Comment 30 2010-09-22 21:03:57 PDT
Created attachment 68497 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fourth edition) ok. > That would work, but you will need to convince the other ports this is a good idea because this is in common code. Another solution is copying drawing code from GraphicsContext::drawLine(..) directly into GraphicsContext::drawLineForText(..) and make changes there for Qt implementation only. It's not affect other ports, because no common code has changed in this case. > Once again, I am gonna state you should not workaround bugs. The right solution is to improve the graphics system X11. Once again I will turn your attention what coordinates increase by 0.5f (if line thickness is odd) inside GraphicsContext::adjustLineToPixelBoundaries(..) and become outside of text bounding rect htere, before they will be passed to graphics engine. Improving the graphics system X11 is good idea, but "This would require a lot of time to fine-tune all corner cases and will most likely break something else" as Jocelyn Turcotte says. At this moment X11 graphics system works normal in most cases and this bug make using Qt 4.7 and higer very hard on X11-based platforms (IMHO likely even unusable) - predominantly on Linux. Most distributives already updated their packages of Qt... Last patch modify only GraphicsContext::drawLineForText(..) for Qt implementation if Qt has compiled for X11 only and X11 graphics system is used (at runtime).
Sergey A. Sukiyazov
Comment 31 2010-09-22 21:17:11 PDT
(In reply to comment #26) > So with all this ugliness and since this bug is not a regression but was unburrowed by the new Qt documentation, we thought that changing the new Qt documentation would be the best way to fix this problem. > > This would not fix other websites having this issue, but I'm not aware of any right now. This problem hapen on most HTML document where margin between anchors becomes to zero via CSS, not Qt documentation only.. If anchors put without spaces from eachother verticaly, artifacts hapen when mouse move from bottom to top over these anchors.
Alex Mol
Comment 32 2010-09-23 04:24:09 PDT
Hey Guys. Having wontfix here leaves QWebKit unusable on a large number of installations. This is not a good idea. Even ugly fix is better than no fix at all. I'd prefer temporary ugly fix now and good fix later.
Benjamin Poulain
Comment 33 2010-09-23 04:37:05 PDT
(In reply to comment #32) > Hey Guys. Having wontfix here leaves QWebKit unusable on a large number of installations. This is not a good idea. Even ugly fix is better than no fix at all. I'd prefer temporary ugly fix now and good fix later. I am a bit surprised by the interest on this bug, especially since it is _NOT_ a regression. Most apps I use that are based on QtWebKit already force the graphics system raster (and at least the last versions for Rekonq and Arora both force raster). So those do not encounter the issue. Could you please explain which use case gave this bug visibility?
Sergey A. Sukiyazov
Comment 34 2010-09-23 21:16:24 PDT
(In reply to comment #33) > (In reply to comment #32) > > Hey Guys. Having wontfix here leaves QWebKit unusable on a large number of installations. This is not a good idea. Even ugly fix is better than no fix at all. I'd prefer temporary ugly fix now and good fix later. > > I am a bit surprised by the interest on this bug, especially since it is _NOT_ a regression. > > Most apps I use that are based on QtWebKit already force the graphics system raster (and at least the last versions for Rekonq and Arora both force raster). So those do not encounter the issue. > But I don't use Rekonq and Arora :( I just have ran these programs to look how they work. > Could you please explain which use case gave this bug visibility? I use linux desktop with KDE4 as office workstation and qtcreator for software development. If X11 graphics engine is selected I have ugly artefacts in a lot of programs, very annoying artefacts in qtcreator (and assistant) and browsers. I agree, if raster graphics engine is selected, the artifacts not apear and most progams look fine. But I have another problem in this case... When I try start OpenOffice.org It crashes with message: X-Error: BadDrawable (invalid Pixmap or Window parameter) Major opcode: 62 (X_CopyArea) Resource ID: 0x0 Serial No: 510 (510) (maybe it is this bug http://bugreports.qt.nokia.com/browse/QTBUG-7702?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel) Patch each program which I use to using raster graphics engine or make wrappers is expensive over time and not very convenient. Enabling raster graphics engine as global, adds problem in other programs. So, I ask you fix (or make workaraund) this problem. I suggested a solution, ofcourse the solution isn't ideal but it may close the problem.
Benjamin Poulain
Comment 35 2010-10-01 02:49:28 PDT
(In reply to comment #34) > So, I ask you fix (or make workaraund) this problem. I suggested a solution, ofcourse the solution isn't ideal but it may close the problem. I am still not convinced by the patch but you might be able to convince a reviewer. If you want the patch to be considered for review, you should follow https://bugs.webkit.org/show_bug.cgi?id=42248#c23 (some more doc here: http://trac.webkit.org/wiki/QtWebKitContrib) Please add a comment in the duplicated code to explain why we need such a ugly workaround. Please also add a #ifdef for the Qt version: #if !defined(Q_WS_X11) || (QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)) Raster is the default starting with 4.8. With such a check, the duplicated code can be removed eventually.
Sergey A. Sukiyazov
Comment 36 2010-10-03 22:58:33 PDT
(In reply to comment #35) > (In reply to comment #34) > If you want the patch to be considered for review, you should follow https://bugs.webkit.org/show_bug.cgi?id=42248#c23 (some more doc here: http://trac.webkit.org/wiki/QtWebKitContrib) In Qt webkit code no script prepare-ChangeLog. When I try clone WebKit from gitorious.org I get error: $ git clone git://gitorious.org/webkit/webkit.git Cloning into webkit... remote: Counting objects: 877230, done. fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed
Benjamin Poulain
Comment 37 2010-10-04 12:29:29 PDT
(In reply to comment #36) > In Qt webkit code no script prepare-ChangeLog. When I try clone WebKit from gitorious.org I get error: > > $ git clone git://gitorious.org/webkit/webkit.git > Cloning into webkit... > remote: Counting objects: 877230, done. > fatal: The remote end hung up unexpectedly > fatal: early EOF > fatal: index-pack failed Hum, try again. I had problem recently with gitorious and I had to try several times before the clone succeed.
Simon Hausmann
Comment 38 2010-10-05 01:24:11 PDT
(In reply to comment #37) > (In reply to comment #36) > > In Qt webkit code no script prepare-ChangeLog. When I try clone WebKit from gitorious.org I get error: > > > > $ git clone git://gitorious.org/webkit/webkit.git > > Cloning into webkit... > > remote: Counting objects: 877230, done. > > fatal: The remote end hung up unexpectedly > > fatal: early EOF > > fatal: index-pack failed > > Hum, try again. I had problem recently with gitorious and I had to try several times before the clone succeed. See also http://qtwebkit.blogspot.com/2010/09/fatal-remote-end-hung-up-unexpectedly.html Simply use ssh to pull webkit from gitorious.
Sergey A. Sukiyazov
Comment 39 2010-10-10 02:35:26 PDT
Created attachment 70391 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition) The last edition of the patch. I deside to make minimal code for workaround of this bug. The result is equivalent to changes in fourth edition of patch. In X11 version of Qt, X11 painting engine may be set as default by option -graphicssystem with configure script. Then the problem with artefacts will be appered again, so I deside don't add "(QT_VERSION >= QT_VERSION_CHECK(4, 8, 0))" to #ifdef condition. NOTE: This patch make workaround only fof X11 version of Qt and only if X11 paint engine is used.
Sergey A. Sukiyazov
Comment 40 2010-10-10 02:40:54 PDT
Created attachment 70392 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) Some corrections. Why I can't reload or delete patches which I uploaded?
Antonio Gomes
Comment 41 2010-10-10 05:03:29 PDT
Comment on attachment 70391 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition) View in context: https://bugs.webkit.org/attachment.cgi?id=70391&action=review nit picking: > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:849 > + // if paintengine type is X11 to avoid artifacts comments start with capital and end with "." > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:853 > + // If stroke thiknes is odd we need decrease Y coordinate by 1, thiknes -> typo > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:857 > + // integer value period (".") > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:859 > + if (static_cast<int>(strokeWidth) % 2) { //odd drop the comment.
Sergey A. Sukiyazov
Comment 42 2010-10-10 05:46:23 PDT
Created attachment 70396 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) Updated
Antonio Gomes
Comment 43 2010-10-10 05:48:32 PDT
Comment on attachment 70396 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) View in context: https://bugs.webkit.org/attachment.cgi?id=70396&action=review more nit picking (sorry did not catch them at first time) > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:852 > + // If stroke thickness is odd we need decrease Y coordinate by 1, > + // because inside methotod adjustLineToPixelBoundaries(...), which 1 pixel? please specify typo -> methotod
Sergey A. Sukiyazov
Comment 44 2010-10-10 06:02:13 PDT
Created attachment 70397 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) Updated again ;-)
Kenneth Rohde Christiansen
Comment 45 2010-10-10 06:15:04 PDT
Comment on attachment 70397 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) View in context: https://bugs.webkit.org/attachment.cgi?id=70397&action=review > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:840 > +#if !defined(Q_WS_X11) This define seems a bit useless. It will always be defined anyway for MeeGo, Maemo etc even if these platforms use raster or opengl > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:845 > + IntPoint p1 = origin; > + IntPoint p2 = origin + IntSize(width, 0); Why not startPoint, endPoint
Benjamin Poulain
Comment 46 2010-10-10 07:10:49 PDT
(In reply to comment #45) > (From update of attachment 70397 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=70397&action=review > > > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:840 > > +#if !defined(Q_WS_X11) > > This define seems a bit useless. It will always be defined anyway for MeeGo, Maemo etc even if these platforms use raster or opengl You still have Windows, Mac OS X, WinCe, etc Actually, what about having the code without #if-#else and just add a guard around the if()?: + IntPoint p1 = origin; + IntPoint p2 = origin + IntSize(width, 0); + + // If paintengine type is X11 to avoid artifacts + // like bug https://bugs.webkit.org/show_bug.cgi?id=42248 +#if !defined(Q_WS_X11) + QPainter* p = m_data->p(); + if (p->paintEngine()->type() == QPaintEngine::X11) { + // If stroke thickness is odd we need decrease Y coordinate by 1 pixel, + // because inside method adjustLineToPixelBoundaries(...), which + // called from drawLine(...), Y coordinate will be increased by 0.5f + // and then inside Qt painting engine will be rounded to next greater + // integer value. + float strokeWidth = strokeThickness(); + if (static_cast<int>(strokeWidth) % 2) { + p1.setY(p1.y() - 1); + p2.setY(p2.y() - 1); + } + } +#endif // !defined(Q_WS_X11) + + drawLine(p1, p2); } I actually start to think this patch does not look so bad after all. The special path is not too complex, and it has good comments.
Benjamin Poulain
Comment 47 2010-10-10 07:11:33 PDT
I meant +#if defined(Q_WS_X11)
Sergey A. Sukiyazov
Comment 48 2010-10-10 07:15:35 PDT
Created attachment 70400 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) (In reply to comment #45) > (From update of attachment 70397 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=70397&action=review > > > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:840 > > +#if !defined(Q_WS_X11) > > This define seems a bit useless. It will always be defined anyway for MeeGo, Maemo etc even if these platforms use raster or opengl I changed condition to !(defined(Q_WS_X11) && defined(Q_OS_UNIX)) It's more exactly? Even this condition was useless, then I check for garaphics engine is X11. If graphics engine is raster or opengl then no changes will be made - the original behavior will be kept > > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:845 > > + IntPoint p1 = origin; > > + IntPoint p2 = origin + IntSize(width, 0); > > Why not startPoint, endPoint It not fundamental, I made it.
Sergey A. Sukiyazov
Comment 49 2010-10-10 07:21:35 PDT
(In reply to comment #46) > (In reply to comment #45) > > Actually, what about having the code without #if-#else and just add a guard around the if()?: Do you mean like that: void GraphicsContext::drawLineForText(const IntPoint& origin, int width, bool) { if (paintingDisabled()) return; IntPoint startPoint = origin; IntPoint endPoint = origin + IntSize(width, 0); // If paintengine type is X11 to avoid artifacts // like bug https://bugs.webkit.org/show_bug.cgi?id=42248 QPainter* p = m_data->p(); if (p->paintEngine()->type() == QPaintEngine::X11) { // If stroke thickness is odd we need decrease Y coordinate by 1 pixel, // because inside method adjustLineToPixelBoundaries(...), which // called from drawLine(...), Y coordinate will be increased by 0.5f // and then inside Qt painting engine will be rounded to next greater // integer value. float strokeWidth = strokeThickness(); if (static_cast<int>(strokeWidth) % 2) { startPoint.setY(startPoint.y() - 1); endPoint.setY(endPoint.y() - 1); } } drawLine(startPoint, endPoint); }
Kenneth Rohde Christiansen
Comment 50 2010-10-10 07:24:53 PDT
> Actually, what about having the code without #if-#else and just add a guard around the if()?: > > > + IntPoint p1 = origin; > + IntPoint p2 = origin + IntSize(width, 0); > + > + // If paintengine type is X11 to avoid artifacts > + // like bug https://bugs.webkit.org/show_bug.cgi?id=42248 > +#if !defined(Q_WS_X11) > + QPainter* p = m_data->p(); > + if (p->paintEngine()->type() == QPaintEngine::X11) { > + // If stroke thickness is odd we need decrease Y coordinate by 1 pixel, > + // because inside method adjustLineToPixelBoundaries(...), which > + // called from drawLine(...), Y coordinate will be increased by 0.5f > + // and then inside Qt painting engine will be rounded to next greater > + // integer value. > + float strokeWidth = strokeThickness(); > + if (static_cast<int>(strokeWidth) % 2) { > + p1.setY(p1.y() - 1); > + p2.setY(p2.y() - 1); > + } > + } > +#endif // !defined(Q_WS_X11) > + > + drawLine(p1, p2); > > } > > > I actually start to think this patch does not look so bad after all. The special path is not too complex, and it has good comments. This I'm all for.
Kenneth Rohde Christiansen
Comment 51 2010-10-10 07:26:42 PDT
Comment on attachment 70400 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, corrected) r-, let's go with Benjamin's suggestion
Sergey A. Sukiyazov
Comment 52 2010-10-10 07:50:33 PDT
Created attachment 70403 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuthout #if)
Kenneth Rohde Christiansen
Comment 53 2010-10-10 08:08:42 PDT
Comment on attachment 70403 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuthout #if) View in context: https://bugs.webkit.org/attachment.cgi?id=70403&action=review > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:845 > + // like bug https://bugs.webkit.org/show_bug.cgi?id=42248 > + QPainter* p = m_data->p(); Benjamin, asked you to keep the ifdef, but add it here just before the QPainter, like #if defined(Q_WS_X11). Check his comment for more info. He even showed the code.
Sergey A. Sukiyazov
Comment 54 2010-10-10 08:27:57 PDT
Created attachment 70404 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) Sorry, I was inattentive... I corrected path as Benjamin asks
WebKit Commit Bot
Comment 55 2010-10-10 08:48:17 PDT
Comment on attachment 70404 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) Rejecting patch 70404 from commit-queue. Failed to run "['./WebKitTools/Scripts/webkit-patch', '--status-host=queues.webkit.org', 'land-attachment', '--force-clean', '--ignore-builders', '--quiet', '--non-interactive', '--parent-command=commit-queue', 70404]" exit_code: 2 Last 500 characters of output: /svn.webkit.org/repository/webkit/trunk ... M WebCore/ChangeLog M WebCore/platform/graphics/qt/GraphicsContextQt.cpp A repository hook failed: Commit blocked by pre-commit hook (exit code 1) with output: svnlook: Can't write to stream: Broken pipe The following ChangeLog files contain OOPS: trunk/WebCore/ChangeLog Please don't ever say "OOPS" in a ChangeLog file. at /usr/local/git/libexec/git-core/git-svn line 572 Failed to run "[u'git', u'svn', u'dcommit']" exit_code: 1 Full output: http://queues.webkit.org/results/4339014
Sergey A. Sukiyazov
Comment 56 2010-10-10 21:43:06 PDT
Created attachment 70421 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) Removed any 'OOPS' from changelog. But at http://trac.webkit.org/wiki/QtWebKitContrib written "Keep the "Reviewed by NOBODY (OOPS!)." line in the ChangeLog files, it will be edited by the bot or person that will commit your fix. " It's correct?
Eric Seidel (no email)
Comment 57 2010-10-14 07:19:41 PDT
Comment on attachment 70404 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) Cleared Kenneth Rohde Christiansen's review+ from obsolete attachment 70404 [details] so that this bug does not appear in http://webkit.org/pending-commit.
Benjamin Poulain
Comment 58 2010-10-15 05:24:05 PDT
Comment on attachment 70421 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) View in context: https://bugs.webkit.org/attachment.cgi?id=70421&action=review Some nitpicking. Do not forget got put the flags to "?" when you add a patch, otherwise we don't see it is needing a review. > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:57 > +#include <QtCore> Please include qglobal instead. Including QtCore means including all the headers. > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:845 > +#if defined(Q_WS_X11) && defined(Q_OS_UNIX) Please remove the "&& defined(Q_OS_UNIX)". Some people are using X11 on Windows as well (I know, it is a strange use case :)).
Sergey A. Sukiyazov
Comment 59 2010-10-15 22:00:36 PDT
Created attachment 70947 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) (In reply to comment #58) > (From update of attachment 70421 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=70421&action=review > > Some nitpicking. Do not forget got put the flags to "?" when you add a patch, otherwise we don't see it is needing a review. > > > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:57 > > +#include <QtCore> QtCore no more needed. Removed. > > Please include qglobal instead. Including QtCore means including all the headers. > > > WebCore/platform/graphics/qt/GraphicsContextQt.cpp:845 > > +#if defined(Q_WS_X11) && defined(Q_OS_UNIX) > Done.
WebKit Commit Bot
Comment 60 2010-10-16 08:50:15 PDT
Comment on attachment 70947 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) Rejecting patch 70947 from commit-queue. Failed to run "['./WebKitTools/Scripts/webkit-patch', '--status-host=queues.webkit.org', 'land-attachment', '--force-clean', '--ignore-builders', '--quiet', '--non-interactive', '--parent-command=commit-queue', 70947]" exit_code: 1 Last 500 characters of output: tachment.cgi?id=70947&action=edit Fetching: https://bugs.webkit.org/show_bug.cgi?id=42248&ctype=xml Processing 1 patch from 1 bug. Cleaning working directory Updating working directory Processing patch 70947 from bug 42248. NOBODY found in /Projects/CommitQueue/WebCore/ChangeLog does not appear to be a valid reviewer according to committers.py. ERROR: /Projects/CommitQueue/WebCore/ChangeLog neither lists a valid reviewer nor contains the string "Unreviewed" or "Rubber stamp" (case insensitive). Full output: http://queues.webkit.org/results/4446054
Sergey A. Sukiyazov
Comment 61 2010-10-16 11:55:09 PDT
Created attachment 70960 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) > ERROR: /Projects/CommitQueue/WebCore/ChangeLog neither lists a valid reviewer nor contains the string "Unreviewed" or "Rubber stamp" (case insensitive). Done.
Antonio Gomes
Comment 62 2010-10-16 21:00:25 PDT
Comment on attachment 70960 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) View in context: https://bugs.webkit.org/attachment.cgi?id=70960&action=review > WebCore/ChangeLog:3 > + Unreviewed. You should leave "Reviewed by NOBODY (OOPS!)" and the commitbot should fill it for you properly. "Unreviewed" is essentially for build fixes.
Sergey A. Sukiyazov
Comment 63 2010-10-17 02:36:29 PDT
Created attachment 70969 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) > You should leave "Reviewed by NOBODY (OOPS!)" and the commitbot should fill it for you properly. > > "Unreviewed" is essentially for build fixes. Return back "Reviewed by NOBODY (OOPS!)". I've removed "Reviewed by NOBODY (OOPS!)" after I get following message. (In reply to comment #55) > (From update of attachment 70404 [details]) > Rejecting patch 70404 from commit-queue. > > Failed to run "['./WebKitTools/Scripts/webkit-patch', '--status-host=queues.webkit.org', 'land-attachment', '--force-clean', '--ignore-builders', '--quiet', '--non-interactive', '--parent-command=commit-queue', 70404]" exit_code: 2 > Last 500 characters of output: > /svn.webkit.org/repository/webkit/trunk ... > M WebCore/ChangeLog > M WebCore/platform/graphics/qt/GraphicsContextQt.cpp > A repository hook failed: Commit blocked by pre-commit hook (exit code 1) with output: > svnlook: Can't write to stream: Broken pipe > > The following ChangeLog files contain OOPS: > > trunk/WebCore/ChangeLog > > Please don't ever say "OOPS" in a ChangeLog file. > at /usr/local/git/libexec/git-core/git-svn line 572 > > > Failed to run "[u'git', u'svn', u'dcommit']" exit_code: 1 > > Full output: http://queues.webkit.org/results/4339014
WebKit Commit Bot
Comment 64 2010-10-17 07:31:23 PDT
Comment on attachment 70969 [details] Fix GraphicsContextQt::drawLine with X11 paint engine (fifth edition, wuth moved #if) Clearing flags on attachment: 70969 Committed r69923: <http://trac.webkit.org/changeset/69923>
WebKit Commit Bot
Comment 65 2010-10-17 07:31:32 PDT
All reviewed patches have been landed. Closing bug.
Benjamin Poulain
Comment 66 2011-01-30 06:27:12 PST
*** Bug 45499 has been marked as a duplicate of this bug. ***
Note You need to log in before you can comment on or make changes to this bug.