Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: third_party/WebKit/Source/core/html/track/vtt/VTTRegion.cpp

Issue 2682333002: Implement VTTCue.region and sync the VTTRegion interface (Closed)
Patch Set: Add DCHECK Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 "value", value, 0.0, ExceptionMessages::InclusiveBound, 100.0, 79 "value", value, 0.0, ExceptionMessages::InclusiveBound, 100.0,
80 ExceptionMessages::InclusiveBound)); 80 ExceptionMessages::InclusiveBound));
81 return true; 81 return true;
82 } 82 }
83 return false; 83 return false;
84 } 84 }
85 85
86 VTTRegion::VTTRegion() 86 VTTRegion::VTTRegion()
87 : m_id(emptyString), 87 : m_id(emptyString),
88 m_width(defaultWidth), 88 m_width(defaultWidth),
89 m_heightInLines(defaultHeightInLines), 89 m_lines(defaultHeightInLines),
90 m_regionAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)), 90 m_regionAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)),
91 m_viewportAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)), 91 m_viewportAnchor(FloatPoint(defaultAnchorPointX, defaultAnchorPointY)),
92 m_scroll(defaultScroll), 92 m_scroll(defaultScroll),
93 m_track(nullptr),
94 m_currentTop(0), 93 m_currentTop(0),
95 m_scrollTimer(this, &VTTRegion::scrollTimerFired) {} 94 m_scrollTimer(this, &VTTRegion::scrollTimerFired) {}
96 95
97 VTTRegion::~VTTRegion() {} 96 VTTRegion::~VTTRegion() {}
98 97
99 void VTTRegion::setTrack(TextTrack* track) {
100 m_track = track;
101 }
102
103 void VTTRegion::setId(const String& id) { 98 void VTTRegion::setId(const String& id) {
104 m_id = id; 99 m_id = id;
105 } 100 }
106 101
107 void VTTRegion::setWidth(double value, ExceptionState& exceptionState) { 102 void VTTRegion::setWidth(double value, ExceptionState& exceptionState) {
108 if (isNonPercentage(value, "width", exceptionState)) 103 if (isNonPercentage(value, "width", exceptionState))
109 return; 104 return;
110 105
111 m_width = value; 106 m_width = value;
112 } 107 }
113 108
114 void VTTRegion::setHeight(long value, ExceptionState& exceptionState) { 109 void VTTRegion::setLines(long value, ExceptionState& exceptionState) {
115 if (value < 0) { 110 if (value < 0) {
116 exceptionState.throwDOMException( 111 exceptionState.throwDOMException(
117 IndexSizeError, 112 IndexSizeError,
118 "The height provided (" + String::number(value) + ") is negative."); 113 "The height provided (" + String::number(value) + ") is negative.");
119 return; 114 return;
120 } 115 }
121 116 m_lines = value;
122 m_heightInLines = value;
123 } 117 }
124 118
125 void VTTRegion::setRegionAnchorX(double value, ExceptionState& exceptionState) { 119 void VTTRegion::setRegionAnchorX(double value, ExceptionState& exceptionState) {
126 if (isNonPercentage(value, "regionAnchorX", exceptionState)) 120 if (isNonPercentage(value, "regionAnchorX", exceptionState))
127 return; 121 return;
128 122
129 m_regionAnchor.setX(value); 123 m_regionAnchor.setX(value);
130 } 124 }
131 125
132 void VTTRegion::setRegionAnchorY(double value, ExceptionState& exceptionState) { 126 void VTTRegion::setRegionAnchorY(double value, ExceptionState& exceptionState) {
(...skipping 14 matching lines...) Expand all
147 void VTTRegion::setViewportAnchorY(double value, 141 void VTTRegion::setViewportAnchorY(double value,
148 ExceptionState& exceptionState) { 142 ExceptionState& exceptionState) {
149 if (isNonPercentage(value, "viewportAnchorY", exceptionState)) 143 if (isNonPercentage(value, "viewportAnchorY", exceptionState))
150 return; 144 return;
151 145
152 m_viewportAnchor.setY(value); 146 m_viewportAnchor.setY(value);
153 } 147 }
154 148
155 const AtomicString VTTRegion::scroll() const { 149 const AtomicString VTTRegion::scroll() const {
156 DEFINE_STATIC_LOCAL(const AtomicString, upScrollValueKeyword, ("up")); 150 DEFINE_STATIC_LOCAL(const AtomicString, upScrollValueKeyword, ("up"));
157 151 return m_scroll ? upScrollValueKeyword : emptyAtom;
158 if (m_scroll)
159 return upScrollValueKeyword;
160
161 return "";
162 } 152 }
163 153
164 void VTTRegion::setScroll(const AtomicString& value, 154 void VTTRegion::setScroll(const AtomicString& value) {
165 ExceptionState& exceptionState) { 155 DCHECK(value == "up" || value == emptyAtom);
166 DEFINE_STATIC_LOCAL(const AtomicString, upScrollValueKeyword, ("up")); 156 m_scroll = value != emptyAtom;
167
168 if (value != emptyString && value != upScrollValueKeyword) {
169 exceptionState.throwDOMException(
170 SyntaxError, "The value provided ('" + value +
171 "') is invalid. The 'scroll' property must be either "
172 "the empty string, or 'up'.");
173 return;
174 }
175
176 m_scroll = value == upScrollValueKeyword;
177 } 157 }
178 158
179 void VTTRegion::updateParametersFromRegion(VTTRegion* region) { 159 void VTTRegion::updateParametersFromRegion(VTTRegion* region) {
180 m_heightInLines = region->height(); 160 m_lines = region->lines();
181 m_width = region->width(); 161 m_width = region->width();
182 162
183 m_regionAnchor = FloatPoint(region->regionAnchorX(), region->regionAnchorY()); 163 m_regionAnchor = FloatPoint(region->regionAnchorX(), region->regionAnchorY());
184 m_viewportAnchor = 164 m_viewportAnchor =
185 FloatPoint(region->viewportAnchorX(), region->viewportAnchorY()); 165 FloatPoint(region->viewportAnchorX(), region->viewportAnchorY());
186 166
187 setScroll(region->scroll(), ASSERT_NO_EXCEPTION); 167 setScroll(region->scroll());
188 } 168 }
189 169
190 void VTTRegion::setRegionSettings(const String& inputString) { 170 void VTTRegion::setRegionSettings(const String& inputString) {
191 m_settings = inputString; 171 m_settings = inputString;
192 172
193 VTTScanner input(inputString); 173 VTTScanner input(inputString);
194 174
195 while (!input.isAtEnd()) { 175 while (!input.isAtEnd()) {
196 input.skipWhile<VTTParser::isValidSettingDelimiter>(); 176 input.skipWhile<VTTParser::isValidSettingDelimiter>();
197 177
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 if (VTTParser::parseFloatPercentageValue(input, floatWidth) && 231 if (VTTParser::parseFloatPercentageValue(input, floatWidth) &&
252 parsedEntireRun(input, valueRun)) 232 parsedEntireRun(input, valueRun))
253 m_width = floatWidth; 233 m_width = floatWidth;
254 else 234 else
255 DVLOG(VTT_LOG_LEVEL) << "parseSettingValue, invalid Width"; 235 DVLOG(VTT_LOG_LEVEL) << "parseSettingValue, invalid Width";
256 break; 236 break;
257 } 237 }
258 case Height: { 238 case Height: {
259 int number; 239 int number;
260 if (input.scanDigits(number) && parsedEntireRun(input, valueRun)) 240 if (input.scanDigits(number) && parsedEntireRun(input, valueRun))
261 m_heightInLines = number; 241 m_lines = number;
262 else 242 else
263 DVLOG(VTT_LOG_LEVEL) << "parseSettingValue, invalid Height"; 243 DVLOG(VTT_LOG_LEVEL) << "parseSettingValue, invalid Height";
264 break; 244 break;
265 } 245 }
266 case RegionAnchor: { 246 case RegionAnchor: {
267 FloatPoint anchor; 247 FloatPoint anchor;
268 if (VTTParser::parseFloatPercentageValuePair(input, ',', anchor) && 248 if (VTTParser::parseFloatPercentageValuePair(input, ',', anchor) &&
269 parsedEntireRun(input, valueRun)) 249 parsedEntireRun(input, valueRun))
270 m_regionAnchor = anchor; 250 m_regionAnchor = anchor;
271 else 251 else
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 // http://crbug/244618 is fixed. 377 // http://crbug/244618 is fixed.
398 378
399 // Let regionWidth be the text track region width. 379 // Let regionWidth be the text track region width.
400 // Let width be 'regionWidth vw' ('vw' is a CSS unit) 380 // Let width be 'regionWidth vw' ('vw' is a CSS unit)
401 m_regionDisplayTree->setInlineStyleProperty( 381 m_regionDisplayTree->setInlineStyleProperty(
402 CSSPropertyWidth, m_width, CSSPrimitiveValue::UnitType::Percentage); 382 CSSPropertyWidth, m_width, CSSPrimitiveValue::UnitType::Percentage);
403 383
404 // Let lineHeight be '0.0533vh' ('vh' is a CSS unit) and regionHeight be 384 // Let lineHeight be '0.0533vh' ('vh' is a CSS unit) and regionHeight be
405 // the text track region height. Let height be 'lineHeight' multiplied 385 // the text track region height. Let height be 'lineHeight' multiplied
406 // by regionHeight. 386 // by regionHeight.
407 double height = lineHeight * m_heightInLines; 387 double height = lineHeight * m_lines;
408 m_regionDisplayTree->setInlineStyleProperty( 388 m_regionDisplayTree->setInlineStyleProperty(
409 CSSPropertyHeight, height, CSSPrimitiveValue::UnitType::ViewportHeight); 389 CSSPropertyHeight, height, CSSPrimitiveValue::UnitType::ViewportHeight);
410 390
411 // Let viewportAnchorX be the x dimension of the text track region viewport 391 // Let viewportAnchorX be the x dimension of the text track region viewport
412 // anchor and regionAnchorX be the x dimension of the text track region 392 // anchor and regionAnchorX be the x dimension of the text track region
413 // anchor. Let leftOffset be regionAnchorX multiplied by width divided by 393 // anchor. Let leftOffset be regionAnchorX multiplied by width divided by
414 // 100.0. Let left be leftOffset subtracted from 'viewportAnchorX vw'. 394 // 100.0. Let left be leftOffset subtracted from 'viewportAnchorX vw'.
415 double leftOffset = m_regionAnchor.x() * m_width / 100; 395 double leftOffset = m_regionAnchor.x() * m_width / 100;
416 m_regionDisplayTree->setInlineStyleProperty( 396 m_regionDisplayTree->setInlineStyleProperty(
417 CSSPropertyLeft, m_viewportAnchor.x() - leftOffset, 397 CSSPropertyLeft, m_viewportAnchor.x() - leftOffset,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 void VTTRegion::scrollTimerFired(TimerBase*) { 437 void VTTRegion::scrollTimerFired(TimerBase*) {
458 DVLOG(VTT_LOG_LEVEL) << "scrollTimerFired"; 438 DVLOG(VTT_LOG_LEVEL) << "scrollTimerFired";
459 439
460 stopTimer(); 440 stopTimer();
461 displayLastVTTCueBox(); 441 displayLastVTTCueBox();
462 } 442 }
463 443
464 DEFINE_TRACE(VTTRegion) { 444 DEFINE_TRACE(VTTRegion) {
465 visitor->trace(m_cueContainer); 445 visitor->trace(m_cueContainer);
466 visitor->trace(m_regionDisplayTree); 446 visitor->trace(m_regionDisplayTree);
467 visitor->trace(m_track);
468 } 447 }
469 448
470 } // namespace blink 449 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/html/track/vtt/VTTRegion.h ('k') | third_party/WebKit/Source/core/html/track/vtt/VTTRegion.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698