⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 10614 in webkit


Ignore:
Timestamp:
Sep 24, 2005, 4:45:21 AM (21 years ago)
Author:
darin
Message:

Reviewed by Dave.
Landed by Darin.

Test cases added:

  • layout-tests/fast/text/international/bidi-override.html: Added.
  • layout-tests/fast/text/international/bidi-override-expected.checksum: Added.
  • layout-tests/fast/text/international/bidi-override-expected.png: Added.
  • layout-tests/fast/text/international/bidi-override-expected.txt: Added.
  • khtml/rendering/bidi.h: Include an "override direction" flag in BidiRun.
  • khtml/rendering/bidi.cpp: (khtml::RenderBlock::computeVerticalPositionsForLine): Pass in "override direction" parameter. (khtml::RenderBlock::bidiReorderLine): Set direction based on override. (khtml::RenderBlock::layoutInlineChildren): Pass in "override direction" parameter.
  • khtml/rendering/render_object.h: Update position function to take an "override direction" parameter.
  • khtml/rendering/render_box.h: Ditto.
  • khtml/rendering/render_box.cpp: (RenderBox::position): Ditto.
  • khtml/rendering/render_text.h: Add an m_dirOverride field to InlineTextBox.
  • khtml/rendering/render_text.cpp: (InlineTextBox::paint): Pass true for override to drawText if m_dirOverride is set. (InlineTextBox::paintSelection): Ditto. (InlineTextBox::paintMarkedTextBackground): Ditto. (RenderText::position): Set up m_dirOverride in the InlineTextBox based on the override parameter.
  • kwq/WebCoreTextRenderer.h: Replace visuallyOrdered flag with a directionalOverride flag.
  • kwq/WebCoreTextRendererFactory.mm: (WebCoreInitializeEmptyTextStyle): Ditto.
  • kwq/KWQPainter.mm: (QPainter::drawText): Ditto. (QPainter::drawHighlightForText): Ditto.
  • updated pixel test results for unrelated tests with results that recently changed
  • layout-tests/fast/forms/006-expected.checksum:
  • layout-tests/fast/forms/006-expected.png:
  • layout-tests/fast/forms/007-expected.checksum:
  • layout-tests/fast/forms/007-expected.png:
  • layout-tests/fast/text/whitespace/013-expected.checksum:
  • layout-tests/fast/text/whitespace/013-expected.png:
Location:
trunk
Files:
4 added
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/fast/forms/006-expected.checksum

    r10427 r10614  
    1 17d2d405204ad61b8ee3d57e1129eb97
     1eed2e2ca78f5d8bd2421ab33189c931b
  • trunk/LayoutTests/fast/forms/007-expected.checksum

    r10427 r10614  
    1 a5779621a5bdced6dd78283625fd712a
     18c52d7300b4c1c23a6f12736837ee3b6
  • trunk/LayoutTests/fast/text/whitespace/013-expected.checksum

    r10382 r10614  
    1 d25cc6dee9e550df61acc194775a758c
     162e7e4ad1d9fd21b1e5d5ec5905df9a5
  • trunk/WebCore/ChangeLog-2005-12-19

    r10613 r10614  
     12005-09-24  Mitz Pettel  <opendarwin.org@mitzpettel.com>
     2
     3        Reviewed by Dave.
     4        Landed by Darin.
     5
     6        - fixed http://bugzilla.opendarwin.org/show_bug.cgi?id=4862
     7          Incorrect layout of bidi overrides
     8
     9        Test cases added:
     10        * layout-tests/fast/text/international/bidi-override.html: Added.
     11        * layout-tests/fast/text/international/bidi-override-expected.checksum: Added.
     12        * layout-tests/fast/text/international/bidi-override-expected.png: Added.
     13        * layout-tests/fast/text/international/bidi-override-expected.txt: Added.
     14
     15        * khtml/rendering/bidi.h: Include an "override direction" flag in BidiRun.
     16        * khtml/rendering/bidi.cpp:
     17        (khtml::RenderBlock::computeVerticalPositionsForLine): Pass in "override direction" parameter.
     18        (khtml::RenderBlock::bidiReorderLine): Set direction based on override.
     19        (khtml::RenderBlock::layoutInlineChildren): Pass in "override direction" parameter.
     20
     21        * khtml/rendering/render_object.h: Update position function to take an "override direction" parameter.
     22        * khtml/rendering/render_box.h: Ditto.
     23        * khtml/rendering/render_box.cpp: (RenderBox::position): Ditto.
     24
     25        * khtml/rendering/render_text.h: Add an m_dirOverride field to InlineTextBox.
     26        * khtml/rendering/render_text.cpp:
     27        (InlineTextBox::paint): Pass true for override to drawText if m_dirOverride is set.
     28        (InlineTextBox::paintSelection): Ditto.
     29        (InlineTextBox::paintMarkedTextBackground): Ditto.
     30        (RenderText::position): Set up m_dirOverride in the InlineTextBox based on the override parameter.
     31
     32        * kwq/WebCoreTextRenderer.h: Replace visuallyOrdered flag with a directionalOverride flag.
     33        * kwq/WebCoreTextRendererFactory.mm: (WebCoreInitializeEmptyTextStyle): Ditto.
     34        * kwq/KWQPainter.mm:
     35        (QPainter::drawText): Ditto.
     36        (QPainter::drawHighlightForText): Ditto.
     37
     38        - updated pixel test results for unrelated tests with results that recently changed
     39
     40        * layout-tests/fast/forms/006-expected.checksum:
     41        * layout-tests/fast/forms/006-expected.png:
     42        * layout-tests/fast/forms/007-expected.checksum:
     43        * layout-tests/fast/forms/007-expected.png:
     44        * layout-tests/fast/text/whitespace/013-expected.checksum:
     45        * layout-tests/fast/text/whitespace/013-expected.png:
     46
    1472005-09-24  Justin Garcia  <justin.garcia@apple.com>
    248
  • trunk/WebCore/khtml/rendering/bidi.cpp

    r10458 r10614  
    880880        // Position is used to properly position both replaced elements and
    881881        // to update the static normal flow x/y of positioned elements.
    882         r->obj->position(r->box, r->start, r->stop - r->start, r->level%2);
     882        r->obj->position(r->box, r->start, r->stop - r->start, r->level%2, r->override);
    883883    }
    884884}
     
    927927        } else {
    928928            dirCurrent = bidi.current.direction();
     929            if (bidi.context->override && dirCurrent != QChar::DirRLE && dirCurrent != QChar::DirLRE && dirCurrent != QChar::DirRLO && dirCurrent != QChar::DirLRO && dirCurrent != QChar::DirPDF)
     930                dirCurrent = bidi.context->dir;
    929931        }
    930932
     
    14841486        BidiContext *startEmbed;
    14851487        if( style()->direction() == LTR ) {
    1486             startEmbed = new BidiContext( 0, QChar::DirL );
     1488            startEmbed = new BidiContext( 0, QChar::DirL, NULL, style()->unicodeBidi() == Override );
    14871489            bidi.status.eor = QChar::DirL;
    14881490        } else {
    1489             startEmbed = new BidiContext( 1, QChar::DirR );
     1491            startEmbed = new BidiContext( 1, QChar::DirR, NULL, style()->unicodeBidi() == Override );
    14901492            bidi.status.eor = QChar::DirR;
    14911493        }
  • trunk/WebCore/khtml/rendering/bidi.h

    r5119 r10614  
    5555    struct BidiRun {
    5656        BidiRun(int _start, int _stop, RenderObject *_obj, BidiContext *context, QChar::Direction dir)
    57             :  start( _start ), stop( _stop ), obj( _obj ), box(0), nextRun(0)
     57            :  start( _start ), stop( _stop ), obj( _obj ), box(0), override(context->override), nextRun(0)
    5858        {
    5959            if(dir == QChar::DirON) dir = context->dir;
     
    9494        // explicit + implicit levels here
    9595        uchar level;
     96        bool override : 1;
    9697
    9798        bool compact : 1;
  • trunk/WebCore/khtml/rendering/render_box.cpp

    r10566 r10614  
    684684}
    685685
    686 void RenderBox::position(InlineBox* box, int from, int len, bool reverse)
     686void RenderBox::position(InlineBox* box, int from, int len, bool reverse, bool override)
    687687{
    688688    if (isPositioned()) {
  • trunk/WebCore/khtml/rendering/render_box.h

    r10566 r10614  
    9090    void calcHorizontalMargins(const Length& ml, const Length& mr, int cw);
    9191
    92     virtual void position(InlineBox* box, int from, int len, bool reverse);
     92    virtual void position(InlineBox* box, int from, int len, bool reverse, bool override);
    9393   
    9494    virtual void dirtyLineBoxes(bool fullLayout, bool isRootLineBox=false);
  • trunk/WebCore/khtml/rendering/render_object.h

    r10566 r10614  
    743743
    744744    // positioning of inline children (bidi)
    745     virtual void position(InlineBox*, int, int, bool) {}
     745    virtual void position(InlineBox*, int, int, bool, bool) {}
    746746
    747747    // Applied as a "slop" to dirty rect checks during the outline painting phase's dirty-rect checks.
  • trunk/WebCore/khtml/rendering/render_text.cpp

    r10556 r10614  
    385385        font->drawText(i.p, m_x + tx, m_y + ty + m_baseline, textObject()->tabWidth(), textPos(),
    386386                       textObject()->string()->s, textObject()->string()->l, m_start, endPoint,
    387                        m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, styleToUse->visuallyOrdered());
     387                       m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, m_dirOverride || styleToUse->visuallyOrdered());
    388388    } else {
    389389        int sPos, ePos;
     
    394394                font->drawText(i.p, m_x + tx, m_y + ty + m_baseline, textObject()->tabWidth(), textPos(),
    395395                               textObject()->string()->s, textObject()->string()->l, m_start, m_len,
    396                                m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, styleToUse->visuallyOrdered());
     396                               m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, m_dirOverride || styleToUse->visuallyOrdered());
    397397            } else {
    398398                if (sPos - 1 >= 0) {
    399399                    font->drawText(i.p, m_x + tx, m_y + ty + m_baseline, textObject()->tabWidth(), textPos(),
    400400                                   textObject()->string()->s, textObject()->string()->l, m_start, m_len,
    401                                    m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, styleToUse->visuallyOrdered(), 0, sPos);
     401                                   m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, m_dirOverride || styleToUse->visuallyOrdered(), 0, sPos);
    402402                }
    403403                if (ePos < m_start + m_len) {
    404404                    font->drawText(i.p, m_x + tx, m_y + ty + m_baseline, textObject()->tabWidth(), textPos(),
    405405                                   textObject()->string()->s, textObject()->string()->l, m_start, m_len,
    406                                    m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, styleToUse->visuallyOrdered(), ePos, -1);
     406                                   m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, m_dirOverride || styleToUse->visuallyOrdered(), ePos, -1);
    407407                }
    408408            }
     
    421421            font->drawText(i.p, m_x + tx, m_y + ty + m_baseline, textObject()->tabWidth(), textPos(),
    422422                           textObject()->string()->s, textObject()->string()->l, m_start, m_len,
    423                            m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, styleToUse->visuallyOrdered(), sPos, ePos);
     423                           m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, m_dirOverride || styleToUse->visuallyOrdered(), sPos, ePos);
    424424            if (selectionTextShadow)
    425425                i.p->clearShadow();
     
    528528    f->drawHighlightForText(p, m_x + tx, y + ty, h, textObject()->tabWidth(), textPos(),
    529529                            textObject()->str->s, textObject()->str->l, m_start, m_len,
    530                             m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, style->visuallyOrdered(), sPos, ePos, c);
     530                            m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, m_dirOverride || style->visuallyOrdered(), sPos, ePos, c);
    531531    p->restore();
    532532}
     
    551551    int h = r->selectionHeight();
    552552    f->drawHighlightForText(p, m_x + tx, y + ty, h, textObject()->tabWidth(), textPos(), textObject()->str->s, textObject()->str->l, m_start, m_len,
    553             m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, style->visuallyOrdered(), sPos, ePos, c);
     553            m_toAdd, m_reversed ? QPainter::RTL : QPainter::LTR, m_dirOverride || style->visuallyOrdered(), sPos, ePos, c);
    554554    p->restore();
    555555}
     
    16851685}
    16861686
    1687 void RenderText::position(InlineBox* box, int from, int len, bool reverse)
     1687void RenderText::position(InlineBox* box, int from, int len, bool reverse, bool override)
    16881688{
    16891689    InlineTextBox *s = static_cast<InlineTextBox*>(box);
     
    17081708
    17091709    s->m_reversed = reverse;
     1710    s->m_dirOverride = override || style()->visuallyOrdered();
    17101711    s->m_start = from;
    17111712    s->m_len = len;
  • trunk/WebCore/khtml/rendering/render_text.h

    r10556 r10614  
    150150
    151151    bool m_reversed : 1;
     152    bool m_dirOverride : 1;
    152153    bool m_treatAsText : 1; // Whether or not to treat a <br> as text for the purposes of line height.
    153     int m_toAdd : 14; // for justified text
     154    int m_toAdd : 13; // for justified text
    154155
    155156private:
     
    197198    QChar *text() const { return str->s; }
    198199    unsigned int stringLength() const { return str->l; } // non virtual implementation of length()
    199     virtual void position(InlineBox* box, int from, int len, bool reverse);
     200    virtual void position(InlineBox* box, int from, int len, bool reverse, bool override);
    200201
    201202    virtual unsigned int width(unsigned int from, unsigned int len, const Font *f, int xpos) const;
  • trunk/WebCore/kwq/KWQPainter.mm

    r10613 r10614  
    668668    style.backgroundColor = backgroundColor.isValid() ? nsColor(backgroundColor) : nil;
    669669    style.rtl = d == RTL ? true : false;
    670     style.visuallyOrdered = visuallyOrdered;
     670    style.directionalOverride = visuallyOrdered;
    671671    style.letterSpacing = letterSpacing;
    672672    style.wordSpacing = wordSpacing;
     
    707707    style.backgroundColor = backgroundColor.isValid() ? nsColor(backgroundColor) : nil;
    708708    style.rtl = d == RTL ? true : false;
    709     style.visuallyOrdered = visuallyOrdered;
     709    style.directionalOverride = visuallyOrdered;
    710710    style.letterSpacing = letterSpacing;
    711711    style.wordSpacing = wordSpacing;
  • trunk/WebCore/kwq/WebCoreTextRenderer.h

    r9963 r10614  
    4242    unsigned smallCaps : 1;
    4343    unsigned rtl : 1;
    44     unsigned visuallyOrdered : 1;
     44    unsigned directionalOverride : 1;
    4545    unsigned applyRunRounding : 1;
    4646    unsigned applyWordRounding : 1;
  • trunk/WebCore/kwq/WebCoreTextRendererFactory.mm

    r9963 r10614  
    4848    style->backgroundColor = nil;
    4949    style->rtl = false;
    50     style->visuallyOrdered = false;
     50    style->directionalOverride = false;
    5151    style->letterSpacing = 0;
    5252    style->wordSpacing = 0;
Note: See TracChangeset for help on using the changeset viewer.