Changeset 172723 in webkit


Ignore:
Timestamp:
Aug 18, 2014 1:58:26 PM (10 years ago)
Author:
vivek.vg@samsung.com
Message:

Implement CanvasRenderingContext2D direction attribute
https://bugs.webkit.org/show_bug.cgi?id=135878

Reviewed by Darin Adler.

Source/WebCore:

The attribute, 'direction', represents the text directionality.
This is an important attribute for the bi-directional text within the CanvasRenderingContext2D.
The allowed set of values are 'rtl', 'ltr' and 'inherit'.

Specification URL: http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting.html#dom-context-2d-direction

Test: fast/canvas/canvas-direction.html

  • html/canvas/CanvasRenderingContext2D.cpp:

(WebCore::inheritedDirection):
(WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
(WebCore::CanvasRenderingContext2D::reset):
(WebCore::CanvasRenderingContext2D::State::State):
(WebCore::CanvasRenderingContext2D::State::operator=):
(WebCore::CanvasRenderingContext2D::direction):
(WebCore::CanvasRenderingContext2D::setDirection):
(WebCore::CanvasRenderingContext2D::drawTextInternal):

  • html/canvas/CanvasRenderingContext2D.h:
  • html/canvas/CanvasRenderingContext2D.idl:

LayoutTests:

  • fast/canvas/canvas-direction-expected.txt: Added.
  • fast/canvas/canvas-direction.html: Added.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r172721 r172723  
     12014-08-18  Vivek Galatage  <vivek.vg@samsung.com>
     2
     3        Implement CanvasRenderingContext2D direction attribute
     4        https://bugs.webkit.org/show_bug.cgi?id=135878
     5
     6        Reviewed by Darin Adler.
     7
     8        * fast/canvas/canvas-direction-expected.txt: Added.
     9        * fast/canvas/canvas-direction.html: Added.
     10
    1112014-08-18  Benjamin Poulain  <benjamin@webkit.org>
    212
  • trunk/Source/WebCore/ChangeLog

    r172721 r172723  
     12014-08-18  Vivek Galatage  <vivek.vg@samsung.com>
     2
     3        Implement CanvasRenderingContext2D direction attribute
     4        https://bugs.webkit.org/show_bug.cgi?id=135878
     5
     6        Reviewed by Darin Adler.
     7
     8        The attribute, 'direction', represents the text directionality.
     9        This is an important attribute for the bi-directional text within the CanvasRenderingContext2D.
     10        The allowed set of values are 'rtl', 'ltr' and 'inherit'.
     11
     12        Specification URL: http://www.whatwg.org/specs/web-apps/current-work/multipage/scripting.html#dom-context-2d-direction
     13
     14        Test: fast/canvas/canvas-direction.html
     15
     16        * html/canvas/CanvasRenderingContext2D.cpp:
     17        (WebCore::inheritedDirection):
     18        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
     19        (WebCore::CanvasRenderingContext2D::reset):
     20        (WebCore::CanvasRenderingContext2D::State::State):
     21        (WebCore::CanvasRenderingContext2D::State::operator=):
     22        (WebCore::CanvasRenderingContext2D::direction):
     23        (WebCore::CanvasRenderingContext2D::setDirection):
     24        (WebCore::CanvasRenderingContext2D::drawTextInternal):
     25        * html/canvas/CanvasRenderingContext2D.h:
     26        * html/canvas/CanvasRenderingContext2D.idl:
     27
    1282014-08-18  Benjamin Poulain  <benjamin@webkit.org>
    229
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp

    r169534 r172723  
    105105};
    106106
     107static inline TextDirection inheritedDirection(HTMLCanvasElement& canvasElement)
     108{
     109    canvasElement.document().updateStyleIfNeeded();
     110    RenderStyle* computedStyle = canvasElement.computedStyle();
     111    return computedStyle ? computedStyle->direction() : LTR;
     112}
     113
    107114CanvasRenderingContext2D::CanvasRenderingContext2D(HTMLCanvasElement* canvas, bool usesCSSCompatibilityParseMode, bool usesDashboardCompatibilityMode)
    108115    : CanvasRenderingContext(canvas)
     
    114121#endif
    115122{
     123    m_stateStack.first().m_direction = inheritedDirection(*canvas);
    116124#if !ENABLE(DASHBOARD_SUPPORT)
    117125    ASSERT_UNUSED(usesDashboardCompatibilityMode, !usesDashboardCompatibilityMode);
     
    155163    unwindStateStack();
    156164    m_stateStack.resize(1);
    157     m_stateStack.first() = State();
     165    m_stateStack.first() = State(inheritedDirection(*canvas()));
    158166    m_path.clear();
    159167    m_unrealizedSaveCount = 0;
    160168}
    161169
    162 CanvasRenderingContext2D::State::State()
     170CanvasRenderingContext2D::State::State(TextDirection direction)
    163171    : m_strokeStyle(Color::black)
    164172    , m_fillStyle(Color::black)
     
    177185    , m_textAlign(StartTextAlign)
    178186    , m_textBaseline(AlphabeticTextBaseline)
     187    , m_direction(direction)
    179188    , m_unparsedFont(defaultFont)
    180189    , m_realizedFont(false)
     
    204213    , m_textAlign(other.m_textAlign)
    205214    , m_textBaseline(other.m_textBaseline)
     215    , m_direction(other.m_direction)
    206216    , m_unparsedFont(other.m_unparsedFont)
    207217    , m_font(other.m_font)
     
    239249    m_textAlign = other.m_textAlign;
    240250    m_textBaseline = other.m_textBaseline;
     251    m_direction = other.m_direction;
    241252    m_unparsedFont = other.m_unparsedFont;
    242253    m_font = other.m_font;
     
    21532164}
    21542165
     2166String CanvasRenderingContext2D::direction() const
     2167{
     2168    return state().m_direction == RTL ? ASCIILiteral("rtl") : ASCIILiteral("ltr");
     2169}
     2170
     2171void CanvasRenderingContext2D::setDirection(const String& directionString)
     2172{
     2173    TextDirection direction;
     2174    if (directionString == "inherit")
     2175        direction = inheritedDirection(*canvas());
     2176    else if (directionString == "rtl")
     2177        direction = RTL;
     2178    else if (directionString == "ltr")
     2179        direction = LTR;
     2180    else
     2181        return;
     2182
     2183    if (state().m_direction == direction)
     2184        return;
     2185
     2186    realizeSaves();
     2187    modifiableState().m_direction = direction;
     2188}
     2189
    21552190void CanvasRenderingContext2D::fillText(const String& text, float x, float y)
    21562191{
     
    22502285
    22512286    RenderStyle* computedStyle = canvas()->computedStyle();
    2252     TextDirection direction = computedStyle ? computedStyle->direction() : LTR;
    2253     bool isRTL = direction == RTL;
     2287    bool isRTL = state().m_direction == RTL;
    22542288    bool override = computedStyle ? isOverride(computedStyle->unicodeBidi()) : false;
    22552289
    2256     TextRun textRun(normalizedText, 0, 0, TextRun::AllowTrailingExpansion, direction, override, true, TextRun::NoRounding);
     2290    TextRun textRun(normalizedText, 0, 0, TextRun::AllowTrailingExpansion, state().m_direction, override, true, TextRun::NoRounding);
    22572291    // Draw the item text at the correct point.
    22582292    FloatPoint location(x, y);
     
    22752309    }
    22762310
    2277     float fontWidth = font.width(TextRun(normalizedText, 0, 0, TextRun::AllowTrailingExpansion, direction, override));
     2311    float fontWidth = font.width(TextRun(normalizedText, 0, 0, TextRun::AllowTrailingExpansion, state().m_direction, override));
    22782312
    22792313    useMaxWidth = (useMaxWidth && maxWidth < fontWidth);
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.h

    r168476 r172723  
    3939#include "Path.h"
    4040#include "PlatformLayer.h"
     41#include "TextDirection.h"
    4142#include <wtf/Vector.h>
    4243#include <wtf/text/WTFString.h>
     
    212213    void setTextBaseline(const String&);
    213214
     215    String direction() const;
     216    void setDirection(const String&);
     217
    214218    void fillText(const String& text, float x, float y);
    215219    void fillText(const String& text, float x, float y, float maxWidth);
     
    226230private:
    227231    struct State : FontSelectorClient {
    228         State();
     232        explicit State(TextDirection = LTR);
    229233        virtual ~State();
    230234
     
    257261        TextAlign m_textAlign;
    258262        TextBaseline m_textBaseline;
     263        TextDirection m_direction;
    259264
    260265        String m_unparsedFont;
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.idl

    r168476 r172723  
    9898    attribute DOMString textAlign;
    9999    attribute DOMString textBaseline;
     100    attribute DOMString direction;
    100101
    101102    TextMetrics measureText(DOMString text);
Note: See TracChangeset for help on using the changeset viewer.