diff options
author | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-27 00:09:42 +0000 |
---|---|---|
committer | initial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-07-27 00:09:42 +0000 |
commit | ae2c20f398933a9e86c387dcc465ec0f71065ffc (patch) | |
tree | de668b1411e2ee0b4e49b6d8f8b68183134ac990 /skia/animator/SkDisplayEvents.cpp | |
parent | 09911bf300f1a419907a9412154760efd0b7abc3 (diff) | |
download | chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.zip chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.tar.gz chromium_src-ae2c20f398933a9e86c387dcc465ec0f71065ffc.tar.bz2 |
Add skia to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@16 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'skia/animator/SkDisplayEvents.cpp')
-rw-r--r-- | skia/animator/SkDisplayEvents.cpp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/skia/animator/SkDisplayEvents.cpp b/skia/animator/SkDisplayEvents.cpp new file mode 100644 index 0000000..0f13b70 --- /dev/null +++ b/skia/animator/SkDisplayEvents.cpp @@ -0,0 +1,121 @@ +/* libs/graphics/animator/SkDisplayEvents.cpp +** +** Copyright 2006, Google Inc. +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +#include "SkDisplayEvents.h" +#include "SkAnimateMaker.h" +#include "SkAnimator.h" +#include "SkDisplayEvent.h" +#include "SkDisplayMovie.h" +#include "SkDrawable.h" +#ifdef SK_DEBUG +#include "SkDump.h" +#endif + +SkEventState::SkEventState() : fCode(0), fDisable(false), fDisplayable(0), fX(0), fY(0) { +} + +SkEvents::SkEvents() { +} + +SkEvents::~SkEvents() { +} + +bool SkEvents::doEvent(SkAnimateMaker& maker, SkDisplayEvent::Kind kind, SkEventState* state) { +/*#ifdef SK_DUMP_ENABLED + if (maker.fDumpEvents) { + SkDebugf("doEvent: "); + SkString str; + SkDump::GetEnumString(SkType_EventKind, kind, &str); + SkDebugf("kind=%s ", str.c_str()); + if (state && state->fDisplayable) + state->fDisplayable->SkDisplayable::dump(&maker); + else + SkDebugf("\n"); + } +#endif*/ + bool handled = false; + SkDisplayable** firstMovie = maker.fMovies.begin(); + SkDisplayable** endMovie = maker.fMovies.end(); + for (SkDisplayable** ptr = firstMovie; ptr < endMovie; ptr++) { + SkDisplayMovie* movie = (SkDisplayMovie*) *ptr; + if (kind != SkDisplayEvent::kOnload) + movie->doEvent(kind, state); + } + SkDisplayable* displayable = state ? state->fDisplayable : NULL; + int keyCode = state ? state->fCode : 0; + int count = fEvents.count(); + for (int index = 0; index < count; index++) { + SkDisplayEvent* evt = fEvents[index]; + if (evt->disable) + continue; + if (evt->kind != kind) + continue; + if (evt->code != (SkKey) -1) { + if ((int) evt->code > keyCode || (int) (evt->fMax != (SkKey) -1 ? evt->fMax : evt->code) < keyCode) + continue; + evt->fLastCode = (SkKey) keyCode; + } + if (evt->fTarget != NULL && evt->fTarget != displayable) + continue; + if (state == NULL || state->fDisable == 0) { + if (kind >= SkDisplayEvent::kMouseDown && kind <= SkDisplayEvent::kMouseUp) { + evt->x = state->fX; + evt->y = state->fY; + } + if (evt->enableEvent(maker)) + fError = true; + } + handled = true; + } + return handled; +} + +#ifdef SK_DUMP_ENABLED +void SkEvents::dump(SkAnimateMaker& maker) { + int index; + SkTDDrawableArray& drawArray = maker.fDisplayList.fDrawList; + int count = drawArray.count(); + for (index = 0; index < count; index++) { + SkDrawable* drawable = drawArray[index]; + drawable->dumpEvents(); + } + count = fEvents.count(); + for (index = 0; index < count; index++) { + SkDisplayEvent* evt = fEvents[index]; + evt->dumpEvent(&maker); + } +} +#endif + +// currently this only removes onLoad events +void SkEvents::removeEvent(SkDisplayEvent::Kind kind, SkEventState* state) { + int keyCode = state ? state->fCode : 0; + SkDisplayable* displayable = state ? state->fDisplayable : NULL; + for (SkDisplayEvent** evtPtr = fEvents.begin(); evtPtr < fEvents.end(); evtPtr++) { + SkDisplayEvent* evt = *evtPtr; + if (evt->kind != kind) + continue; + if (evt->code != (SkKey) -1) { + if ((int) evt->code > keyCode || (int) (evt->fMax != (SkKey) -1 ? evt->fMax : evt->code) < keyCode) + continue; + } + if (evt->fTarget != NULL && evt->fTarget != displayable) + continue; + int index = fEvents.find(evt); + fEvents.remove(index); + } +} |