Changeset 64173 in webkit


Ignore:
Timestamp:
Jul 27, 2010 4:02:00 PM (14 years ago)
Author:
jhawkins@chromium.org
Message:

2010-07-27 James Hawkins <jhawkins@chromium.org>

Reviewed by Darin Fisher.

[Chromium] Add the ability to show right-aligned icons in the AutoFill popup.
https://bugs.webkit.org/show_bug.cgi?id=43076

  • public/WebView.h:
  • src/AutoFillPopupMenuClient.cpp: (WebKit::AutoFillPopupMenuClient::getIcon): (WebKit::AutoFillPopupMenuClient::removeSuggestionAtIndex): (WebKit::AutoFillPopupMenuClient::itemIcon): (WebKit::AutoFillPopupMenuClient::initialize): (WebKit::AutoFillPopupMenuClient::setSuggestions):
  • src/AutoFillPopupMenuClient.h:
  • src/WebViewImpl.cpp: (WebKit::WebViewImpl::applyAutoFillSuggestions): (WebKit::WebViewImpl::applyAutocompleteSuggestions):
  • src/WebViewImpl.h:

2010-07-27 James Hawkins <jhawkins@chromium.org>

Reviewed by Darin Fisher.

Add itemIcon() method to the PopupMenuClient, used by Chrome AutoFill
to display right-aligned credit card icons in the suggestions popup.
https://bugs.webkit.org/show_bug.cgi?id=43076

No new tests as this is only used by the Chromium WebKit API.

  • platform/PopupMenuClient.h:
  • platform/chromium/PopupMenuChromium.cpp: (WebCore::PopupListBox::paintRow):
  • rendering/RenderMenuList.cpp: (WebCore::RenderMenuList::itemIcon):
  • rendering/RenderMenuList.h:
  • rendering/RenderTextControlSingleLine.cpp: (WebCore::RenderTextControlSingleLine::itemIcon):
  • rendering/RenderTextControlSingleLine.h:
Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r64164 r64173  
     12010-07-27  James Hawkins  <jhawkins@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        Add itemIcon() method to the PopupMenuClient, used by Chrome AutoFill
     6        to display right-aligned credit card icons in the suggestions popup.
     7        https://bugs.webkit.org/show_bug.cgi?id=43076
     8
     9        No new tests as this is only used by the Chromium WebKit API.
     10
     11        * platform/PopupMenuClient.h:
     12        * platform/chromium/PopupMenuChromium.cpp:
     13        (WebCore::PopupListBox::paintRow):
     14        * rendering/RenderMenuList.cpp:
     15        (WebCore::RenderMenuList::itemIcon):
     16        * rendering/RenderMenuList.h:
     17        * rendering/RenderTextControlSingleLine.cpp:
     18        (WebCore::RenderTextControlSingleLine::itemIcon):
     19        * rendering/RenderTextControlSingleLine.h:
     20
    1212010-07-27  Andreas Kling  <andreas.kling@nokia.com>
    222
  • trunk/WebCore/platform/PopupMenuClient.h

    r63179 r64173  
    4444    virtual String itemText(unsigned listIndex) const = 0;
    4545    virtual String itemLabel(unsigned listIndex) const = 0;
     46    virtual String itemIcon(unsigned listIndex) const = 0;
    4647    virtual String itemToolTip(unsigned listIndex) const = 0;
    4748    virtual String itemAccessibilityText(unsigned listIndex) const = 0;
  • trunk/WebCore/platform/chromium/PopupMenuChromium.cpp

    r63504 r64173  
    7272static const int kBorderSize = 1;
    7373static const int kTextToLabelPadding = 10;
     74static const int kLabelToIconPadding = 5;
    7475static const TimeStamp kTypeAheadTimeoutMs = 1000;
    7576
     
    960961    gc->drawBidiText(itemFont, textRun, IntPoint(textX, textY));
    961962
     963    // We are using the left padding as the right padding includes room for the scroll-bar which
     964    // does not show in this case.
     965    int rightPadding = max(0, m_popupClient->clientPaddingLeft() - m_popupClient->clientInsetLeft());
     966    int remainingWidth = rowRect.width() - rightPadding;
     967
     968    // Draw the icon if applicable.
     969    String itemIcon = m_popupClient->itemIcon(rowIndex);
     970    RefPtr<Image> image(Image::loadPlatformResource(itemIcon.utf8().data()));
     971    if (image && !image->isNull()) {
     972        IntRect imageRect = image->rect();
     973        remainingWidth -= (imageRect.width() + kLabelToIconPadding);
     974        imageRect.setX(rowRect.width() - rightPadding - imageRect.width());
     975        imageRect.setY(rowRect.y() + (rowRect.height() - imageRect.height()) / 2);
     976        gc->drawImage(image.get(), DeviceColorSpace, imageRect);
     977    }
     978
    962979    // Draw the the label if applicable.
    963980    if (itemLabel.isEmpty())
     
    966983    if (rightAligned)
    967984        textX = max(0, m_popupClient->clientPaddingLeft() - m_popupClient->clientInsetLeft());
    968     else {
    969         // We are using the left padding as the right padding includes room for the scroll-bar which
    970         // does not show in this case.
    971         int rightPadding = max(0, m_popupClient->clientPaddingLeft() - m_popupClient->clientInsetLeft());
    972         textX = rowRect.width() - rightPadding - itemFont.width(labelTextRun);
    973     }
     985    else
     986        textX = remainingWidth - itemFont.width(labelTextRun);
    974987
    975988    gc->setFillColor(labelColor, DeviceColorSpace);
  • trunk/WebCore/rendering/RenderMenuList.cpp

    r63358 r64173  
    355355}
    356356
     357String RenderMenuList::itemIcon(unsigned) const
     358{
     359    return String();
     360}
     361
    357362String RenderMenuList::itemAccessibilityText(unsigned listIndex) const
    358363{
  • trunk/WebCore/rendering/RenderMenuList.h

    r63179 r64173  
    8484    virtual String itemText(unsigned listIndex) const;
    8585    virtual String itemLabel(unsigned listIndex) const;
     86    virtual String itemIcon(unsigned listIndex) const;
    8687    virtual String itemToolTip(unsigned listIndex) const;
    8788    virtual String itemAccessibilityText(unsigned listIndex) const;
  • trunk/WebCore/rendering/RenderTextControlSingleLine.cpp

    r63288 r64173  
    917917}
    918918
     919String RenderTextControlSingleLine::itemIcon(unsigned) const
     920{
     921    return String();
     922}
     923
    919924bool RenderTextControlSingleLine::itemIsEnabled(unsigned listIndex) const
    920925{
  • trunk/WebCore/rendering/RenderTextControlSingleLine.h

    r63288 r64173  
    118118    virtual String itemText(unsigned listIndex) const;
    119119    virtual String itemLabel(unsigned listIndex) const;
     120    virtual String itemIcon(unsigned listIndex) const;
    120121    virtual String itemToolTip(unsigned) const { return String(); }
    121122    virtual String itemAccessibilityText(unsigned) const { return String(); }
  • trunk/WebKit/chromium/ChangeLog

    r64160 r64173  
     12010-07-27  James Hawkins  <jhawkins@chromium.org>
     2
     3        Reviewed by Darin Fisher.
     4
     5        [Chromium] Add the ability to show right-aligned icons in the AutoFill popup.
     6        https://bugs.webkit.org/show_bug.cgi?id=43076
     7
     8        * public/WebView.h:
     9        * src/AutoFillPopupMenuClient.cpp:
     10        (WebKit::AutoFillPopupMenuClient::getIcon):
     11        (WebKit::AutoFillPopupMenuClient::removeSuggestionAtIndex):
     12        (WebKit::AutoFillPopupMenuClient::itemIcon):
     13        (WebKit::AutoFillPopupMenuClient::initialize):
     14        (WebKit::AutoFillPopupMenuClient::setSuggestions):
     15        * src/AutoFillPopupMenuClient.h:
     16        * src/WebViewImpl.cpp:
     17        (WebKit::WebViewImpl::applyAutoFillSuggestions):
     18        (WebKit::WebViewImpl::applyAutocompleteSuggestions):
     19        * src/WebViewImpl.h:
     20
    1212010-07-27  Brett Wilson  <brettw@chromium.org>
    222
  • trunk/WebKit/chromium/public/WebView.h

    r63379 r64173  
    254254        const WebVector<WebString>& names,
    255255        const WebVector<WebString>& labels,
     256        const WebVector<int>& uniqueIDs,
    256257        int separatorIndex) = 0;
    257258
     
    263264        const WebVector<WebString>& names,
    264265        const WebVector<WebString>& labels,
     266        const WebVector<WebString>& icons,
    265267        const WebVector<int>& uniqueIDs,
    266268        int separatorIndex) = 0;
  • trunk/WebKit/chromium/src/AutoFillPopupMenuClient.cpp

    r63418 r64173  
    8585}
    8686
     87WebString AutoFillPopupMenuClient::getIcon(unsigned listIndex) const
     88{
     89    int index = convertListIndexToInternalIndex(listIndex);
     90    if (index == -1)
     91        return WebString();
     92
     93    ASSERT(index >= 0 && static_cast<size_t>(index) < m_icons.size());
     94    return m_icons[index];
     95}
     96
    8797void AutoFillPopupMenuClient::removeSuggestionAtIndex(unsigned listIndex)
    8898{
     
    96106    m_names.remove(index);
    97107    m_labels.remove(index);
     108    m_icons.remove(index);
     109    m_uniqueIDs.remove(index);
    98110
    99111    // Shift the separator index if necessary.
     
    178190}
    179191
     192String AutoFillPopupMenuClient::itemIcon(unsigned listIndex) const
     193{
     194    return getIcon(listIndex);
     195}
     196
    180197PopupMenuStyle AutoFillPopupMenuClient::itemStyle(unsigned listIndex) const
    181198{
     
    250267    const WebVector<WebString>& names,
    251268    const WebVector<WebString>& labels,
     269    const WebVector<WebString>& icons,
    252270    const WebVector<int>& uniqueIDs,
    253271    int separatorIndex)
    254272{
    255273    ASSERT(names.size() == labels.size());
     274    ASSERT(names.size() == icons.size());
    256275    ASSERT(names.size() == uniqueIDs.size());
    257276    ASSERT(separatorIndex < static_cast<int>(names.size()));
     
    262281    // The suggestions must be set before initializing the
    263282    // AutoFillPopupMenuClient.
    264     setSuggestions(names, labels, uniqueIDs, separatorIndex);
     283    setSuggestions(names, labels, icons, uniqueIDs, separatorIndex);
    265284
    266285    FontDescription fontDescription;
     
    281300void AutoFillPopupMenuClient::setSuggestions(const WebVector<WebString>& names,
    282301                                             const WebVector<WebString>& labels,
     302                                             const WebVector<WebString>& icons,
    283303                                             const WebVector<int>& uniqueIDs,
    284304                                             int separatorIndex)
    285305{
    286306    ASSERT(names.size() == labels.size());
     307    ASSERT(names.size() == icons.size());
    287308    ASSERT(names.size() == uniqueIDs.size());
    288309    ASSERT(separatorIndex < static_cast<int>(names.size()));
     
    290311    m_names.clear();
    291312    m_labels.clear();
     313    m_icons.clear();
    292314    m_uniqueIDs.clear();
    293315    for (size_t i = 0; i < names.size(); ++i) {
    294316        m_names.append(names[i]);
    295317        m_labels.append(labels[i]);
     318        m_icons.append(icons[i]);
    296319        m_uniqueIDs.append(uniqueIDs[i]);
    297320    }
  • trunk/WebKit/chromium/src/AutoFillPopupMenuClient.h

    r63395 r64173  
    6161    virtual WebString getLabel(unsigned listIndex) const;
    6262
     63    // Returns the icon at |listIndex|.
     64    virtual WebString getIcon(unsigned listIndex) const;
     65
    6366    // Removes the suggestion at |listIndex| from the list of suggestions.
    6467    virtual void removeSuggestionAtIndex(unsigned listIndex);
     
    7376    virtual WebCore::String itemText(unsigned listIndex) const;
    7477    virtual WebCore::String itemLabel(unsigned listIndex) const;
     78    virtual WebCore::String itemIcon(unsigned listIndex) const;
    7579    virtual WebCore::String itemToolTip(unsigned lastIndex) const { return WebCore::String(); }
    7680    virtual WebCore::String itemAccessibilityText(unsigned lastIndex) const { return WebCore::String(); }
     
    101105                    const WebVector<WebString>& names,
    102106                    const WebVector<WebString>& labels,
     107                    const WebVector<WebString>& icons,
    103108                    const WebVector<int>& uniqueIDs,
    104109                    int separatorIndex);
     
    106111    void setSuggestions(const WebVector<WebString>& names,
    107112                        const WebVector<WebString>& labels,
     113                        const WebVector<WebString>& icons,
    108114                        const WebVector<int>& uniqueIDs,
    109115                        int separatorIndex);
     
    125131    void setSelectedIndex(int index) { m_selectedIndex = index; }
    126132
    127     // The names and labels that make up the text of the menu items.
     133    // The names, labels and icons that make up the contents of the menu items.
    128134    Vector<WebCore::String> m_names;
    129135    Vector<WebCore::String> m_labels;
     136    Vector<WebCore::String> m_icons;
    130137    Vector<int> m_uniqueIDs;
    131138
  • trunk/WebKit/chromium/src/WebViewImpl.cpp

    r64042 r64173  
    17381738    const WebVector<WebString>& names,
    17391739    const WebVector<WebString>& labels,
     1740    const WebVector<int>& uniqueIDs,
    17401741    int separatorIndex)
    17411742{
    1742     WebVector<int> uniqueIDs(names.size());
    1743     applyAutoFillSuggestions(node, names, labels, uniqueIDs, separatorIndex);
     1743    WebVector<WebString> icons(names.size());
     1744    applyAutoFillSuggestions(node, names, labels, icons, uniqueIDs, separatorIndex);
    17441745}
    17451746
     
    17481749    const WebVector<WebString>& names,
    17491750    const WebVector<WebString>& labels,
     1751    const WebVector<WebString>& icons,
    17501752    const WebVector<int>& uniqueIDs,
    17511753    int separatorIndex)
     
    17781780
    17791781    m_autoFillPopupClient->initialize(
    1780         inputElem, names, labels, uniqueIDs, separatorIndex);
     1782        inputElem, names, labels, icons, uniqueIDs, separatorIndex);
    17811783
    17821784    if (!m_autoFillPopup.get()) {
     
    17881790    if (m_autoFillPopupShowing) {
    17891791        m_autoFillPopupClient->setSuggestions(
    1790             names, labels, uniqueIDs, separatorIndex);
     1792            names, labels, icons, uniqueIDs, separatorIndex);
    17911793        refreshAutoFillPopup();
    17921794    } else {
     
    18101812    WebVector<WebString> names(suggestions.size());
    18111813    WebVector<WebString> labels(suggestions.size());
     1814    WebVector<WebString> icons(suggestions.size());
    18121815    WebVector<int> uniqueIDs(suggestions.size());
    18131816
     
    18151818        names[i] = suggestions[i];
    18161819
    1817     applyAutoFillSuggestions(node, names, labels, uniqueIDs, -1);
     1820    applyAutoFillSuggestions(node, names, labels, icons, uniqueIDs, -1);
    18181821    if (m_autoFillPopupClient)
    18191822        m_autoFillPopupClient->setAutocompleteMode(true);
  • trunk/WebKit/chromium/src/WebViewImpl.h

    r64042 r64173  
    172172        const WebVector<WebString>& names,
    173173        const WebVector<WebString>& labels,
     174        const WebVector<int>& uniqueIDs,
    174175        int separatorIndex);
    175176    virtual void applyAutoFillSuggestions(
     
    177178        const WebVector<WebString>& names,
    178179        const WebVector<WebString>& labels,
     180        const WebVector<WebString>& icons,
    179181        const WebVector<int>& uniqueIDs,
    180182        int separatorIndex);
Note: See TracChangeset for help on using the changeset viewer.