OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2011, Google Inc. All rights reserved. | 2 * Copyright (c) 2011, Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 , m_lastCharTime(0) | 80 , m_lastCharTime(0) |
81 , m_maxWindowWidth(std::numeric_limits<int>::max()) | 81 , m_maxWindowWidth(std::numeric_limits<int>::max()) |
82 , m_container(container) | 82 , m_container(container) |
83 { | 83 { |
84 } | 84 } |
85 | 85 |
86 PopupListBox::~PopupListBox() | 86 PopupListBox::~PopupListBox() |
87 { | 87 { |
88 clear(); | 88 clear(); |
89 | 89 |
| 90 // Oilpan: the scrollbars of the ScrollView are self-sufficient, |
| 91 // capable of detaching themselves from their animator on |
| 92 // finalization. |
| 93 #if !ENABLE(OILPAN) |
90 setHasVerticalScrollbar(false); | 94 setHasVerticalScrollbar(false); |
| 95 #endif |
| 96 } |
| 97 |
| 98 void PopupListBox::trace(Visitor* visitor) |
| 99 { |
| 100 visitor->trace(m_capturingScrollbar); |
| 101 visitor->trace(m_lastScrollbarUnderMouse); |
| 102 visitor->trace(m_focusedElement); |
| 103 visitor->trace(m_container); |
| 104 visitor->trace(m_verticalScrollbar); |
| 105 Widget::trace(visitor); |
91 } | 106 } |
92 | 107 |
93 bool PopupListBox::handleMouseDownEvent(const PlatformMouseEvent& event) | 108 bool PopupListBox::handleMouseDownEvent(const PlatformMouseEvent& event) |
94 { | 109 { |
95 Scrollbar* scrollbar = scrollbarAtWindowPoint(event.position()); | 110 Scrollbar* scrollbar = scrollbarAtWindowPoint(event.position()); |
96 if (scrollbar) { | 111 if (scrollbar) { |
97 m_capturingScrollbar = scrollbar; | 112 m_capturingScrollbar = scrollbar; |
98 m_capturingScrollbar->mouseDown(event); | 113 m_capturingScrollbar->mouseDown(event); |
99 return true; | 114 return true; |
100 } | 115 } |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 Font font(d); | 510 Font font(d); |
496 font.update(nullptr); | 511 font.update(nullptr); |
497 return font; | 512 return font; |
498 } | 513 } |
499 | 514 |
500 return itemFont; | 515 return itemFont; |
501 } | 516 } |
502 | 517 |
503 void PopupListBox::abandon() | 518 void PopupListBox::abandon() |
504 { | 519 { |
505 RefPtr<PopupListBox> keepAlive(this); | 520 RefPtrWillBeRawPtr<PopupListBox> protect(this); |
506 | 521 |
507 m_selectedIndex = m_originalIndex; | 522 m_selectedIndex = m_originalIndex; |
508 | 523 |
509 hidePopup(); | 524 hidePopup(); |
510 | 525 |
511 if (m_acceptedIndexOnAbandon >= 0) { | 526 if (m_acceptedIndexOnAbandon >= 0) { |
512 if (m_popupClient) | 527 if (m_popupClient) |
513 m_popupClient->valueChanged(m_acceptedIndexOnAbandon); | 528 m_popupClient->valueChanged(m_acceptedIndexOnAbandon); |
514 m_acceptedIndexOnAbandon = -1; | 529 m_acceptedIndexOnAbandon = -1; |
515 } | 530 } |
(...skipping 27 matching lines...) Expand all Loading... |
543 | 558 |
544 if (index < 0) { | 559 if (index < 0) { |
545 if (m_popupClient) { | 560 if (m_popupClient) { |
546 // Enter pressed with no selection, just close the popup. | 561 // Enter pressed with no selection, just close the popup. |
547 hidePopup(); | 562 hidePopup(); |
548 } | 563 } |
549 return false; | 564 return false; |
550 } | 565 } |
551 | 566 |
552 if (isSelectableItem(index)) { | 567 if (isSelectableItem(index)) { |
553 RefPtr<PopupListBox> keepAlive(this); | 568 RefPtrWillBeRawPtr<PopupListBox> protect(this); |
554 | 569 |
555 // Hide ourselves first since valueChanged may have numerous side-effect
s. | 570 // Hide ourselves first since valueChanged may have numerous side-effect
s. |
556 hidePopup(); | 571 hidePopup(); |
557 | 572 |
558 // Tell the <select> PopupMenuClient what index was selected. | 573 // Tell the <select> PopupMenuClient what index was selected. |
559 m_popupClient->valueChanged(index); | 574 m_popupClient->valueChanged(index); |
560 | 575 |
561 return true; | 576 return true; |
562 } | 577 } |
563 | 578 |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 setContentsSize(IntSize(contentWidth, getRowBounds(numItems() - 1).maxY())); | 843 setContentsSize(IntSize(contentWidth, getRowBounds(numItems() - 1).maxY())); |
829 | 844 |
830 if (hostWindow()) | 845 if (hostWindow()) |
831 scrollToRevealSelection(); | 846 scrollToRevealSelection(); |
832 | 847 |
833 invalidate(); | 848 invalidate(); |
834 } | 849 } |
835 | 850 |
836 void PopupListBox::clear() | 851 void PopupListBox::clear() |
837 { | 852 { |
838 for (Vector<PopupItem*>::iterator it = m_items.begin(); it != m_items.end();
++it) | 853 deleteAllValues(m_items); |
839 delete *it; | |
840 m_items.clear(); | 854 m_items.clear(); |
841 } | 855 } |
842 | 856 |
843 bool PopupListBox::isPointInBounds(const IntPoint& point) | 857 bool PopupListBox::isPointInBounds(const IntPoint& point) |
844 { | 858 { |
845 return numItems() && IntRect(0, 0, width(), height()).contains(point); | 859 return numItems() && IntRect(0, 0, width(), height()).contains(point); |
846 } | 860 } |
847 | 861 |
848 int PopupListBox::popupContentHeight() const | 862 int PopupListBox::popupContentHeight() const |
849 { | 863 { |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1041 maximumOffset.clampNegativeToZero(); | 1055 maximumOffset.clampNegativeToZero(); |
1042 return maximumOffset; | 1056 return maximumOffset; |
1043 } | 1057 } |
1044 | 1058 |
1045 IntPoint PopupListBox::minimumScrollPosition() const | 1059 IntPoint PopupListBox::minimumScrollPosition() const |
1046 { | 1060 { |
1047 return IntPoint(-scrollOrigin().x(), -scrollOrigin().y()); | 1061 return IntPoint(-scrollOrigin().x(), -scrollOrigin().y()); |
1048 } | 1062 } |
1049 | 1063 |
1050 } // namespace blink | 1064 } // namespace blink |
OLD | NEW |