void TransformGizmo::transformSelectedEntities(const Vector3 &move, const Vector3 &scale, Number rotate) { if(firstMove) { firstMove = false; dispatchEvent(new TrasnformGizmoEvent(mode), Event::SELECT_EVENT); } Vector3 globalCenter = getConcatenatedMatrix().getPosition(); for(int i=0; i < selectedEntities.size(); i++) { if((orientation == ORIENTATION_GLOBAL && mode != TRANSFORM_SCALE_VIEW) || (ORIENTATION_LOCAL && mode == TRANSFORM_MOVE_VIEW)) { entityPositions[i] += move; Quaternion q; Quaternion currentRotation = selectedEntities[i]->getRotationQuat(); Vector3 axisVector = transformConstraint; axisVector = currentRotation.Inverse().applyTo(axisVector); axisVector.Normalize(); q.fromAngleAxis(rotate, axisVector); Vector3 newScale = selectedEntities[i]->getRotationQuat().applyTo(scale); newScale.x = fabs(newScale.x); newScale.y = fabs(newScale.y); newScale.z = fabs(newScale.z); if(scale.x < 0 || scale.y < 0 || scale.z < 0) { newScale = newScale * -1.0; } if(centerMode == CENTER_MODE_MEDIAN) { Vector3 globalPosition = selectedEntities[i]->getConcatenatedMatrix().getPosition(); Quaternion tQ; tQ.fromAngleAxis(rotate, transformConstraint); Vector3 trans = globalCenter + tQ.applyTo(globalPosition-globalCenter) - globalPosition; globalPosition += trans; selectedEntities[i]->setPosition(globalPosition - selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().getPosition()); selectedEntities[i]->setRotationByQuaternion(currentRotation * q); if(move.length() == 0.0) { entityPositions[i] = selectedEntities[i]->getPosition(); } selectedEntities[i]->setScale(selectedEntities[i]->getScale() * (Vector3(1.0, 1.0, 1.0)+newScale)); if(newScale.length() > 0.0) { Vector3 scalePosition; scalePosition.x = globalPosition.x + ((globalPosition.x - globalCenter.x) * newScale.x); scalePosition.y = globalPosition.y + ((globalPosition.y - globalCenter.y) * newScale.y); scalePosition.z = globalPosition.z + ((globalPosition.z - globalCenter.z) * newScale.z); scalePosition = selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().Inverse().transpose() * scalePosition; selectedEntities[i]->setPosition(scalePosition); if(move.length() == 0.0) { entityPositions[i] = selectedEntities[i]->getPosition(); } } } else { selectedEntities[i]->setRotationByQuaternion(currentRotation * q); selectedEntities[i]->setScale(selectedEntities[i]->getScale() * (Vector3(1.0, 1.0, 1.0)+newScale)); } } else { entityPositions[i] += getRotationQuat().applyTo(move); Quaternion q; Quaternion currentRotation = selectedEntities[i]->getRotationQuat(); Vector3 axisVector = transformConstraint; // always global in the 2d view if(gizmoMode != GIZMO_MODE_3D || mode == TRANSFORM_ROTATE_VIEW) { axisVector = currentRotation.Inverse().applyTo(axisVector); } axisVector.Normalize(); q.fromAngleAxis(rotate, axisVector); if(centerMode == CENTER_MODE_MEDIAN) { Vector3 globalPosition = selectedEntities[i]->getConcatenatedMatrix().getPosition(); Quaternion tQ; tQ.fromAngleAxis(rotate, getRotationQuat().applyTo(axisVector)); Vector3 trans = globalCenter + tQ.applyTo(globalPosition-globalCenter) - globalPosition; globalPosition += trans; selectedEntities[i]->setPosition(globalPosition - selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().getPosition()); selectedEntities[i]->setRotationByQuaternion(currentRotation * q); if(move.length() == 0.0) { entityPositions[i] = selectedEntities[i]->getPosition(); } selectedEntities[i]->setScale(selectedEntities[i]->getScale() * (Vector3(1.0, 1.0, 1.0)+scale)); if(scale.length() > 0.0) { Vector3 scalePosition; scalePosition.x = globalPosition.x + ((globalPosition.x - globalCenter.x) * scale.x); scalePosition.y = globalPosition.y + ((globalPosition.y - globalCenter.y) * scale.y); scalePosition.z = globalPosition.z + ((globalPosition.z - globalCenter.z) * scale.z); scalePosition = selectedEntities[i]->getParentEntity()->getConcatenatedMatrix().Inverse().transpose() * scalePosition; selectedEntities[i]->setPosition(scalePosition); if(move.length() == 0.0) { entityPositions[i] = selectedEntities[i]->getPosition(); } } } else { selectedEntities[i]->setRotationByQuaternion(currentRotation * q); selectedEntities[i]->setScale(selectedEntities[i]->getScale() * (Vector3(1.0, 1.0, 1.0)+scale)); } } // snap if moving and snap is on if(scale.length() == 0.0 && rotate == 0.0) { if(snapEnabled) { Vector3 snappedPositon = entityPositions[i]; snappedPositon.x = round(((Number)snappedPositon.x)/(snapSize)) * snapSize; snappedPositon.y = round(((Number)snappedPositon.y)/(snapSize)) * snapSize; snappedPositon.z = round(((Number)snappedPositon.z)/(snapSize)) * snapSize; selectedEntities[i]->setPosition(snappedPositon); } else { selectedEntities[i]->setPosition(entityPositions[i]); } } } }
void Sensor::notifyOnActivate() { dispatchEvent(Event::create(EventTypeNames::activate)); }
void BatteryManager::didChangeBatteryStatus(Event& event, PassRefPtr<BatteryStatus> batteryStatus) { updateBatteryStatus(batteryStatus); dispatchEvent(event); }
void Notification::dispatchErrorEvent() { dispatchEvent(Event::create(EventTypeNames::error)); }
/** * This is the main entry point of a native application that is using * android_native_app_glue. It runs in its own thread, with its own * event loop for receiving input events and doing other things. */ void android_main(struct android_app* state) { // Make sure glue isn't stripped. app_dummy(); memset(&engine, 0, sizeof(engine)); state->userData = &engine; state->onAppCmd = engine_handle_cmd; state->onInputEvent = engine_handle_input; state->inputPollSource.process = process_input; engine.app = state; // Prepare to monitor accelerometer engine.sensorManager = ASensorManager_getInstance(); engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager, ASENSOR_TYPE_ACCELEROMETER); engine.sensorEventQueue = ASensorManager_createEventQueue(engine.sensorManager, state->looper, LOOPER_ID_USER, NULL, NULL); if (state->savedState != NULL) { // We are starting with a previous saved state; restore from it. engine.state = *(struct saved_state*)state->savedState; } // Screen size change support state->activity->callbacks->onContentRectChanged = onContentRectChanged; // loop waiting for stuff to do. while (1) { // Read all pending events. int ident; int events; struct android_poll_source* source; // If not animating, we will block forever waiting for events. // If animating, we loop until all events are read, then continue // to draw the next frame of animation. while ((ident=ALooper_pollAll(engine.animating ? 0 : -1, NULL, &events, (void**)&source)) >= 0) { // Process this event. if (source != NULL) { source->process(state, source); } // If a sensor has data, process it now. if (ident == LOOPER_ID_USER) { if (engine.accelerometerSensor != NULL) { ASensorEvent event; while (ASensorEventQueue_getEvents(engine.sensorEventQueue, &event, 1) > 0) { LOG_EVENTS_DEBUG("accelerometer: x=%f y=%f z=%f", event.acceleration.x, event.acceleration.y, event.acceleration.z); AConfiguration* _currentconf = AConfiguration_new(); AConfiguration_fromAssetManager(_currentconf, state->activity->assetManager); static int32_t _orientation = AConfiguration_getOrientation(_currentconf); if (ACONFIGURATION_ORIENTATION_LAND != _orientation) { // ACONFIGURATION_ORIENTATION_ANY // ACONFIGURATION_ORIENTATION_PORT // ACONFIGURATION_ORIENTATION_SQUARE cocos2d::Acceleration acc; acc.x = -event.acceleration.x/10; acc.y = -event.acceleration.y/10; acc.z = event.acceleration.z/10; acc.timestamp = 0; cocos2d::EventAcceleration accEvent(acc); auto dispatcher = cocos2d::Director::getInstance()->getEventDispatcher(); dispatcher->dispatchEvent(&accEvent); } else { // ACONFIGURATION_ORIENTATION_LAND // swap x and y parameters cocos2d::Acceleration acc; acc.x = event.acceleration.y/10; acc.y = -event.acceleration.x/10; acc.z = event.acceleration.z/10; acc.timestamp = 0; cocos2d::EventAcceleration accEvent(acc); auto dispatcher = cocos2d::Director::getInstance()->getEventDispatcher(); dispatcher->dispatchEvent(&accEvent); } } } } // Check if we are exiting. if (state->destroyRequested != 0) { engine_term_display(&engine); memset(&engine, 0, sizeof(engine)); s_methodInitialized = false; return; } } if (engine.animating) { // Done with events; draw next animation frame. engine.state.angle += .01f; if (engine.state.angle > 1) { engine.state.angle = 0; } // Drawing is throttled to the screen update rate, so there // is no need to do timing here. LOG_RENDER_DEBUG("android_main : engine.animating"); engine_draw_frame(&engine); } else { LOG_RENDER_DEBUG("android_main : !engine.animating"); } // Check if screen size changed if (isContentRectChanged) { std::chrono::duration<int, std::milli> duration( std::chrono::duration_cast<std::chrono::duration<int, std::milli>>(std::chrono::steady_clock::now() - timeRectChanged)); // Wait about 30 ms to get new width and height. Without waiting we can get old values sometime if (duration.count() > 30) { isContentRectChanged = false; int32_t newWidth = ANativeWindow_getWidth(engine.app->window); int32_t newHeight = ANativeWindow_getHeight(engine.app->window); cocos2d::Application::getInstance()->applicationScreenSizeChanged(newWidth, newHeight); } } } }
void SlidingActor::doUpdate(const UpdateState& us) { if (!_content) return; //static float ml = 0; //ml = max(_speed.length(), ml); //log::messageln("sp: %.2f", ml); int ct = getTimeMS(); if (_lastIterTime + NUM * fdt < ct) _lastIterTime = ct; if (_drag.isDragging()) { Vector2 pos = _content->getPosition(); //log::messageln("%d) pos %.2f %.2f", _current, pos.x, pos.y); _prev[_current].pos = pos; _prev[_current].tm = ct; _current = (_current + 1) % NUM; return; } if (_sliding) { const RectF& bounds = _drag.getDragBounds(); while (_lastIterTime + fdt <= ct) { Vector2 pos = _content->getPosition(); Vector2 newpos = pos + _speed * (fdt / 1000.0f); if (newpos.x < bounds.getLeft()) { newpos.x = bounds.getLeft(); _speed.x = 0; } else if (newpos.x > bounds.getRight()) { newpos.x = bounds.getRight(); _speed.x = 0; } if (newpos.y < bounds.getTop()) { newpos.y = bounds.getTop(); _speed.y = 0; } else if (newpos.y > bounds.getBottom()) { newpos.y = bounds.getBottom(); _speed.y = 0; } _speed *= 0.97f; _content->setPosition(newpos); _lastIterTime += fdt; } SlidingEvent sl(SlidingEvent::SLIDING); sl.speed = _speed; dispatchEvent(&sl); _speed = sl.speed; if (_speed.sqlength() < 8) { _sliding = false; SlidingEvent ev(SlidingEvent::END); dispatchEvent(&ev); } } }
void Notification::dispatchShowEvent() { dispatchEvent(Event::create(EventTypeNames::show)); }
void AbstractNode::dispatchAttrModified(Attr* pAttr, MutationEvent::AttrChangeType changeType, const XMLString& prevValue, const XMLString& newValue) { AutoPtr<MutationEvent> pEvent = new MutationEvent(_pOwner, MutationEvent::DOMAttrModified, this, true, false, pAttr, prevValue, newValue, pAttr->name(), changeType); dispatchEvent(pEvent.get()); }
void AbstractNode::dispatchCharacterDataModified(const XMLString& prevValue, const XMLString& newValue) { AutoPtr<MutationEvent> pEvent = new MutationEvent(_pOwner, MutationEvent::DOMCharacterDataModified, this, true, false, 0, prevValue, newValue, EMPTY_STRING, MutationEvent::MODIFICATION); dispatchEvent(pEvent.get()); }
void AbstractNode::dispatchNodeRemoved() { AutoPtr<MutationEvent> pEvent = new MutationEvent(_pOwner, MutationEvent::DOMNodeRemoved, this, true, false, parentNode()); dispatchEvent(pEvent.get()); }
void AbstractNode::dispatchNodeInsertedIntoDocument() { AutoPtr<MutationEvent> pEvent = new MutationEvent(_pOwner, MutationEvent::DOMNodeInsertedIntoDocument, this, false, false, 0); dispatchEvent(pEvent.get()); }
void AbstractNode::dispatchSubtreeModified() { AutoPtr<MutationEvent> pEvent = new MutationEvent(_pOwner, MutationEvent::DOMSubtreeModified, this, true, false, 0); dispatchEvent(pEvent.get()); }
void EventSource::scheduleReconnect() { m_state = CONNECTING; m_connectTimer.startOneShot(m_reconnectDelay / 1000.0, FROM_HERE); dispatchEvent(Event::create(EventTypeNames::error)); }
void SVGScriptElement::dispatchLoadEvent() { dispatchEvent(Event::create(EventTypeNames::load)); }
void FileReader::fireEvent(const AtomicString& type) { dispatchEvent(ProgressEvent::create(type, true, m_loader ? m_loader->bytesLoaded() : 0, m_loader ? m_loader->totalBytes() : 0)); }
void callback(int type, void *event) { dispatchEvent(type, event); }
void Performance::webkitSetResourceTimingBufferSize(unsigned size) { m_resourceTimingBufferSize = size; if (isResourceTimingBufferFull()) dispatchEvent(Event::create(eventNames().webkitresourcetimingbufferfullEvent, false, false)); }
void WebNotification::dispatchErrorEvent(const WebKit::WebString& /* errorMessage */) { // FIXME: errorMessage not supported by WebCore yet dispatchEvent(eventNames().errorEvent); }
void SlidingActor::_newEvent(Event* event) { if (!_content) return; TouchEvent* te = safeCast<TouchEvent*>(event); timeMS tm = getTimeMS(); switch (te->type) { case TouchEvent::TOUCH_DOWN: { _current = 0; _lastIterTime = tm; _prev[0].pos = _content->getPosition(); _prev[0].tm = tm; for (int i = 1; i < NUM; ++i) _prev[i].tm = 0; _holded = event->target; _downPos = te->localPosition; _downTime = tm; } break; case TouchEvent::TOUCH_UP: { if (_drag.getDragEnabled()) { _downTime = 0; Vector2 pos = _content->getPosition(); _holded = 0; const iter* old = 0; const iter* mid = 0; const iter* last = _prev + _current; for (int i = 1; i < NUM; ++i) { int n = (_current + NUM - i) % NUM; if (_prev[n].tm) last = _prev + n; else break; if (!mid && (last->tm + 50 <= tm)) mid = last; if (last->tm + 150 <= tm) { old = last; break; } } if (!old) old = last; if (!mid) mid = last; Vector2 midpos = mid->pos; Vector2 dir = pos - midpos; if (dir.sqlength() < 10 * 10) _speed = Vector2(0, 0); else { timeMS v = tm - old->tm; if (!v) return; Vector2 dr = pos - old->pos; Vector2 ns = (dr * 1000.0f) / v; if (_speed.dot(ns) < 0) _speed = ns; else _speed += ns; } if (!_sliding) { _sliding = true; } SlidingEvent sd(SlidingEvent::BEGIN); sd.speed = _speed; dispatchEvent(&sd); _speed = sd.speed; _lastIterTime = tm; } } break; case TouchEvent::MOVE: { Vector2 offset = _downPos - te->localPosition; float d = offset.dot(offset); if (_holded && (d >= _rad * _rad)) { spActor act = safeSpCast<Actor>(_holded); while (act && act.get() != _content.get()) { act->setNotPressed(); act = act->getParent(); } _holded = 0; } } break; } }
void WebNotification::dispatchCloseEvent(bool /* byUser */) { // FIXME: byUser flag not supported by WebCore yet dispatchEvent(eventNames().closeEvent); }
void Notification::dispatchClickEvent() { UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); WindowFocusAllowedIndicator windowFocusAllowed; dispatchEvent(Event::create(EventTypeNames::click)); }
void WebNotification::dispatchClickEvent() { UserGestureIndicator gestureIndicator(DefinitelyProcessingUserGesture); WindowFocusAllowedIndicator windowFocusAllowed; dispatchEvent(eventNames().clickEvent); }
void Notification::dispatchCloseEvent() { dispatchEvent(Event::create(EventTypeNames::close)); m_state = NotificationStateClosed; }
void WebSocket::didReceiveMessageError() { LOG(Network, "WebSocket %p didReceiveErrorMessage()", this); ASSERT(scriptExecutionContext()); dispatchEvent(Event::create(eventNames().errorEvent, false, false)); }
void Sensor::notifySensorReadingChanged() { dispatchEvent(Event::create(EventTypeNames::change)); }
void TouchEventDispatchingPerfTest::generateTestFunctions() { TestFunction testFunctions[] = { { "OneByOne-scenegraph", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = [](Touch* touch, Event* event){ return false; }; listener->onTouchMoved = [](Touch* touch, Event* event){}; listener->onTouchEnded = [](Touch* touch, Event* event){}; // Create new touchable nodes for (int i = 0; i < this->_quantityOfNodes; ++i) { auto node = Node::create(); node->setTag(1000 + i); this->addChild(node); this->_nodes.push_back(node); dispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), node); } _lastRenderedCount = _quantityOfNodes; } Size size = Director::getInstance()->getWinSize(); EventTouch touchEvent; touchEvent.setEventCode(EventTouch::EventCode::BEGAN); std::vector<Touch*> touches; for (int i = 0; i < 4; ++i) { Touch* touch = new Touch(); touch->autorelease(); touch->setTouchInfo(i, rand() % 200, rand() % 200); touches.push_back(touch); } touchEvent.setTouches(touches); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&touchEvent); CC_PROFILER_STOP(this->profilerName()); } } , { "OneByOne-fixed", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = [](Touch* touch, Event* event){ return false; }; listener->onTouchMoved = [](Touch* touch, Event* event){}; listener->onTouchEnded = [](Touch* touch, Event* event){}; for (int i = 0; i < this->_quantityOfNodes; ++i) { auto l = listener->clone(); this->_fixedPriorityListeners.push_back(l); dispatcher->addEventListenerWithFixedPriority(l, i+1); } _lastRenderedCount = _quantityOfNodes; } Size size = Director::getInstance()->getWinSize(); EventTouch touchEvent; touchEvent.setEventCode(EventTouch::EventCode::BEGAN); std::vector<Touch*> touches; for (int i = 0; i < 4; ++i) { Touch* touch = new Touch(); touch->autorelease(); touch->setTouchInfo(i, rand() % 200, rand() % 200); touches.push_back(touch); } touchEvent.setTouches(touches); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&touchEvent); CC_PROFILER_STOP(this->profilerName()); } } , { "AllAtOnce-scenegraph", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listener = EventListenerTouchAllAtOnce::create(); listener->onTouchesBegan = [](const std::vector<Touch*> touches, Event* event){}; listener->onTouchesMoved = [](const std::vector<Touch*> touches, Event* event){}; listener->onTouchesEnded = [](const std::vector<Touch*> touches, Event* event){}; // Create new touchable nodes for (int i = 0; i < this->_quantityOfNodes; ++i) { auto node = Node::create(); node->setTag(1000 + i); this->addChild(node); this->_nodes.push_back(node); dispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), node); } _lastRenderedCount = _quantityOfNodes; } Size size = Director::getInstance()->getWinSize(); EventTouch touchEvent; touchEvent.setEventCode(EventTouch::EventCode::BEGAN); std::vector<Touch*> touches; for (int i = 0; i < 4; ++i) { Touch* touch = new Touch(); touch->autorelease(); touch->setTouchInfo(i, rand() % 200, rand() % 200); touches.push_back(touch); } touchEvent.setTouches(touches); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&touchEvent); CC_PROFILER_STOP(this->profilerName()); } } , { "AllAtOnce-fixed", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listener = EventListenerTouchAllAtOnce::create(); listener->onTouchesBegan = [](const std::vector<Touch*> touches, Event* event){}; listener->onTouchesMoved = [](const std::vector<Touch*> touches, Event* event){}; listener->onTouchesEnded = [](const std::vector<Touch*> touches, Event* event){}; for (int i = 0; i < this->_quantityOfNodes; ++i) { auto l = listener->clone(); this->_fixedPriorityListeners.push_back(l); dispatcher->addEventListenerWithFixedPriority(l, i+1); } _lastRenderedCount = _quantityOfNodes; } Size size = Director::getInstance()->getWinSize(); EventTouch touchEvent; touchEvent.setEventCode(EventTouch::EventCode::BEGAN); std::vector<Touch*> touches; for (int i = 0; i < 4; ++i) { Touch* touch = new Touch(); touch->autorelease(); touch->setTouchInfo(i, rand() % 200, rand() % 200); touches.push_back(touch); } touchEvent.setTouches(touches); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&touchEvent); CC_PROFILER_STOP(this->profilerName()); } } , { "TouchModeMix-scenegraph", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listenerOneByOne = EventListenerTouchOneByOne::create(); listenerOneByOne->onTouchBegan = [](Touch* touch, Event* event){ return false; }; listenerOneByOne->onTouchMoved = [](Touch* touch, Event* event){}; listenerOneByOne->onTouchEnded = [](Touch* touch, Event* event){}; auto listenerAllAtOnce = EventListenerTouchAllAtOnce::create(); listenerAllAtOnce->onTouchesBegan = [](const std::vector<Touch*> touches, Event* event){}; listenerAllAtOnce->onTouchesMoved = [](const std::vector<Touch*> touches, Event* event){}; listenerAllAtOnce->onTouchesEnded = [](const std::vector<Touch*> touches, Event* event){}; int i = 0; // Create new touchable nodes for (; i < this->_quantityOfNodes/2; ++i) { auto node = Node::create(); node->setTag(1000 + i); this->addChild(node); this->_nodes.push_back(node); dispatcher->addEventListenerWithSceneGraphPriority(listenerOneByOne->clone(), node); } for (; i < this->_quantityOfNodes; ++i) { auto node = Node::create(); node->setTag(1000 + i); this->addChild(node); this->_nodes.push_back(node); dispatcher->addEventListenerWithSceneGraphPriority(listenerAllAtOnce->clone(), node); } _lastRenderedCount = _quantityOfNodes; } Size size = Director::getInstance()->getWinSize(); EventTouch touchEvent; touchEvent.setEventCode(EventTouch::EventCode::BEGAN); std::vector<Touch*> touches; for (int i = 0; i < 4; ++i) { Touch* touch = new Touch(); touch->autorelease(); touch->setTouchInfo(i, rand() % 200, rand() % 200); touches.push_back(touch); } touchEvent.setTouches(touches); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&touchEvent); CC_PROFILER_STOP(this->profilerName()); } } , { "TouchModeMix-fixed", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listenerOneByOne = EventListenerTouchOneByOne::create(); listenerOneByOne->onTouchBegan = [](Touch* touch, Event* event){ return false; }; listenerOneByOne->onTouchMoved = [](Touch* touch, Event* event){}; listenerOneByOne->onTouchEnded = [](Touch* touch, Event* event){}; auto listenerAllAtOnce = EventListenerTouchAllAtOnce::create(); listenerAllAtOnce->onTouchesBegan = [](const std::vector<Touch*> touches, Event* event){}; listenerAllAtOnce->onTouchesMoved = [](const std::vector<Touch*> touches, Event* event){}; listenerAllAtOnce->onTouchesEnded = [](const std::vector<Touch*> touches, Event* event){}; int i = 0; for (; i < this->_quantityOfNodes/2; ++i) { auto l = listenerOneByOne->clone(); this->_fixedPriorityListeners.push_back(l); dispatcher->addEventListenerWithFixedPriority(l, i+1); } for (; i < this->_quantityOfNodes; ++i) { auto l = listenerAllAtOnce->clone(); this->_fixedPriorityListeners.push_back(l); dispatcher->addEventListenerWithFixedPriority(l, i+1); } _lastRenderedCount = _quantityOfNodes; } Size size = Director::getInstance()->getWinSize(); EventTouch touchEvent; touchEvent.setEventCode(EventTouch::EventCode::BEGAN); std::vector<Touch*> touches; for (int i = 0; i < 4; ++i) { Touch* touch = new Touch(); touch->autorelease(); touch->setTouchInfo(i, rand() % 200, rand() % 200); touches.push_back(touch); } touchEvent.setTouches(touches); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&touchEvent); CC_PROFILER_STOP(this->profilerName()); } } , }; for (const auto& func : testFunctions) { _testFunctions.push_back(func); } }
void Sensor::notifyError(DOMException* error) { dispatchEvent( SensorErrorEvent::create(EventTypeNames::error, std::move(error))); }
void KeyboardEventDispatchingPerfTest::generateTestFunctions() { TestFunction testFunctions[] = { { "keyboard-scenegraph", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listener = EventListenerKeyboard::create(); listener->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event* event){}; listener->onKeyReleased = [](EventKeyboard::KeyCode keyCode, Event* event){}; // Create new nodes listen to keyboard event for (int i = 0; i < this->_quantityOfNodes; ++i) { auto node = Node::create(); node->setTag(1000 + i); this->addChild(node); this->_nodes.push_back(node); dispatcher->addEventListenerWithSceneGraphPriority(listener->clone(), node); } _lastRenderedCount = _quantityOfNodes; } EventKeyboard event(EventKeyboard::KeyCode::KEY_RETURN, true); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&event); CC_PROFILER_STOP(this->profilerName()); } } , { "keyboard-fixed", [=](){ auto dispatcher = Director::getInstance()->getEventDispatcher(); if (_quantityOfNodes != _lastRenderedCount) { auto listener = EventListenerKeyboard::create(); listener->onKeyPressed = [](EventKeyboard::KeyCode keyCode, Event* event){}; listener->onKeyReleased = [](EventKeyboard::KeyCode keyCode, Event* event){}; for (int i = 0; i < this->_quantityOfNodes; ++i) { auto l = listener->clone(); this->_fixedPriorityListeners.push_back(l); dispatcher->addEventListenerWithFixedPriority(l, i+1); } _lastRenderedCount = _quantityOfNodes; } EventKeyboard event(EventKeyboard::KeyCode::KEY_RETURN, true); CC_PROFILER_START(this->profilerName()); dispatcher->dispatchEvent(&event); CC_PROFILER_STOP(this->profilerName()); } } , }; for (const auto& func : testFunctions) { _testFunctions.push_back(func); } }
void Performance::webkitSetResourceTimingBufferSize(unsigned size) { m_resourceTimingBufferSize = size; if (isResourceTimingBufferFull()) dispatchEvent(Event::create(EventTypeNames::webkitresourcetimingbufferfull)); }
void Notification::dispatchErrorEvent() { dispatchEvent(Event::create(eventNames().errorEvent, false, false)); }