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

Unified Diff: third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp

Issue 2554403002: HTMLMarquee cleanup (Closed)
Patch Set: Code review changes Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMarqueeElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp b/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp
index 394dc7651c3a63a38db1f2e89f7037e9a96900f2..6423c14eb29e627b0dba368792d7644215206fbe 100644
--- a/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp
+++ b/third_party/WebKit/Source/core/html/HTMLMarqueeElement.cpp
@@ -35,12 +35,14 @@
#include "core/css/CSSStyleDeclaration.h"
#include "core/css/StylePropertySet.h"
#include "core/dom/Document.h"
+#include "core/dom/FrameRequestCallback.h"
#include "core/dom/shadow/ShadowRoot.h"
#include "core/frame/LocalDOMWindow.h"
#include "core/frame/UseCounter.h"
#include "core/html/HTMLContentElement.h"
#include "core/html/HTMLDivElement.h"
#include "core/html/HTMLStyleElement.h"
+#include "wtf/Noncopyable.h"
#include <cstdlib>
namespace blink {
@@ -73,6 +75,53 @@ void HTMLMarqueeElement::didAddUserAgentShadowRoot(ShadowRoot& shadowRoot) {
m_mover = mover;
}
+class HTMLMarqueeElement::RequestAnimationFrameCallback final
+ : public FrameRequestCallback {
+ WTF_MAKE_NONCOPYABLE(RequestAnimationFrameCallback);
+
+ public:
+ explicit RequestAnimationFrameCallback(HTMLMarqueeElement* marquee)
+ : m_marquee(marquee) {}
+
+ void handleEvent(double) override {
+ m_marquee->m_continueCallbackRequestId = 0;
+ m_marquee->continueAnimation();
+ }
+
+ DEFINE_INLINE_VIRTUAL_TRACE() {
+ visitor->trace(m_marquee);
+ FrameRequestCallback::trace(visitor);
+ }
+
+ private:
+ Member<HTMLMarqueeElement> m_marquee;
+};
+
+class HTMLMarqueeElement::AnimationFinished final : public EventListener {
+ WTF_MAKE_NONCOPYABLE(AnimationFinished);
+
+ public:
+ explicit AnimationFinished(HTMLMarqueeElement* marquee)
+ : EventListener(CPPEventListenerType), m_marquee(marquee) {}
+
+ bool operator==(const EventListener& that) const override {
+ return this == &that;
+ }
+
+ void handleEvent(ExecutionContext*, Event*) override {
+ ++m_marquee->m_loopCount;
+ m_marquee->start();
+ }
+
+ DEFINE_INLINE_VIRTUAL_TRACE() {
+ visitor->trace(m_marquee);
+ EventListener::trace(visitor);
+ }
+
+ private:
+ Member<HTMLMarqueeElement> m_marquee;
+};
+
Node::InsertionNotificationRequest HTMLMarqueeElement::insertedInto(
ContainerNode* insertionPoint) {
HTMLElement::insertedInto(insertionPoint);
@@ -91,13 +140,13 @@ void HTMLMarqueeElement::removedFrom(ContainerNode* insertionPoint) {
}
bool HTMLMarqueeElement::isHorizontal() const {
- Direction direction = this->direction();
- return direction != Up && direction != Down;
+ Direction direction = getDirection();
+ return direction != kUp && direction != kDown;
}
int HTMLMarqueeElement::scrollAmount() const {
bool ok;
- int scrollAmount = getAttribute(HTMLNames::scrollamountAttr).toInt(&ok);
+ int scrollAmount = fastGetAttribute(HTMLNames::scrollamountAttr).toInt(&ok);
if (!ok || scrollAmount < 0)
return kDefaultScrollAmount;
return scrollAmount;
@@ -116,7 +165,7 @@ void HTMLMarqueeElement::setScrollAmount(int value,
int HTMLMarqueeElement::scrollDelay() const {
bool ok;
- int scrollDelay = getAttribute(HTMLNames::scrolldelayAttr).toInt(&ok);
+ int scrollDelay = fastGetAttribute(HTMLNames::scrolldelayAttr).toInt(&ok);
if (!ok || scrollDelay < 0)
return kDefaultScrollDelayMS;
return scrollDelay;
@@ -135,7 +184,7 @@ void HTMLMarqueeElement::setScrollDelay(int value,
int HTMLMarqueeElement::loop() const {
bool ok;
- int loop = getAttribute(HTMLNames::loopAttr).toInt(&ok);
+ int loop = fastGetAttribute(HTMLNames::loopAttr).toInt(&ok);
if (!ok || loop <= 0)
return kDefaultLoopLimit;
return loop;
@@ -202,20 +251,8 @@ void HTMLMarqueeElement::collectStyleForPresentationAttribute(
}
}
-void HTMLMarqueeElement::RequestAnimationFrameCallback::handleEvent(double) {
- m_marquee->m_continueCallbackRequestId = 0;
- m_marquee->continueAnimation();
-}
-
-void HTMLMarqueeElement::AnimationFinished::handleEvent(
- ExecutionContext* context,
- Event* event) {
- ++m_marquee->m_loopCount;
- m_marquee->start();
-}
-
StringKeyframeEffectModel* HTMLMarqueeElement::createEffectModel(
- AnimationParameters& parameters) {
+ const AnimationParameters& parameters) {
StyleSheetContents* styleSheetContents =
m_mover->document().elementSheet().contents();
MutableStylePropertySet::SetResult setResult;
@@ -248,7 +285,8 @@ void HTMLMarqueeElement::continueAnimation() {
int scrollDelay = this->scrollDelay();
int scrollAmount = this->scrollAmount();
- if (scrollDelay < kMinimumScrollDelayMS && !trueSpeed())
+ if (scrollDelay < kMinimumScrollDelayMS &&
+ !fastHasAttribute(HTMLNames::truespeedAttr))
scrollDelay = kDefaultScrollDelayMS;
double duration = 0;
if (scrollAmount)
@@ -276,7 +314,7 @@ bool HTMLMarqueeElement::shouldContinue() {
int loopCount = loop();
// By default, slide loops only once.
- if (loopCount <= 0 && behavior() == Slide)
+ if (loopCount <= 0 && getBehavior() == kSlide)
loopCount = 1;
if (loopCount <= 0)
@@ -284,28 +322,24 @@ bool HTMLMarqueeElement::shouldContinue() {
return m_loopCount < loopCount;
}
-HTMLMarqueeElement::Behavior HTMLMarqueeElement::behavior() const {
- const AtomicString& behavior = getAttribute(HTMLNames::behaviorAttr);
- if (behavior == "alternate")
- return Alternate;
- if (behavior == "slide")
- return Slide;
- return Scroll;
-}
-
-HTMLMarqueeElement::Direction HTMLMarqueeElement::direction() const {
- const AtomicString& direction = getAttribute(HTMLNames::directionAttr);
- if (direction == "down")
- return Down;
- if (direction == "up")
- return Up;
- if (direction == "right")
- return Right;
- return Left;
+HTMLMarqueeElement::Behavior HTMLMarqueeElement::getBehavior() const {
+ const AtomicString& behavior = fastGetAttribute(HTMLNames::behaviorAttr);
+ if (equalIgnoringASCIICase(behavior, "alternate"))
+ return kAlternate;
+ if (equalIgnoringASCIICase(behavior, "slide"))
+ return kSlide;
+ return kScroll;
}
-bool HTMLMarqueeElement::trueSpeed() const {
- return hasAttribute(HTMLNames::truespeedAttr);
+HTMLMarqueeElement::Direction HTMLMarqueeElement::getDirection() const {
+ const AtomicString& direction = fastGetAttribute(HTMLNames::directionAttr);
+ if (equalIgnoringASCIICase(direction, "down"))
+ return kDown;
+ if (equalIgnoringASCIICase(direction, "up"))
+ return kUp;
+ if (equalIgnoringASCIICase(direction, "right"))
+ return kRight;
+ return kLeft;
}
HTMLMarqueeElement::Metrics HTMLMarqueeElement::getMetrics() {
@@ -361,31 +395,31 @@ HTMLMarqueeElement::getAnimationParameters() {
double innerWidth = metrics.marqueeWidth - metrics.contentWidth;
double innerHeight = metrics.marqueeHeight - metrics.contentHeight;
- switch (behavior()) {
- case Alternate:
- switch (direction()) {
- case Right:
+ switch (getBehavior()) {
+ case kAlternate:
+ switch (getDirection()) {
+ case kRight:
parameters.transformBegin =
createTransform(innerWidth >= 0 ? 0 : innerWidth);
parameters.transformEnd =
createTransform(innerWidth >= 0 ? innerWidth : 0);
parameters.distance = std::abs(innerWidth);
break;
- case Up:
+ case kUp:
parameters.transformBegin =
createTransform(innerHeight >= 0 ? innerHeight : 0);
parameters.transformEnd =
createTransform(innerHeight >= 0 ? 0 : innerHeight);
parameters.distance = std::abs(innerHeight);
break;
- case Down:
+ case kDown:
parameters.transformBegin =
createTransform(innerHeight >= 0 ? 0 : innerHeight);
parameters.transformEnd =
createTransform(innerHeight >= 0 ? innerHeight : 0);
parameters.distance = std::abs(innerHeight);
break;
- case Left:
+ case kLeft:
default:
parameters.transformBegin =
createTransform(innerWidth >= 0 ? innerWidth : 0);
@@ -397,49 +431,49 @@ HTMLMarqueeElement::getAnimationParameters() {
if (m_loopCount % 2)
std::swap(parameters.transformBegin, parameters.transformEnd);
break;
- case Slide:
- switch (direction()) {
- case Right:
+ case kSlide:
+ switch (getDirection()) {
+ case kRight:
parameters.transformBegin = createTransform(-metrics.contentWidth);
parameters.transformEnd = createTransform(innerWidth);
parameters.distance = metrics.marqueeWidth;
break;
- case Up:
+ case kUp:
parameters.transformBegin = createTransform(metrics.marqueeHeight);
parameters.transformEnd = "translateY(0)";
parameters.distance = metrics.marqueeHeight;
break;
- case Down:
+ case kDown:
parameters.transformBegin = createTransform(-metrics.contentHeight);
parameters.transformEnd = createTransform(innerHeight);
parameters.distance = metrics.marqueeHeight;
break;
- case Left:
+ case kLeft:
default:
parameters.transformBegin = createTransform(metrics.marqueeWidth);
parameters.transformEnd = "translateX(0)";
parameters.distance = metrics.marqueeWidth;
}
break;
- case Scroll:
+ case kScroll:
default:
- switch (direction()) {
- case Right:
+ switch (getDirection()) {
+ case kRight:
parameters.transformBegin = createTransform(-metrics.contentWidth);
parameters.transformEnd = createTransform(metrics.marqueeWidth);
parameters.distance = totalWidth;
break;
- case Up:
+ case kUp:
parameters.transformBegin = createTransform(metrics.marqueeHeight);
parameters.transformEnd = createTransform(-metrics.contentHeight);
parameters.distance = totalHeight;
break;
- case Down:
+ case kDown:
parameters.transformBegin = createTransform(-metrics.contentHeight);
parameters.transformEnd = createTransform(metrics.marqueeHeight);
parameters.distance = totalHeight;
break;
- case Left:
+ case kLeft:
default:
parameters.transformBegin = createTransform(metrics.marqueeWidth);
parameters.transformEnd = createTransform(-metrics.contentWidth);
@@ -453,7 +487,8 @@ HTMLMarqueeElement::getAnimationParameters() {
AtomicString HTMLMarqueeElement::createTransform(double value) const {
char axis = isHorizontal() ? 'X' : 'Y';
- return AtomicString(String::format("translate%c(%fpx)", axis, value));
+ return String::format("translate%c(", axis) +
+ String::numberToStringECMAScript(value) + "px)";
}
DEFINE_TRACE(HTMLMarqueeElement) {
« no previous file with comments | « third_party/WebKit/Source/core/html/HTMLMarqueeElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698