diff -r 000000000000 -r e8ccd40d0ef6 Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Touchgui/plugins/org.apache.cordova.vibration/src/ubuntu/vibration.cpp Thu Jun 04 14:50:33 2015 +0200 @@ -0,0 +1,64 @@ +/* + * + * Copyright 2013 Canonical Ltd. + * + * 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 "vibration.h" + +void Vibration::vibrate(int, int, int mills) { + QSharedPointer vibrate = QSharedPointer::create(); + vibrate->setIntensity(1.0); + vibrate->setDuration(mills); + + vibrate->start(); + + _effects.append(vibrate); +} + +void Vibration::cancelVibration(int, int) { + _timers.clear(); + _effects.clear(); +} + +void Vibration::vibrateWithPattern(int, int, const QList &pattern, int repeat) { + QSharedPointer timer = QSharedPointer::create(); + QSharedPointer k = QSharedPointer::create(); + + QSharedPointer vibrate = QSharedPointer::create(); + vibrate->setIntensity(1.0); + + _effects.append(vibrate); + _timers.append(timer); + + timer->connect(timer.data(), &QTimer::timeout, [=, timer = timer.data()] () { + if (*k >= pattern.size()) { + if (repeat < 0 || repeat >= pattern.size()) { + timer->stop(); + return; + } + *k = repeat; + } + bool idle = (*k % 2 == 0); + if (!idle) { + vibrate->setDuration(pattern[*k]); + vibrate->start(); + } + timer->start(pattern[*k]); + (*k)++; + }); + timer->start(1); +}