Title: [100718] trunk
Revision
100718
Author
[email protected]
Date
2011-11-17 21:25:01 -0800 (Thu, 17 Nov 2011)

Log Message

[chromium] Font::drawComplexText can not draw a segment of text run
https://bugs.webkit.org/show_bug.cgi?id=72095

Patch by Robin Cao <[email protected]> on 2011-11-17
Reviewed by Adam Barth.

Source/WebCore:

drawComplexText() should respect the 'from' and 'to' arguments.
Drawing the whole text run may result in text overlapping.

Test: platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html

* platform/graphics/chromium/ComplexTextControllerLinux.cpp:
(WebCore::ComplexTextController::glyphsForRange):
* platform/graphics/chromium/ComplexTextControllerLinux.h:
* platform/graphics/chromium/FontLinux.cpp:
(WebCore::Font::drawComplexText):

LayoutTests:

* platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.png: Added.
* platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.txt: Added.
* platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (100717 => 100718)


--- trunk/LayoutTests/ChangeLog	2011-11-18 05:02:58 UTC (rev 100717)
+++ trunk/LayoutTests/ChangeLog	2011-11-18 05:25:01 UTC (rev 100718)
@@ -1,3 +1,14 @@
+2011-11-17  Robin Cao  <[email protected]>
+
+        [chromium] Font::drawComplexText can not draw a segment of text run
+        https://bugs.webkit.org/show_bug.cgi?id=72095
+
+        Reviewed by Adam Barth.
+
+        * platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.png: Added.
+        * platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.txt: Added.
+        * platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html: Added.
+
 2011-11-17  Peter Kasting  <[email protected]>
 
         [chromium] Fix broken expectation.

Added: trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.png (0 => 100718)


--- trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.png	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.png	2011-11-18 05:25:01 UTC (rev 100718)
@@ -0,0 +1,37 @@
+\x89PNG
+
+
+IHDR X')tEXtchecksum0079ee0f65f64b0235fb590a3eec8cfc\xF6z~IDATx\x9C\xED\xDD}\x90\x95e\xDD\xC0\xF1\xEB\x82\x82\xEE\xFA\xEA\xB6KN$Œʤ\xA839\x953h):\x96D31\xA9MN\xC5:\xE5\xF925\xCE\xE4H
+\xC1da
+S\xE8ī\x91M)\x82b\xAC\xCB[\x90K\xBC\xB2\xB0\xC4y\xFE8\xCFs\x9E\xD39{\xCB\xF2\x93e\x97\xCF篛\xFB\xBE\xEE\xFB\xBE\xF6\xBA\xFF\xE0;\xE7\x9C=\x9B\xC9f\xB3	\x808]\xDA{\x9D\x8D\xC0&\xB0\x82	,\x80` \x98\xC0&\xB0\x82	,\x80` \x98\xC0&\xB0\x82\x95
+\xACLy\xF3\xE7Ͽ\xFC\xF2\xCBO\xE6,\xB5~\xF2\xF9\x91\x85\xA7\\xFD\xF5\xC7{\xC76\x9C\x92\x8Eg\x9E\xC7{\x85\xF4\xF8:\xD0T\xA0P\xA6\xDC{\xCEd2\xDF\xFD\xEEwz\xE8\xA1\xEEݻg2\x99l6{\xE8С	&<\xFE\xF8\xE3\xF8\xC0\xB6o\xDF\xDEA\xFFJtMM͎;Z3\xF9\xBE}\xFBnݺ5\x9B\xCD\xE67N\xC2\xF4\xF2jkkOp\x91\xCBM\xBB\xF5+\xD0\xEE\xDAe\xE5\xE0ĕ
+\xACA\x83-[\xB6\xAC\xAA\xAA*\xA5\x94\xAC\x94\xD2޽{\x87\xBEr\xE5\xCA3\xCF<\xB3
+\xFF\xED\xE5\xAFs\xCE*\xE7СC\xAD\x9C|~d\xEBO	t\xE27-w\x85\x90'\xF6\xA1\x94\xD3.+'\xAE\xEC[\x84k׮\xCD\xD5U\xA1\xEA\xEA\xEA\xB5k\xD7\xF6\xE8ѣ
+wZ\xB7n\xDDI;\xAB\x82\xD6O>?\xF2x\xDEl6{\xE0\xC0\x81\xE3=Tt\xB4m\x8B\\xA8\xDCN\xFC\xCA\xE1\xA5\x9C\x9F*\xB4\x8B\xB6\xC8\xFD\xED\xB7\xDF6lXUUմi\xD3r{\x9A\x9A\x9Aƌӳg\xCF+\xAF\xBCr\xE3ƍE\xE3o\xBF\xFD\xF6\x94R&\x935jT\x8B\x83\xF3\x9F\xF1z\xF1\xC5\xF3\xDBEg\xFA\xE9Oگ_\xBF3\xCE8\xA3\xAE\xAEn\xF2\xE4\xC9)\xA50\xE0\xEF\xFF\xFB5\xD7\SUU5eʔ\xFC\xE09s\xE60\xE0\x9Cs\xCEy\xFE\xF9\xE7[\xFCq*O>'\xFF\x91\xA0\x858pժU\xFD\xE8G{\xF5\xEA5s\xE6\xCC\xFC\x98\xA7\x9F~\xBAgϞcǎ\xCDd2\xE9\xBF?ETt\xA8H\x8BGK9\xA54{\xF6욚\x9A޽{O\x9D:5\xB7'\xB7V\xA5ۅ*\xAF@\x85\xA5+\xBD]\x85\x87R:~\xE1…\xB9)]z\xE9\xA5)\xA5ѣG\xE7\xFE\xD9\xD8\xD8X\xBA\xE6\xB9i<\xF3\xCC3]t\xD1\xD5W_]x\xD9\xD2\xC7]\xE1)@;˶B鰔\xD2SO=\xB5{\xF7\xEE\|\xF1Ź\x9D\xDF\xFC\xE67\xFE\xF3\x9F755͟?\xFF\xA6\x9Bn\xAA|\x9D\xD2\xC1\xFF\xFA׿\xBE\xF1\x8Do\xFC\xF0\x87?ܿ\xFF\xA8Q\xA3Ǝ{\xE8С\xEF\x9E\xF3\xC1~\xB0\xA1\xA1\xA1\xB9\xB9yɒ%\xBDz\xF5\xCAf\xB3555\xB9\x89\xEDڵk޼y\xBD{\xF7΍\\xBCx\xF1
+7ܰiӦݻw?\xFC\xF0\xC3-^\xB0\xC5\xC9\xE7G\xE66r\xD7\xCFf\xB3^xaJiʔ){\xF7\xEEݴi\xD3u\xD7]\xF7\xE2\x8B/\xE6FVUU\xD5\xD7\xD7ϙ3\xA7\xE8\x94\xD2CEJ\x8F\xB6\xB8\xC8+V\xAC\xF8\xC4'>\xD1\xD8\xD8\xF8\xF2\xCB/WWW\xFF\xFE\xF7\xBF\xCFf\xB3\xF5\xF5\xF5\xF9\xB36l\xD8P4\xED֬@\xB9\xA5k\xF1vJ\x8B\xE3o\xB9喃f\xB3\xD9\xE6\xE6\xE6k\xAF\xBD6\xF7dK׼O\x9F>)\xA5\x97^z)\xC1\xFC\x8DJw\x85\xA7\xED\xAB큕\xDB8r\xE4H\x97.]r\xDBuuu\xF9n\xEBٳg\xE5\xEB\x94|\xD7]w=\xFD\xF4\xD3<\xF0\xC0\xFE\xF3\x9Frw\xCFkjj\x9A6m\xDA\xE0\xC1\x83sc\x9A\x9A\x9A
+'\x96\xDF>|\xF8\xFA\xF5\xEBs\xDB{\xF6\xECi\xF1\x82-Χ\xA8T<\x98
+\xDE\xC8˟\xBBr\xE5\xCA\xFE\xFD\xFB\xE7\xB60eʔ\xE6\xE6\xE6\xDC?\xF3\xA7\x94*Rz\xB4\xC5E>|x}}}n\xFB\xD9g\x9F4hP\xE9*\x95\xD61W\xA0\xC2\xD2\xF3v\x85ʍ\xFF\xDA׾\xB6z\xF5\xEAl6\xFBꫯ>\xF8\xE0\x83\xB9\x9D\xA5k^8\x8D\xD2=\xEE
+O\xDA׉V\xE1v\x8F=Z\x9Dr\x83g͚u\xCE9\xE7\xE4~ͭ\xDC\xDDs\xDEx㍫\xAF\xBE\xFA\xE1\x87^\xBF~}iRn\x9Fu\xD6Y\x87\xAE|\xC1\xE7Sz\xD9ot\xF8\xF0\xE1\xFC\xE9
+
+
+w\xDEyg\xBF~\xFD\x96.]Z4\xB2\xF4P\xA1
+'nw\xEF\xDE\xFD\xC0\x81\xB9\xED\xFD\xFB\xF7\xE7\xEF[9\xB0Z\xB3m\xBE]\xA1r\xE3\x97/_>v\xEC\xD8l6\xFB\xF9\xCF~\xE5ʕ\xB9\x9D\x95׼\xE8\x9F\xC7|܅O\xDAWd`
+<8\xBF\xF3\xBF\xF8E\xE5\xEB\x94\xFC\xB1\x8F}l\xE2ĉ#G\x8E\xACp\xF7\x9C~\xFD\xFA\xE5^\x95ٵkW\xE5\xC0=z\xF4\xF2\xE5\xCBs\xDB{\xF7\xEEM)\xE5ޢ*\xD4\xE2|*V>Y6n\xDCx\xE5\x95W^\xED\x95W^\xB9\xE4\x92KZ\x9C\xE1\xA1R\xE5N,\\xE4_\xFD\xEAW\xB9\xED\x9D;w~\xFC\xE3\xCF8z\xF4h~\xBB\xE8\xDD\xD5֬\xC0\xF1ޮ\xC5\xF9\x97\x9F\xCDf\xF8\xB7\xBF\xFDm\xE0\xC0\x81\x85\x83\xF3ۥk^\xF4\xCFr\x8F\xBB\xC2S\x80\xF6r\x8C\xC0:z\xF4\xE8믿\x9ERz\xED\xB5\xD7\xF2\xEF\xD9544\xA4\x94\xB6mۖ\xCDfw\xECؑRڲeK6\x9B\xFDַ\xBE\xF5\xB3\x9F\xFDl\xFF\xFE\xFD3g\xCE1bD\xE9պu\xEB\xB6dɒ\xDC\xDBF\xA5\x83\xEB\xEB\xEB?\xFB\xD9\xCFΜ93\x9B\xCDΜ9\xF3\xCB_\xFErccc\xD1Y\x85\xCE=\xF7\xDC9s\xE6l۶\xED\xC9'\x9F\xECҥ\xCB{w\xFB(Rnb۷o\xCFOlǎ\xD7_\xFD\xB2e\xCB\xF6\xEF\xDF\xFF\xFD\xF7\xA7\x94jjj\x8A\xAEV:\x9F͛7\xA7\x94\xB6n\xDDZ\xB4\xB1y\xF3\xE6l6\x9BR7nܾ}\xFB\xB6m\xDB\xF6\xA9O}\xAA\xB0f͚\xF5\xD6[o]p\xC1\xF9\x8B\xE4O)<T\xFC$\xFE\xFBh\xB9E^\xBAt\xE9\x87>\xF4\xA1?\xFD\xE9O;w\xEE,|5\xE8\xFC\xF3\xCF_\xB0`\xC1\xEEݻ\xF4\xA3\xA5\x94jkk\xF3\xD3n\xCD
+\x94[\xBAr\xB7+\xF7Pʍ\xCFf\xB3=\xF4Ї?\xFC\xE1o\xFB\xDB\xD6|˖-)\xA5\xA6\xA6\xA6܀\xC2\xA1\xF4qWx
+о\x8EX\xE9\xBF\xED,\xDA޷o\xDFm\xB7\xDDֽ{\xF7!C\x86\xBC\xF5\xD6[\xA5W=z\xF4y\xE7\x9D\xF7\xCA+\xAF\xB48\xB8\xDCe\xCF*\xF4\xD4SO\xF5\xEC\xD9sذa{\xF6\xEC\xB9\xE2\x8A+Ə_\xEE
+\xD9lv͚5\xFD\xFB\x{1EFB6D}]\xB4hѥ\x97^:w\xEEܢ\xABU\x98O\xA9\xDC\xD1\xDC\xEF\xFD\xD5\xD5\xD5M\x9A4\xA9pŦO\x9F^UU5y\xF2\xE4\xD2\xAA\xF0P\xE9RW8\xB1\xF0g\x99<y\xF2\xB9\xE7\x9E[SS3k֬\xFC\xE9O>\xF9d\xAF^\xBD\x86\xBAq\xE3\xC6\xCB.\xBBl޼yǵ\xC7{\xBBr\xA5\xDC\xF8l6\xFB׿\xFE5\xA5\x94\xFB$V\xE55\xEF۷o\xE9\xACJw\x85\xA7p\xED\xB5זNN\x9A\x93\xF1u\x91\x9D\xD2\xC9\xF9\xA6M*\xF385\xF9c\xCFm\xB1s\xE7ΔR\xEE\x9D;ڋ\xA7\xC0)\xCBm\x91\xFF&O\xAB׎<NY \x98\xB7\x82	,\x80` \x98\xC0&\xB0\x82	,\x80` \x98\xC0&\xB0\x82	,\x80` \x98\xC0&\xB0\x82	,\x80` \x98\xC0&\xB0\x82	,\x80` \x98\xC0&\xB0\x82	,\x80` \x98\xC0v\xBAִi\xD3\xEE\xBA\xEB\xAE\xFA\xFA\xFA\xF6\x9E\xD0\xF9e\xB2\xD9l{\xCF\xE1}w\xE4ȑ\xFE\xFD\xFB\xBF\xF3\xCE;ݻw\xBF\xE7\x9E{\xBE\xF3\x9D\xEF\xF4\xE9ӧ\xBD'tZ\x9D\xE1\xAC\xDF\xFC\xE67\x95̘1\xE3\x9Dw\xDEI)>|\xF8\xC7?\xFE\xF1\x88#Nƴ\x80\xD3U\x87\xAC\xDF\xFE\xF6\xB7\xB3gϮ<fҤI\x85\xFF?~\xFC\xFB9#\xE0t\xD7\xE1k„	;w\xEE\xAC<f\xC1\x82w\xDF}w׮]SJ\x83\xBE\xFD\xF6\xDBO\xCA\xD4\x80\xD3T\xC7\xAC\xDF\xFD\xEEw˗/\xFF\xE7?\xFFYy\xD8E]4u\xEA\xD45k֌1\xE2\xB1\xC7\xCBd2'gz\xC0\xE9\xA9[{O\xE0\x84\xACZ\xB5*\xA5t\xCC\xC0ʹ\xE2\x8A+\xE6͛\xF7>\xCF\xA0\x83\xBF\x82u\xF1\xC5\xA7\x94\xDE}\xF7\xDD\xF6\x9E\xC0\xFF\xEB؁USS\x93Rjnn޳gO{\xCF\xE0u\xEC\xC0\xBA\xF0\xC2s^\xC4N\x9D$\xB0v\xED\xDA\xF5>\xDDb̘1\x9B6mz\x9F.tJ;\xB0z\xF7\xEEݥK\x97\x94Rccc+Oy\xE4\x91G&N\x9Cx\xF8\xF0\xE1\xD6^\xBCx\xF1s\xCF=w\xE3\x8D7n޼\xB9\xED\xB3N3;\xB0\xBAv\xEDz\xDEy\xE7\xA5\xE3	\xAC7\xDExcܸqW]uU\xEE\xBB\xDD+{\xF4\xD1GSJ
+
+
+7\xDDt\xD3\xFB\xF7"\xD0\xC9t\xEC\xC0J)\xF5\xEE\xDD;\xCF[\x84\xB9\xAE\xFA\xCB_\xFE2lذիWW\xB9jժ%K\x96\xE4\xB6ׯ_\xFF\xE9O\xFA\xE0\xC1\x83'4W\xE0\xF4\xD0Ik\xF7\xEEݭ\x9F\xE1\xEA\xDDw߽\xF5\xD6[+|:~͚5\x85\xFF\\xBE|\xF9\xBF\xF8\xC5\xD3\xE1oc'\xA8\xC3V\x9F>}\xD2\xF1\xD6\xCB/\xBF|\xC7w\xE4\xB67o\xDE|\xEF\xBD\xF7\x96\xF9\x85/|\xE1\xEB_\xFFz\xE1\x9Eٳg\xEF{\xDFk\xE3D\x80\xD3\xC6iXÆ
+{\xE1\x85\xE6̙ӳgϔү\xFD\xEB?\xFF\xF9\xCF-\x8E\\xB3f\xCD\xFF\xF8Ǣ\x9D\x8F>\xFA\xE8K/\xBDt\xF3:\xBFX\xB9\xB9\xB7>\xB0rn\xBB\xED\xB6Y\xB3f\xE5~\xF1\xF1\xC7/\xB0gϞ\x9Bo\xBEy\xE5ʕE\xFB\xB3٬/n*\xEB\xF0\x81u\xFE\xF9秔\xF6\xED\xDBw\xBC'\xDE|\xF3\xCD_\xFAҗRJ\xF3\xE7\xCF\xFF\xF7\xBF\xFF]t\xF4\x818p\xE0\xC0\xF4\xE9\xD3\xF7\xEC\xD9\xD3\xD8\xD8\xF8\xB9\xCF}.h߾}w\xDEy\xE7\x91#GNl\xE2@\xA7\xD5Ik\xEF޽m8\xF7\x91G\xE9ڵkSS\xD3\xFE\xF0\x87\xC2\xFDK\x97.\x9D>}\xFA\xF3\xCF??v\xEC\xD8\xEA\xEA\xEA.\xB8\xE0?\xF8A\xE1\x80\xD7^{\xADh@^'	\xACҗ\xA0Z\xA3\xA6\xA6擟\xFCdJiŊ\xF9\x9D\xCD\xCD\xCD\xF7\xDCsO6\x9B>|x~g\xEEwSJg\x9CqFn\xE3\xB1\xC7۰aC\x9B\xA7
+tb>\xB0r\x9F\xC1:p\xE0@\xDBN\xBF\xF1\xC6SJk׮\xCD\xEFy\xE2\x89'֭[\x97R\xBA\xF7\xDE{\xF3_\xF8\xFE\xCC3Ϥ\x94\xAA\xAB\xAB\xA7O\x9F\x9E\xDBs\xF8\xF0\xE1\xFB\xEF\xBF\xFF&tZ>\xB0\xAA\xAA\xAARJm\xFE
+СC\x87\xA6\x94
+\xFFN\xFE\xBD\xBF_\xFE\xF2\x97Æ
+[\xB6l\xD9ĉ|\xF0\xC1\x94ҠA\x83ƌ3~\xFC\xF8܀y\xF3\xE6\x95\xFB
+D\xE0t\xD6\xE1\xAB\xBA\xBA:\xA5t\xE8С\xB6\x9D~\xC9%\x97\xA4\x94\xB6oߞ\xDFs\xF9\xE5\x97\xE7\xB7\xDF|\xF3\xCD\xE1Ç\x8F7\xEE\xE8ѣ)\xA5Q\xA3F\xA5\x94\xBE\xFF\xFD\xEF\xE7\xB2,\xA54eʔ\xB6N\xE8\xB4:|`\x9D}\xF6\xD9)\xA5\xBF`\xBD\xA1\xA1!\x93\xC9}!{\x91\xDC\xD7h\xBD\xF7\xDE{\xF9=\x8B/\xBE\xEF\xBE\xFBr\xDF\xE0P誫\xAE\xFA\xCAW\xBE\x92R\xEA֭\xDBO<\x91۹p\xE1\xC2\x9B>\xD0	u\xF8\xC0\xEAիW\xFA\xBFױ\x8A\xACZ\xB5*\xA5t\xF7\xDDwoذ\xA1ܟ\xB89묳RJ\xCCf\xB3{\xF7\xEE]\xB9r\xE5s\xCF=\xB7u\xEB\xD6=z\x8D\\xBDz\xF5-\xB7\xDC2y\xF2\xE4\xB7\xDF~\xBB\xFF\xFE\xB9\x9D\xAD\xFF#\xD3\xC0\xE9\xA3[{O\xE0D\x9Dy\xE6\x99)\xA5\x9A\x9A\x9A\xD2C\xFF\xF8\xC7?RJ+V\xAC\xF8\xC8G>R\xF9"\xCD\xCDͥ/Y9r\xE4\xC8\xE2ŋ/^\\xB8\xF3\xB2\xCB.;\xBE\xE9\xA7\x81\xFF
+V\xEE{\x86Rz\xE8\x98\xCDtLC\x86y\xF5\xD5W_x\xE1\x85r\x89\x96\xFBT@\xA1X\x99L&\x93\xC9\xDCp\xC3
+\xA5\x87n\xBD\xF5\xD6\xDCG\xACڠ_\xBF~3f\xCCx\xFD\xF5ׯ\xBB\xEE\xBA;\xEE\xB8cݺu\xB3gϾ\xE6\x9Ak
+\xC7TWW\xF5\xAB_m\xDB\xF5\x80N,S\xEE\xC3I\xC8\xD9g\x9F]__\xDFbK544L\x980aѢE;v\xEC\xA8|\x91L&ӫW\xAF\xBE}\xFB:t\xE4ȑ\x9F\xF9\xCCg\xBAuk\xE1\xFD\xD37\xDF|sƌs\xE7\xCEݹs\xE7\xB3\xCF>;r\xE4Ș\x9F\xE8D:C`\xDDw\xDF}\x93&Mj\xEFY\xFC\xAF\xCEX\xA7\x94\xFF,\x80S\x8D\xC0֖\xC0\x9A7o^]]]]]݂Z9\xB8o߾\x8B-:\xE6\xE0\xB9s\xE7\xD6\xD6ֶr0\xC0\xA9\xA9-\x9F\xC1\xAA\xAD\xAD\xCD\xFD\xF1\xBE\xDA\xDAڭ[\xB7\xB6rp]]ݖ-[\x9C\x9A\xDA\xF2
+V&\x93)\xDAh\xCD\xE0\xE3\xBA2@\xC7Ֆ\xC0\x9A:ujmmmmm\xEDO~\xF2\x93vpj\xF25
+\xC1\xFC!@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81L`X\xC1@0\x81\xEC\xB8
+\x8B\x82CV\xABIEND\xAEB`\x82
\ No newline at end of file

Added: trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.txt (0 => 100718)


--- trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to-expected.txt	2011-11-18 05:25:01 UTC (rev 100718)
@@ -0,0 +1,3 @@
+The text and ellipsis should not overlap.
+
+هذا هو الاختبار

Added: trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html (0 => 100718)


--- trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html	2011-11-18 05:25:01 UTC (rev 100718)
@@ -0,0 +1,18 @@
+<style>
+  div {
+    font-size:36pt;
+    width:100px;
+    white-space:nowrap;
+    overflow:hidden;
+    text-overflow:ellipsis;
+    direction:rtl;
+  }
+</style>
+ <script>
+  if (window.layoutTestController)
+    layoutTestController.dumpAsText(true);
+</script>
+
+<p>The text and ellipsis should not overlap.</p>
+<div>&#1607;&#1584;&#1575; &#1607;&#1608; &#1575;&#1604;&#1575;&#1582;&#1578;&#1576;&#1575;&#1585;</div>
+

Modified: trunk/Source/WebCore/ChangeLog (100717 => 100718)


--- trunk/Source/WebCore/ChangeLog	2011-11-18 05:02:58 UTC (rev 100717)
+++ trunk/Source/WebCore/ChangeLog	2011-11-18 05:25:01 UTC (rev 100718)
@@ -1,3 +1,21 @@
+2011-11-17  Robin Cao  <[email protected]>
+
+        [chromium] Font::drawComplexText can not draw a segment of text run
+        https://bugs.webkit.org/show_bug.cgi?id=72095
+
+        Reviewed by Adam Barth.
+
+        drawComplexText() should respect the 'from' and 'to' arguments.
+        Drawing the whole text run may result in text overlapping.
+
+        Test: platform/chromium-linux/fast/text/international/draw-complex-text-from-to.html
+
+        * platform/graphics/chromium/ComplexTextControllerLinux.cpp:
+        (WebCore::ComplexTextController::glyphsForRange):
+        * platform/graphics/chromium/ComplexTextControllerLinux.h:
+        * platform/graphics/chromium/FontLinux.cpp:
+        (WebCore::Font::drawComplexText):
+
 2011-11-17  Adam Barth  <[email protected]>
 
         Unique SecurityOrigins shouldn't remember their old schemes and hosts

Modified: trunk/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp (100717 => 100718)


--- trunk/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp	2011-11-18 05:02:58 UTC (rev 100717)
+++ trunk/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.cpp	2011-11-18 05:25:01 UTC (rev 100718)
@@ -545,4 +545,27 @@
     return FloatRect(point.x() + toX, point.y(), fromX - toX, height);
 }
 
+void ComplexTextController::glyphsForRange(int from, int to, int& fromGlyph, int& glyphLength)
+{
+    // Character offsets within the current run. THESE MAY NOT BE IN RANGE and may
+    // be negative, etc. The code below handles this.
+    int fromChar = from - m_item.item.pos;
+    int toChar = to - m_item.item.pos;
+
+    // See if there are any characters in the current run.
+    if (!numCodePoints() || fromChar >= static_cast<int>(numCodePoints()) || toChar <= 0) {
+        fromGlyph = -1;
+        glyphLength = 0;
+        return;
+    }
+
+    // Compute the starting glyph within this span. |from| and |to| are
+    // global offsets that may intersect arbitrarily with our local run.
+    fromGlyph = m_item.log_clusters[fromChar < 0 ? 0 : fromChar];
+    if (toChar >= static_cast<int>(numCodePoints()))
+        glyphLength = length() - fromGlyph;
+    else
+        glyphLength = m_item.log_clusters[toChar] - fromGlyph;
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h (100717 => 100718)


--- trunk/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h	2011-11-18 05:02:58 UTC (rev 100717)
+++ trunk/Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h	2011-11-18 05:25:01 UTC (rev 100718)
@@ -93,6 +93,9 @@
     bool rtl() const { return m_run.rtl(); }
     const uint16_t* glyphs() const { return m_glyphs16; }
 
+    // Return the start index and length of glyphs for the range [from, to) in the current script run.
+    void glyphsForRange(int from, int to, int& fromGlyph, int& glyphLength);
+
     // Return the length of the array returned by |glyphs|
     const unsigned length() const { return m_item.num_glyphs; }
 

Modified: trunk/Source/WebCore/platform/graphics/chromium/FontLinux.cpp (100717 => 100718)


--- trunk/Source/WebCore/platform/graphics/chromium/FontLinux.cpp	2011-11-18 05:02:58 UTC (rev 100717)
+++ trunk/Source/WebCore/platform/graphics/chromium/FontLinux.cpp	2011-11-18 05:25:01 UTC (rev 100718)
@@ -201,16 +201,22 @@
         controller.setupForRTL();
 
     while (controller.nextScriptRun()) {
+        // Check if there is any glyph found in the current script run.
+        int fromGlyph, glyphLength;
+        controller.glyphsForRange(from, to, fromGlyph, glyphLength);
+        if (fromGlyph < 0 || glyphLength <= 0)
+            continue;
+
         if (fill) {
             controller.fontPlatformDataForScriptRun()->setupPaint(&fillPaint);
             adjustTextRenderMode(&fillPaint, gc->platformContext());
-            canvas->drawPosText(controller.glyphs(), controller.length() << 1, controller.positions(), fillPaint);
+            canvas->drawPosText(controller.glyphs() + fromGlyph, glyphLength << 1, controller.positions() + fromGlyph, fillPaint);
         }
 
         if (stroke) {
             controller.fontPlatformDataForScriptRun()->setupPaint(&strokePaint);
             adjustTextRenderMode(&strokePaint, gc->platformContext());
-            canvas->drawPosText(controller.glyphs(), controller.length() << 1, controller.positions(), strokePaint);
+            canvas->drawPosText(controller.glyphs() + fromGlyph, glyphLength << 1, controller.positions() + fromGlyph, strokePaint);
         }
     }
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to