Skip to content

Commit bd0f980

Browse files
committed
2011-04-07 MORITA Hajime <morrita@google.com>
Reviewed by Ryosuke Niwa. DocumentMaker::AllMarkers should not be a part of DocumentMarker::MarkerType https://bugs.webkit.org/show_bug.cgi?id=58112 - Converted DocumentMarker::MarkerTypes from unsigned int to a class. - Converted DocumentMarker::AllMarkers from an enum entry to a subclass of MarkerTypes. - Changed type of some MarkerType argument on DocumentMarkerController API to MarkerTypes which should allow a combination of MarkerType constansts. - Removed some MarkerType arguments on DocumentMarkerController API which only received AllMarkers. No new tests, no behavior change. * WebCore.exp.in: * dom/DocumentMarker.h: (WebCore::DocumentMarker::MarkerTypes::MarkerTypes): (WebCore::DocumentMarker::MarkerTypes::contains): (WebCore::DocumentMarker::MarkerTypes::intersects): (WebCore::DocumentMarker::MarkerTypes::operator==): (WebCore::DocumentMarker::MarkerTypes::add): (WebCore::DocumentMarker::MarkerTypes::remove): (WebCore::DocumentMarker::AllMarkers::AllMarkers): * dom/DocumentMarkerController.cpp: (WebCore::DocumentMarkerController::possiblyHasMarkers): (WebCore::DocumentMarkerController::addMarker): (WebCore::DocumentMarkerController::copyMarkers): (WebCore::DocumentMarkerController::removeMarkers): (WebCore::DocumentMarkerController::markerContainingPoint): (WebCore::DocumentMarkerController::markersInRange): (WebCore::DocumentMarkerController::renderedRectsForMarkers): (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair): (WebCore::DocumentMarkerController::repaintMarkers): (WebCore::DocumentMarkerController::shiftMarkers): (WebCore::DocumentMarkerController::setMarkersActive): (WebCore::DocumentMarkerController::hasMarkers): (WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange): * dom/DocumentMarkerController.h: Canonical link: https://commits.webkit.org/73745@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@83991 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 0c689bf commit bd0f980

5 files changed

Lines changed: 98 additions & 34 deletions

File tree

Source/WebCore/ChangeLog

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,44 @@
1+
2011-04-07 MORITA Hajime <morrita@google.com>
2+
3+
Reviewed by Ryosuke Niwa.
4+
5+
DocumentMaker::AllMarkers should not be a part of DocumentMarker::MarkerType
6+
https://bugs.webkit.org/show_bug.cgi?id=58112
7+
8+
- Converted DocumentMarker::MarkerTypes from unsigned int to a class.
9+
- Converted DocumentMarker::AllMarkers from an enum entry to a subclass of MarkerTypes.
10+
- Changed type of some MarkerType argument on DocumentMarkerController API to MarkerTypes
11+
which should allow a combination of MarkerType constansts.
12+
- Removed some MarkerType arguments on DocumentMarkerController API
13+
which only received AllMarkers.
14+
15+
No new tests, no behavior change.
16+
17+
* WebCore.exp.in:
18+
* dom/DocumentMarker.h:
19+
(WebCore::DocumentMarker::MarkerTypes::MarkerTypes):
20+
(WebCore::DocumentMarker::MarkerTypes::contains):
21+
(WebCore::DocumentMarker::MarkerTypes::intersects):
22+
(WebCore::DocumentMarker::MarkerTypes::operator==):
23+
(WebCore::DocumentMarker::MarkerTypes::add):
24+
(WebCore::DocumentMarker::MarkerTypes::remove):
25+
(WebCore::DocumentMarker::AllMarkers::AllMarkers):
26+
* dom/DocumentMarkerController.cpp:
27+
(WebCore::DocumentMarkerController::possiblyHasMarkers):
28+
(WebCore::DocumentMarkerController::addMarker):
29+
(WebCore::DocumentMarkerController::copyMarkers):
30+
(WebCore::DocumentMarkerController::removeMarkers):
31+
(WebCore::DocumentMarkerController::markerContainingPoint):
32+
(WebCore::DocumentMarkerController::markersInRange):
33+
(WebCore::DocumentMarkerController::renderedRectsForMarkers):
34+
(WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair):
35+
(WebCore::DocumentMarkerController::repaintMarkers):
36+
(WebCore::DocumentMarkerController::shiftMarkers):
37+
(WebCore::DocumentMarkerController::setMarkersActive):
38+
(WebCore::DocumentMarkerController::hasMarkers):
39+
(WebCore::DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange):
40+
* dom/DocumentMarkerController.h:
41+
142
2011-04-14 Geoffrey Garen <ggaren@apple.com>
243

344
Reviewed by Oliver Hunt.

Source/WebCore/WebCore.exp.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ __ZN7WebCore23getHostnamesWithCookiesERN3WTF7HashSetINS0_6StringENS0_10StringHas
573573
__ZN7WebCore23overrideDefaultLanguageERKN3WTF6StringE
574574
__ZN7WebCore24BinaryPropertyListWriter17writePropertyListEv
575575
__ZN7WebCore24CachedResourceHandleBase11setResourceEPNS_14CachedResourceE
576-
__ZN7WebCore24DocumentMarkerController13removeMarkersEj
576+
__ZN7WebCore24DocumentMarkerController13removeMarkersENS_14DocumentMarker11MarkerTypesE
577577
__ZN7WebCore24DocumentMarkerController14markersForNodeEPNS_4NodeE
578578
__ZN7WebCore24DocumentMarkerController14markersForNodeEPNS_4NodeE
579579
__ZN7WebCore24DocumentMarkerController23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE

Source/WebCore/dom/DocumentMarker.h

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,33 @@ struct DocumentMarker {
5353
Autocorrected = 1 << 6,
5454
// On some platforms, this prevents the text from being spellchecked again.
5555
SpellCheckingExemption = 1 << 7,
56-
AllMarkers = Spelling | Grammar | TextMatch | Replacement | CorrectionIndicator | RejectedCorrection | Autocorrected | SpellCheckingExemption
5756
};
57+
58+
class MarkerTypes {
59+
public:
60+
// The constructor is intentionally implicit to allow conversion from the bit-wise sum of above types
61+
MarkerTypes(unsigned mask) : m_mask(mask) { }
62+
63+
bool contains(MarkerType type) const { return m_mask & type; }
64+
bool intersects(const MarkerTypes& types) const { return (m_mask & types.m_mask); }
65+
bool operator==(const MarkerTypes& other) const { return m_mask == other.m_mask; }
66+
67+
void add(const MarkerTypes& types) { m_mask |= types.m_mask; }
68+
void remove(const MarkerTypes& types) { m_mask &= ~types.m_mask; }
69+
70+
private:
71+
unsigned m_mask;
72+
};
73+
74+
class AllMarkers : public MarkerTypes {
75+
public:
76+
AllMarkers()
77+
: MarkerTypes(Spelling | Grammar | TextMatch | Replacement | CorrectionIndicator | RejectedCorrection | Autocorrected | SpellCheckingExemption)
78+
{
79+
}
80+
};
81+
5882
MarkerType type;
59-
typedef unsigned MarkerTypes;
6083
unsigned startOffset;
6184
unsigned endOffset;
6285
String description;

Source/WebCore/dom/DocumentMarkerController.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ static IntRect placeholderRectForMarker()
4040

4141
inline bool DocumentMarkerController::possiblyHasMarkers(DocumentMarker::MarkerTypes types)
4242
{
43-
return m_possiblyExistingMarkerTypes & types;
43+
return m_possiblyExistingMarkerTypes.intersects(types);
4444
}
4545

4646
DocumentMarkerController::DocumentMarkerController()
@@ -91,7 +91,7 @@ void DocumentMarkerController::addMarker(Node* node, DocumentMarker newMarker)
9191
if (newMarker.endOffset == newMarker.startOffset)
9292
return;
9393

94-
m_possiblyExistingMarkerTypes |= newMarker.type;
94+
m_possiblyExistingMarkerTypes.add(newMarker.type);
9595

9696
MarkerMapVectorPair* vectorPair = m_markers.get(node);
9797

@@ -152,12 +152,12 @@ void DocumentMarkerController::addMarker(Node* node, DocumentMarker newMarker)
152152

153153
// copies markers from srcNode to dstNode, applying the specified shift delta to the copies. The shift is
154154
// useful if, e.g., the caller has created the dstNode from a non-prefix substring of the srcNode.
155-
void DocumentMarkerController::copyMarkers(Node* srcNode, unsigned startOffset, int length, Node* dstNode, int delta, DocumentMarker::MarkerType markerType)
155+
void DocumentMarkerController::copyMarkers(Node* srcNode, unsigned startOffset, int length, Node* dstNode, int delta)
156156
{
157157
if (length <= 0)
158158
return;
159159

160-
if (!possiblyHasMarkers(markerType))
160+
if (!possiblyHasMarkers(DocumentMarker::AllMarkers()))
161161
return;
162162
ASSERT(!m_markers.isEmpty());
163163

@@ -178,7 +178,7 @@ void DocumentMarkerController::copyMarkers(Node* srcNode, unsigned startOffset,
178178
break;
179179

180180
// skip marker that is before the specified range or is the wrong type
181-
if (marker.endOffset < startOffset || (marker.type != markerType && markerType != DocumentMarker::AllMarkers))
181+
if (marker.endOffset < startOffset)
182182
continue;
183183

184184
// pin the marker to the specified range and apply the shift delta
@@ -224,7 +224,7 @@ void DocumentMarkerController::removeMarkers(Node* node, unsigned startOffset, i
224224
break;
225225

226226
// skip marker that is wrong type or before target
227-
if (marker.endOffset <= startOffset || !(marker.type & markerTypes)) {
227+
if (marker.endOffset <= startOffset || !markerTypes.contains(marker.type)) {
228228
i++;
229229
continue;
230230
}
@@ -292,7 +292,7 @@ DocumentMarker* DocumentMarkerController::markerContainingPoint(const IntPoint&
292292
DocumentMarker& marker = markers[markerIndex];
293293

294294
// skip marker that is wrong type
295-
if (marker.type != markerType && markerType != DocumentMarker::AllMarkers)
295+
if (marker.type != markerType)
296296
continue;
297297

298298
IntRect& r = rects[markerIndex];
@@ -334,7 +334,7 @@ Vector<DocumentMarker> DocumentMarkerController::markersInRange(Range* range, Do
334334
Vector<DocumentMarker> markers = markersForNode(node);
335335
Vector<DocumentMarker>::const_iterator end = markers.end();
336336
for (Vector<DocumentMarker>::const_iterator it = markers.begin(); it != end; ++it) {
337-
if (!(markerType & it->type))
337+
if (markerType != it->type)
338338
continue;
339339
if (node == startContainer && it->endOffset <= static_cast<unsigned>(range->startOffset()))
340340
continue;
@@ -367,7 +367,7 @@ Vector<IntRect> DocumentMarkerController::renderedRectsForMarkers(DocumentMarker
367367
DocumentMarker marker = markers[markerIndex];
368368

369369
// skip marker that is wrong type
370-
if (marker.type != markerType && markerType != DocumentMarker::AllMarkers)
370+
if (marker.type != markerType)
371371
continue;
372372

373373
IntRect r = rects[markerIndex];
@@ -408,13 +408,13 @@ void DocumentMarkerController::removeMarkers(DocumentMarker::MarkerTypes markerT
408408
removeMarkersFromMarkerMapVectorPair(node, vectorPair, markerTypes);
409409
}
410410

411-
m_possiblyExistingMarkerTypes &= ~markerTypes;
411+
m_possiblyExistingMarkerTypes.remove(markerTypes);
412412
}
413413

414414
// This function may release node and vectorPair.
415415
void DocumentMarkerController::removeMarkersFromMarkerMapVectorPair(Node* node, MarkerMapVectorPair* vectorPair, DocumentMarker::MarkerTypes markerTypes)
416416
{
417-
if (!~(markerTypes & DocumentMarker::AllMarkers)) {
417+
if (markerTypes == DocumentMarker::AllMarkers()) {
418418
delete vectorPair;
419419
m_markers.remove(node);
420420
if (RenderObject* renderer = node->renderer())
@@ -428,7 +428,7 @@ void DocumentMarkerController::removeMarkersFromMarkerMapVectorPair(Node* node,
428428
DocumentMarker marker = markers[i];
429429

430430
// skip nodes that are not of the specified type
431-
if (!(marker.type & markerTypes)) {
431+
if (!markerTypes.contains(marker.type)) {
432432
++i;
433433
continue;
434434
}
@@ -459,9 +459,9 @@ void DocumentMarkerController::removeMarkersFromMarkerMapVectorPair(Node* node,
459459
m_possiblyExistingMarkerTypes = 0;
460460
}
461461

462-
void DocumentMarkerController::repaintMarkers(DocumentMarker::MarkerType markerType)
462+
void DocumentMarkerController::repaintMarkers(DocumentMarker::MarkerTypes markerTypes)
463463
{
464-
if (!possiblyHasMarkers(markerType))
464+
if (!possiblyHasMarkers(markerTypes))
465465
return;
466466
ASSERT(!m_markers.isEmpty());
467467

@@ -478,7 +478,7 @@ void DocumentMarkerController::repaintMarkers(DocumentMarker::MarkerType markerT
478478
DocumentMarker marker = markers[i];
479479

480480
// skip nodes that are not of the specified type
481-
if (marker.type == markerType || markerType == DocumentMarker::AllMarkers) {
481+
if (markerTypes.contains(marker.type)) {
482482
nodeNeedsRepaint = true;
483483
break;
484484
}
@@ -532,9 +532,9 @@ void DocumentMarkerController::invalidateRenderedRectsForMarkersInRect(const Int
532532
}
533533
}
534534

535-
void DocumentMarkerController::shiftMarkers(Node* node, unsigned startOffset, int delta, DocumentMarker::MarkerType markerType)
535+
void DocumentMarkerController::shiftMarkers(Node* node, unsigned startOffset, int delta)
536536
{
537-
if (!possiblyHasMarkers(markerType))
537+
if (!possiblyHasMarkers(DocumentMarker::AllMarkers()))
538538
return;
539539
ASSERT(!m_markers.isEmpty());
540540

@@ -549,7 +549,7 @@ void DocumentMarkerController::shiftMarkers(Node* node, unsigned startOffset, in
549549
bool docDirty = false;
550550
for (size_t i = 0; i != markers.size(); ++i) {
551551
DocumentMarker& marker = markers[i];
552-
if (marker.startOffset >= startOffset && (markerType == DocumentMarker::AllMarkers || marker.type == markerType)) {
552+
if (marker.startOffset >= startOffset) {
553553
ASSERT((int)marker.startOffset + delta >= 0);
554554
marker.startOffset += delta;
555555
marker.endOffset += delta;
@@ -567,7 +567,7 @@ void DocumentMarkerController::shiftMarkers(Node* node, unsigned startOffset, in
567567

568568
void DocumentMarkerController::setMarkersActive(Range* range, bool active)
569569
{
570-
if (!possiblyHasMarkers(DocumentMarker::AllMarkers))
570+
if (!possiblyHasMarkers(DocumentMarker::AllMarkers()))
571571
return;
572572
ASSERT(!m_markers.isEmpty());
573573

@@ -629,7 +629,7 @@ bool DocumentMarkerController::hasMarkers(Range* range, DocumentMarker::MarkerTy
629629
Vector<DocumentMarker> markers = markersForNode(node);
630630
Vector<DocumentMarker>::const_iterator end = markers.end();
631631
for (Vector<DocumentMarker>::const_iterator it = markers.begin(); it != end; ++it) {
632-
if (!(markerTypes & it->type))
632+
if (!markerTypes.contains(it->type))
633633
continue;
634634
if (node == startContainer && it->endOffset <= static_cast<unsigned>(range->startOffset()))
635635
continue;
@@ -667,7 +667,7 @@ void DocumentMarkerController::clearDescriptionOnMarkersIntersectingRange(Range*
667667
break;
668668

669669
// skip marker that is wrong type or before target
670-
if (marker.endOffset <= startOffset || !(marker.type & markerTypes)) {
670+
if (marker.endOffset <= startOffset || !markerTypes.contains(marker.type)) {
671671
i++;
672672
continue;
673673
}

Source/WebCore/dom/DocumentMarkerController.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,29 +47,29 @@ class DocumentMarkerController {
4747
void detach();
4848
void addMarker(Range*, DocumentMarker::MarkerType, String description = String());
4949
void addMarker(Node*, DocumentMarker);
50-
void copyMarkers(Node* srcNode, unsigned startOffset, int length, Node* dstNode, int delta, DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
51-
bool hasMarkers(Range*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers);
50+
void copyMarkers(Node* srcNode, unsigned startOffset, int length, Node* dstNode, int delta);
51+
bool hasMarkers(Range*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers());
5252

5353
// When a marker partially overlaps with range, if removePartiallyOverlappingMarkers is true, we completely
5454
// remove the marker. If the argument is false, we will adjust the span of the marker so that it retains
5555
// the portion that is outside of the range.
5656
enum RemovePartiallyOverlappingMarkerOrNot { DoNotRemovePartiallyOverlappingMarker, RemovePartiallyOverlappingMarker };
57-
void removeMarkers(Range*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers, RemovePartiallyOverlappingMarkerOrNot = DoNotRemovePartiallyOverlappingMarker);
58-
void removeMarkers(Node*, unsigned startOffset, int length, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers, RemovePartiallyOverlappingMarkerOrNot = DoNotRemovePartiallyOverlappingMarker);
57+
void removeMarkers(Range*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers(), RemovePartiallyOverlappingMarkerOrNot = DoNotRemovePartiallyOverlappingMarker);
58+
void removeMarkers(Node*, unsigned startOffset, int length, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers(), RemovePartiallyOverlappingMarkerOrNot = DoNotRemovePartiallyOverlappingMarker);
5959

60-
void removeMarkers(DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers);
61-
void removeMarkers(Node*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers);
62-
void repaintMarkers(DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
60+
void removeMarkers(DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers());
61+
void removeMarkers(Node*, DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers());
62+
void repaintMarkers(DocumentMarker::MarkerTypes = DocumentMarker::AllMarkers());
6363
void setRenderedRectForMarker(Node*, const DocumentMarker&, const IntRect&);
6464
void invalidateRenderedRectsForMarkersInRect(const IntRect&);
65-
void shiftMarkers(Node*, unsigned startOffset, int delta, DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
65+
void shiftMarkers(Node*, unsigned startOffset, int delta);
6666
void setMarkersActive(Range*, bool);
6767
void setMarkersActive(Node*, unsigned startOffset, unsigned endOffset, bool);
6868

69-
DocumentMarker* markerContainingPoint(const IntPoint&, DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
69+
DocumentMarker* markerContainingPoint(const IntPoint&, DocumentMarker::MarkerType);
7070
Vector<DocumentMarker> markersForNode(Node*);
7171
Vector<DocumentMarker> markersInRange(Range*, DocumentMarker::MarkerType);
72-
Vector<IntRect> renderedRectsForMarkers(DocumentMarker::MarkerType = DocumentMarker::AllMarkers);
72+
Vector<IntRect> renderedRectsForMarkers(DocumentMarker::MarkerType);
7373
void clearDescriptionOnMarkersIntersectingRange(Range*, DocumentMarker::MarkerTypes);
7474

7575
#ifndef NDEBUG

0 commit comments

Comments
 (0)