Merge branch 'master' of https://github.com/highfidelity/hifi into relaxDeadlockWatchdog

This commit is contained in:
ZappoMan 2018-02-22 08:43:13 -08:00
commit aa5542c54b
26 changed files with 275 additions and 369 deletions

View file

@ -131,7 +131,7 @@ Rectangle {
spacing: 5 spacing: 5
anchors.horizontalCenter: column3.horizontalCenter anchors.horizontalCenter: column3.horizontalCenter
anchors.horizontalCenterOffset: -20 anchors.horizontalCenterOffset: 0
Button { Button {
id: button1 id: button1

View file

@ -4829,7 +4829,6 @@ void Application::setKeyboardFocusHighlight(const glm::vec3& position, const glm
if (_keyboardFocusHighlightID == UNKNOWN_OVERLAY_ID || !getOverlays().isAddedOverlay(_keyboardFocusHighlightID)) { if (_keyboardFocusHighlightID == UNKNOWN_OVERLAY_ID || !getOverlays().isAddedOverlay(_keyboardFocusHighlightID)) {
_keyboardFocusHighlight = std::make_shared<Cube3DOverlay>(); _keyboardFocusHighlight = std::make_shared<Cube3DOverlay>();
_keyboardFocusHighlight->setAlpha(1.0f); _keyboardFocusHighlight->setAlpha(1.0f);
_keyboardFocusHighlight->setBorderSize(1.0f);
_keyboardFocusHighlight->setColor({ 0xFF, 0xEF, 0x00 }); _keyboardFocusHighlight->setColor({ 0xFF, 0xEF, 0x00 });
_keyboardFocusHighlight->setIsSolid(false); _keyboardFocusHighlight->setIsSolid(false);
_keyboardFocusHighlight->setPulseMin(0.5); _keyboardFocusHighlight->setPulseMin(0.5);
@ -5969,7 +5968,6 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe
DependencyManager::get<TabletScriptingInterface>().data()->setToolbarScriptingInterface(toolbarScriptingInterface); DependencyManager::get<TabletScriptingInterface>().data()->setToolbarScriptingInterface(toolbarScriptingInterface);
scriptEngine->registerGlobalObject("Window", DependencyManager::get<WindowScriptingInterface>().data()); scriptEngine->registerGlobalObject("Window", DependencyManager::get<WindowScriptingInterface>().data());
qScriptRegisterMetaType(scriptEngine.data(), CustomPromptResultToScriptValue, CustomPromptResultFromScriptValue);
scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter, scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter,
LocationScriptingInterface::locationSetter, "Window"); LocationScriptingInterface::locationSetter, "Window");
// register `location` on the global object. // register `location` on the global object.

View file

@ -210,6 +210,7 @@ Menu::Menu() {
auto avatarEntitiesBookmarks = DependencyManager::get<AvatarEntitiesBookmarks>(); auto avatarEntitiesBookmarks = DependencyManager::get<AvatarEntitiesBookmarks>();
avatarEntitiesBookmarks->setupMenus(this, avatarMenu); avatarEntitiesBookmarks->setupMenus(this, avatarMenu);
// Display menu ---------------------------------- // Display menu ----------------------------------
// FIXME - this is not yet matching Alan's spec because it doesn't have // FIXME - this is not yet matching Alan's spec because it doesn't have
// menus for "2D"/"3D" - we need to add support for detecting the appropriate // menus for "2D"/"3D" - we need to add support for detecting the appropriate

View file

@ -94,22 +94,6 @@ bool MenuScriptingInterface::menuItemExists(const QString& menu, const QString&
return result; return result;
} }
void MenuScriptingInterface::addActionGroup(const QString& groupName, const QStringList& actionList,
const QString& selected) {
static const char* slot = SLOT(menuItemTriggered());
QMetaObject::invokeMethod(Menu::getInstance(), "addActionGroup",
Q_ARG(const QString&, groupName),
Q_ARG(const QStringList&, actionList),
Q_ARG(const QString&, selected),
Q_ARG(QObject*, this),
Q_ARG(const char*, slot));
}
void MenuScriptingInterface::removeActionGroup(const QString& groupName) {
QMetaObject::invokeMethod(Menu::getInstance(), "removeActionGroup",
Q_ARG(const QString&, groupName));
}
bool MenuScriptingInterface::isOptionChecked(const QString& menuOption) { bool MenuScriptingInterface::isOptionChecked(const QString& menuOption) {
if (QThread::currentThread() == qApp->thread()) { if (QThread::currentThread() == qApp->thread()) {
return Menu::getInstance()->isOptionChecked(menuOption); return Menu::getInstance()->isOptionChecked(menuOption);
@ -147,19 +131,3 @@ void MenuScriptingInterface::setMenuEnabled(const QString& menuOption, bool isCh
void MenuScriptingInterface::triggerOption(const QString& menuOption) { void MenuScriptingInterface::triggerOption(const QString& menuOption) {
QMetaObject::invokeMethod(Menu::getInstance(), "triggerOption", Q_ARG(const QString&, menuOption)); QMetaObject::invokeMethod(Menu::getInstance(), "triggerOption", Q_ARG(const QString&, menuOption));
} }
void MenuScriptingInterface::closeInfoView(const QString& path) {
QMetaObject::invokeMethod(Menu::getInstance(), "closeInfoView", Q_ARG(const QString&, path));
}
bool MenuScriptingInterface::isInfoViewVisible(const QString& path) {
if (QThread::currentThread() == qApp->thread()) {
return Menu::getInstance()->isInfoViewVisible(path);
}
bool result;
BLOCKING_INVOKE_METHOD(Menu::getInstance(), "isInfoViewVisible",
Q_RETURN_ARG(bool, result), Q_ARG(const QString&, path));
return result;
}

View file

@ -163,13 +163,6 @@ public slots:
*/ */
bool menuItemExists(const QString& menuName, const QString& menuitem); bool menuItemExists(const QString& menuName, const QString& menuitem);
/**
* TODO: Not working; don't document until fixed.
*/
void addActionGroup(const QString& groupName, const QStringList& actionList,
const QString& selected = QString());
void removeActionGroup(const QString& groupName);
/**jsdoc /**jsdoc
* Check whether a checkable menu item is checked. * Check whether a checkable menu item is checked.
* @function Menu.isOptionChecked * @function Menu.isOptionChecked
@ -222,12 +215,6 @@ public slots:
*/ */
void setMenuEnabled(const QString& menuName, bool isEnabled); void setMenuEnabled(const QString& menuName, bool isEnabled);
/**
* TODO: Not used or useful; will not document until used.
*/
void closeInfoView(const QString& path);
bool isInfoViewVisible(const QString& path);
signals: signals:
/**jsdoc /**jsdoc
* Triggered when a menu item is clicked (or triggered by {@link Menu.triggerOption}). * Triggered when a menu item is clicked (or triggered by {@link Menu.triggerOption}).

View file

@ -32,20 +32,6 @@ static const QString LAST_BROWSE_LOCATION_SETTING = "LastBrowseLocation";
static const QString LAST_BROWSE_ASSETS_LOCATION_SETTING = "LastBrowseAssetsLocation"; static const QString LAST_BROWSE_ASSETS_LOCATION_SETTING = "LastBrowseAssetsLocation";
QScriptValue CustomPromptResultToScriptValue(QScriptEngine* engine, const CustomPromptResult& result) {
if (!result.value.isValid()) {
return QScriptValue::UndefinedValue;
}
Q_ASSERT(result.value.userType() == qMetaTypeId<QVariantMap>());
return engine->toScriptValue(result.value.toMap());
}
void CustomPromptResultFromScriptValue(const QScriptValue& object, CustomPromptResult& result) {
result.value = object.toVariant();
}
WindowScriptingInterface::WindowScriptingInterface() { WindowScriptingInterface::WindowScriptingInterface() {
const DomainHandler& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler(); const DomainHandler& domainHandler = DependencyManager::get<NodeList>()->getDomainHandler();
connect(&domainHandler, &DomainHandler::connectedToDomain, this, &WindowScriptingInterface::domainChanged); connect(&domainHandler, &DomainHandler::connectedToDomain, this, &WindowScriptingInterface::domainChanged);
@ -143,14 +129,6 @@ void WindowScriptingInterface::disconnectedFromDomain() {
emit domainChanged(""); emit domainChanged("");
} }
CustomPromptResult WindowScriptingInterface::customPrompt(const QVariant& config) {
CustomPromptResult result;
bool ok = false;
auto configMap = config.toMap();
result.value = OffscreenUi::getCustomInfo(OffscreenUi::ICON_NONE, "", configMap, &ok);
return ok ? result : CustomPromptResult();
}
QString fixupPathForMac(const QString& directory) { QString fixupPathForMac(const QString& directory) {
// On OS X `directory` does not work as expected unless a file is included in the path, so we append a bogus // On OS X `directory` does not work as expected unless a file is included in the path, so we append a bogus
// filename if the directory is valid. // filename if the directory is valid.

View file

@ -22,17 +22,6 @@
#include <DependencyManager.h> #include <DependencyManager.h>
class CustomPromptResult {
public:
QVariant value;
};
Q_DECLARE_METATYPE(CustomPromptResult);
QScriptValue CustomPromptResultToScriptValue(QScriptEngine* engine, const CustomPromptResult& result);
void CustomPromptResultFromScriptValue(const QScriptValue& object, CustomPromptResult& result);
/**jsdoc /**jsdoc
* The Window API provides various facilities not covered elsewhere: window dimensions, window focus, normal or entity camera * The Window API provides various facilities not covered elsewhere: window dimensions, window focus, normal or entity camera
* view, clipboard, announcements, user connections, common dialog boxes, snapshots, file import, domain changes, domain * view, clipboard, announcements, user connections, common dialog boxes, snapshots, file import, domain changes, domain
@ -142,15 +131,6 @@ public slots:
*/ */
void promptAsync(const QString& message = "", const QString& defaultText = ""); void promptAsync(const QString& message = "", const QString& defaultText = "");
/**jsdoc
* Prompt the user for input in a custom, modal dialog.
* @deprecated This function is deprecated and will soon be removed.
* @function Window.customPrompt
* @param {object} config - Configures the modal dialog.
* @returns {object} The user's response.
*/
CustomPromptResult customPrompt(const QVariant& config);
/**jsdoc /**jsdoc
* Prompt the user to choose a directory. Displays a modal dialog that navigates the directory tree. * Prompt the user to choose a directory. Displays a modal dialog that navigates the directory tree.
* @function Window.browseDir * @function Window.browseDir

View file

@ -42,8 +42,6 @@ private:
int _domainStatusBorder; int _domainStatusBorder;
int _magnifierBorder; int _magnifierBorder;
ivec2 _previousBorderSize{ -1 };
gpu::TexturePointer _uiTexture; gpu::TexturePointer _uiTexture;
gpu::TexturePointer _overlayDepthTexture; gpu::TexturePointer _overlayDepthTexture;
gpu::TexturePointer _overlayColorTexture; gpu::TexturePointer _overlayColorTexture;

View file

@ -125,13 +125,6 @@ Cube3DOverlay* Cube3DOverlay::createClone() const {
void Cube3DOverlay::setProperties(const QVariantMap& properties) { void Cube3DOverlay::setProperties(const QVariantMap& properties) {
Volume3DOverlay::setProperties(properties); Volume3DOverlay::setProperties(properties);
auto borderSize = properties["borderSize"];
if (borderSize.isValid()) {
float value = borderSize.toFloat();
setBorderSize(value);
}
} }
/**jsdoc /**jsdoc
@ -177,14 +170,8 @@ void Cube3DOverlay::setProperties(const QVariantMap& properties) {
* <code>parentID</code> is an avatar skeleton. A value of <code>65535</code> means "no joint". * <code>parentID</code> is an avatar skeleton. A value of <code>65535</code> means "no joint".
* *
* @property {Vec3} dimensions - The dimensions of the overlay. Synonyms: <code>scale</code>, <code>size</code>. * @property {Vec3} dimensions - The dimensions of the overlay. Synonyms: <code>scale</code>, <code>size</code>.
*
* @property {number} borderSize - Not used.
*/ */
QVariant Cube3DOverlay::getProperty(const QString& property) { QVariant Cube3DOverlay::getProperty(const QString& property) {
if (property == "borderSize") {
return _borderSize;
}
return Volume3DOverlay::getProperty(property); return Volume3DOverlay::getProperty(property);
} }

View file

@ -29,10 +29,6 @@ public:
virtual Cube3DOverlay* createClone() const override; virtual Cube3DOverlay* createClone() const override;
float getBorderSize() const { return _borderSize; }
void setBorderSize(float value) { _borderSize = value; }
void setProperties(const QVariantMap& properties) override; void setProperties(const QVariantMap& properties) override;
QVariant getProperty(const QString& property) override; QVariant getProperty(const QString& property) override;
@ -40,7 +36,6 @@ protected:
Transform evalRenderTransform() override; Transform evalRenderTransform() override;
private: private:
float _borderSize;
// edges on a cube // edges on a cube
std::array<int, 12> _geometryIds; std::array<int, 12> _geometryIds;
}; };

View file

@ -388,21 +388,6 @@ QString Overlays::getOverlayType(OverlayID overlayId) {
return ""; return "";
} }
QObject* Overlays::getOverlayObject(OverlayID id) {
if (QThread::currentThread() != thread()) {
QObject* result;
PROFILE_RANGE(script, __FUNCTION__);
BLOCKING_INVOKE_METHOD(this, "getOverlayObject", Q_RETURN_ARG(QObject*, result), Q_ARG(OverlayID, id));
return result;
}
Overlay::Pointer thisOverlay = getOverlay(id);
if (thisOverlay) {
return qobject_cast<QObject*>(&(*thisOverlay));
}
return nullptr;
}
OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) {
if (!_enabled) { if (!_enabled) {
return UNKNOWN_OVERLAY_ID; return UNKNOWN_OVERLAY_ID;

View file

@ -98,6 +98,11 @@ public:
OverlayID addOverlay(Overlay* overlay) { return addOverlay(Overlay::Pointer(overlay)); } OverlayID addOverlay(Overlay* overlay) { return addOverlay(Overlay::Pointer(overlay)); }
OverlayID addOverlay(const Overlay::Pointer& overlay); OverlayID addOverlay(const Overlay::Pointer& overlay);
RayToOverlayIntersectionResult findRayIntersectionVector(const PickRay& ray, bool precisionPicking,
const QVector<OverlayID>& overlaysToInclude,
const QVector<OverlayID>& overlaysToDiscard,
bool visibleOnly = false, bool collidableOnly = false);
bool mousePressEvent(QMouseEvent* event); bool mousePressEvent(QMouseEvent* event);
bool mouseDoublePressEvent(QMouseEvent* event); bool mouseDoublePressEvent(QMouseEvent* event);
bool mouseReleaseEvent(QMouseEvent* event); bool mouseReleaseEvent(QMouseEvent* event);
@ -227,15 +232,6 @@ public slots:
*/ */
QString getOverlayType(OverlayID overlayId); QString getOverlayType(OverlayID overlayId);
/**jsdoc
* Get the overlay script object.
* @function Overlays.getOverlayObject
* @deprecated This function is deprecated and will soon be removed.
* @param {Uuid} overlayID - The ID of the overlay to get the script object of.
* @returns {object} The script object for the overlay if found.
*/
QObject* getOverlayObject(OverlayID id);
/**jsdoc /**jsdoc
* Get the ID of the 2D overlay at a particular point on the screen or HUD. * Get the ID of the 2D overlay at a particular point on the screen or HUD.
* @function Overlays.getOverlayAtPoint * @function Overlays.getOverlayAtPoint
@ -356,28 +352,6 @@ public slots:
bool visibleOnly = false, bool visibleOnly = false,
bool collidableOnly = false); bool collidableOnly = false);
// TODO: Apart from the name, this function signature on JavaScript is identical to that of findRayIntersection() and should
// probably be removed from the JavaScript API so as not to cause confusion.
/**jsdoc
* Find the closest 3D overlay intersected by a {@link PickRay}.
* @function Overlays.findRayIntersectionVector
* @deprecated Use {@link Overlays.findRayIntersection} instead; it has identical parameters and results.
* @param {PickRay} pickRay - The PickRay to use for finding overlays.
* @param {boolean} [precisionPicking=false] - <em>Unused</em>; exists to match Entity API.
* @param {Array.<Uuid>} [overlayIDsToInclude=[]] - Whitelist for intersection test. If empty then the result isn't limited
* to overlays in the list.
* @param {Array.<Uuid>} [overlayIDsToExclude=[]] - Blacklist for intersection test. If empty then the result doesn't
* exclude overlays in the list.
* @param {boolean} [visibleOnly=false] - <em>Unused</em>; exists to match Entity API.
* @param {boolean} [collidableOnly=false] - <em>Unused</em>; exists to match Entity API.
* @returns {Overlays.RayToOverlayIntersectionResult} The closest 3D overlay intersected by <code>pickRay</code>, taking
* into account <code>overlayIDsToInclude</code> and <code>overlayIDsToExclude</code> if they're not empty.
*/
RayToOverlayIntersectionResult findRayIntersectionVector(const PickRay& ray, bool precisionPicking,
const QVector<OverlayID>& overlaysToInclude,
const QVector<OverlayID>& overlaysToDiscard,
bool visibleOnly = false, bool collidableOnly = false);
/**jsdoc /**jsdoc
* Return a list of 3D overlays with bounding boxes that touch a search sphere. * Return a list of 3D overlays with bounding boxes that touch a search sphere.
* @function Overlays.findOverlays * @function Overlays.findOverlays

View file

@ -99,13 +99,6 @@ void Shape3DOverlay::setProperties(const QVariantMap& properties) {
} }
} }
} }
auto borderSize = properties["borderSize"];
if (borderSize.isValid()) {
float value = borderSize.toFloat();
setBorderSize(value);
}
} }
/**jsdoc /**jsdoc
@ -153,13 +146,8 @@ void Shape3DOverlay::setProperties(const QVariantMap& properties) {
* @property {Vec3} dimensions - The dimensions of the overlay. Synonyms: <code>scale</code>, <code>size</code>. * @property {Vec3} dimensions - The dimensions of the overlay. Synonyms: <code>scale</code>, <code>size</code>.
* *
* @property {Shape} shape=Hexagon - The geometrical shape of the overlay. * @property {Shape} shape=Hexagon - The geometrical shape of the overlay.
* @property {number} borderSize - Not used.
*/ */
QVariant Shape3DOverlay::getProperty(const QString& property) { QVariant Shape3DOverlay::getProperty(const QString& property) {
if (property == "borderSize") {
return _borderSize;
}
if (property == "shape") { if (property == "shape") {
return shapeStrings[_shape]; return shapeStrings[_shape];
} }

View file

@ -30,10 +30,6 @@ public:
virtual Shape3DOverlay* createClone() const override; virtual Shape3DOverlay* createClone() const override;
float getBorderSize() const { return _borderSize; }
void setBorderSize(float value) { _borderSize = value; }
void setProperties(const QVariantMap& properties) override; void setProperties(const QVariantMap& properties) override;
QVariant getProperty(const QString& property) override; QVariant getProperty(const QString& property) override;
@ -41,7 +37,6 @@ protected:
Transform evalRenderTransform() override; Transform evalRenderTransform() override;
private: private:
float _borderSize;
GeometryCache::Shape _shape { GeometryCache::Hexagon }; GeometryCache::Shape _shape { GeometryCache::Hexagon };
}; };

View file

@ -389,19 +389,6 @@ QString OffscreenUi::getItem(const Icon icon, const QString& title, const QStrin
return result.toString(); return result.toString();
} }
QVariant OffscreenUi::getCustomInfo(const Icon icon, const QString& title, const QVariantMap& config, bool* ok) {
if (ok) {
*ok = false;
}
QVariant result = DependencyManager::get<OffscreenUi>()->customInputDialog(icon, title, config);
if (ok && result.isValid()) {
*ok = true;
}
return result;
}
ModalDialogListener* OffscreenUi::getTextAsync(const Icon icon, const QString& title, const QString& label, const QString& text) { ModalDialogListener* OffscreenUi::getTextAsync(const Icon icon, const QString& title, const QString& label, const QString& text) {
return DependencyManager::get<OffscreenUi>()->inputDialogAsync(icon, title, label, text); return DependencyManager::get<OffscreenUi>()->inputDialogAsync(icon, title, label, text);
} }
@ -423,10 +410,6 @@ ModalDialogListener* OffscreenUi::getItemAsync(const Icon icon, const QString& t
return inputDialogListener; return inputDialogListener;
} }
ModalDialogListener* OffscreenUi::getCustomInfoAsync(const Icon icon, const QString& title, const QVariantMap& config) {
return DependencyManager::get<OffscreenUi>()->customInputDialogAsync(icon, title, config);
}
QVariant OffscreenUi::inputDialog(const Icon icon, const QString& title, const QString& label, const QVariant& current) { QVariant OffscreenUi::inputDialog(const Icon icon, const QString& title, const QString& label, const QVariant& current) {
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
QVariant result; QVariant result;

View file

@ -230,10 +230,8 @@ public:
static QString getText(const Icon icon, const QString & title, const QString & label, const QString & text = QString(), bool * ok = 0); static QString getText(const Icon icon, const QString & title, const QString & label, const QString & text = QString(), bool * ok = 0);
static QString getItem(const Icon icon, const QString & title, const QString & label, const QStringList & items, int current = 0, bool editable = true, bool * ok = 0); static QString getItem(const Icon icon, const QString & title, const QString & label, const QStringList & items, int current = 0, bool editable = true, bool * ok = 0);
static QVariant getCustomInfo(const Icon icon, const QString& title, const QVariantMap& config, bool* ok = 0);
static ModalDialogListener* getTextAsync(const Icon icon, const QString & title, const QString & label, const QString & text = QString()); static ModalDialogListener* getTextAsync(const Icon icon, const QString & title, const QString & label, const QString & text = QString());
static ModalDialogListener* getItemAsync(const Icon icon, const QString & title, const QString & label, const QStringList & items, int current = 0, bool editable = true); static ModalDialogListener* getItemAsync(const Icon icon, const QString & title, const QString & label, const QStringList & items, int current = 0, bool editable = true);
static ModalDialogListener* getCustomInfoAsync(const Icon icon, const QString& title, const QVariantMap& config);
unsigned int getMenuUserDataId() const; unsigned int getMenuUserDataId() const;
QList<QObject *> &getModalDialogListeners(); QList<QObject *> &getModalDialogListeners();

View file

@ -268,16 +268,6 @@ bool Menu::isOptionChecked(const QString& menuOption) const {
return false; return false;
} }
void Menu::closeInfoView(const QString& path) {
auto offscreenUi = DependencyManager::get<OffscreenUi>();
offscreenUi->hide(path);
}
bool Menu::isInfoViewVisible(const QString& path) {
auto offscreenUi = DependencyManager::get<OffscreenUi>();
return offscreenUi->isVisible(path);
}
void Menu::triggerOption(const QString& menuOption) { void Menu::triggerOption(const QString& menuOption) {
QAction* action = _actionHash.value(menuOption); QAction* action = _actionHash.value(menuOption);
if (action) { if (action) {
@ -538,24 +528,6 @@ void Menu::setGroupingIsVisible(const QString& grouping, bool isVisible) {
QMenuBar::repaint(); QMenuBar::repaint();
} }
void Menu::addActionGroup(const QString& groupName, const QStringList& actionList, const QString& selected, QObject* receiver, const char* slot) {
auto menu = addMenu(groupName);
QActionGroup* actionGroup = new QActionGroup(menu);
actionGroup->setExclusive(true);
for (auto action : actionList) {
auto item = addCheckableActionToQMenuAndActionHash(menu, action, 0, action == selected, receiver, slot);
actionGroup->addAction(item);
}
QMenuBar::repaint();
}
void Menu::removeActionGroup(const QString& groupName) {
removeMenu(groupName);
}
MenuWrapper::MenuWrapper(ui::Menu& rootMenu, QMenu* menu) : _rootMenu(rootMenu), _realMenu(menu) { MenuWrapper::MenuWrapper(ui::Menu& rootMenu, QMenu* menu) : _rootMenu(rootMenu), _realMenu(menu) {
auto offscreenUi = DependencyManager::get<OffscreenUi>(); auto offscreenUi = DependencyManager::get<OffscreenUi>();
offscreenUi->addMenuInitializer([=](VrMenu* vrMenu) { offscreenUi->addMenuInitializer([=](VrMenu* vrMenu) {

View file

@ -110,9 +110,6 @@ public slots:
void removeSeparator(const QString& menuName, const QString& separatorName); void removeSeparator(const QString& menuName, const QString& separatorName);
void removeMenuItem(const QString& menuName, const QString& menuitem); void removeMenuItem(const QString& menuName, const QString& menuitem);
bool menuItemExists(const QString& menuName, const QString& menuitem); bool menuItemExists(const QString& menuName, const QString& menuitem);
void addActionGroup(const QString& groupName, const QStringList& actionList, const QString& selected = QString(),
QObject* receiver = nullptr, const char* slot = nullptr);
void removeActionGroup(const QString& groupName);
bool isOptionChecked(const QString& menuOption) const; bool isOptionChecked(const QString& menuOption) const;
void setIsOptionChecked(const QString& menuOption, bool isChecked); void setIsOptionChecked(const QString& menuOption, bool isChecked);
@ -125,9 +122,6 @@ public slots:
void toggleDeveloperMenus(); void toggleDeveloperMenus();
void toggleAdvancedMenus(); void toggleAdvancedMenus();
bool isInfoViewVisible(const QString& path);
void closeInfoView(const QString& path);
void triggerOption(const QString& menuOption); void triggerOption(const QString& menuOption);
static bool isSomeSubmenuShown() { return _isSomeSubmenuShown; } static bool isSomeSubmenuShown() { return _isSomeSubmenuShown; }

View file

@ -40,7 +40,6 @@ function updateOverlay(entityID, queryAACube) {
blue: 255 blue: 255
}, },
alpha: 1, alpha: 1,
// borderSize: ...,
solid: false solid: false
}); });
} }

View file

@ -47,22 +47,12 @@
button.clicked.connect(onClicked); button.clicked.connect(onClicked);
tablet.screenChanged.connect(onScreenChanged); tablet.screenChanged.connect(onScreenChanged);
var POLL_RATE = 500;
var interval = Script.setInterval(function () {
var visible = Menu.isInfoViewVisible('InfoView_html/help.html');
if (visible !== enabled) {
enabled = visible;
button.editProperties({isActive: enabled});
}
}, POLL_RATE);
Script.scriptEnding.connect(function () { Script.scriptEnding.connect(function () {
if (onHelpScreen) { if (onHelpScreen) {
tablet.gotoHomeScreen(); tablet.gotoHomeScreen();
} }
button.clicked.disconnect(onClicked); button.clicked.disconnect(onClicked);
tablet.screenChanged.disconnect(onScreenChanged); tablet.screenChanged.disconnect(onScreenChanged);
Script.clearInterval(interval);
if (tablet) { if (tablet) {
tablet.removeButton(button); tablet.removeButton(button);
} }

View file

@ -279,7 +279,7 @@ colpick Color Picker / colpick.com
} }
/*full layout with no submit button*/ /*full layout with no submit button*/
.colpick_full_ns .colpick_submit, .colpick_full_ns .colpick_current_color{ .colpick_full_ns .colpick_submit {
display:none; display:none;
} }
.colpick_full_ns .colpick_new_color { .colpick_full_ns .colpick_new_color {
@ -320,11 +320,11 @@ colpick Color Picker / colpick.com
} }
/*rgbhex layout, no submit button*/ /*rgbhex layout, no submit button*/
.colpick_rgbhex_ns .colpick_submit, .colpick_rgbhex_ns .colpick_current_color{ .colpick_rgbhex_ns .colpick_submit {
display:none; display:none;
} }
.colpick_rgbhex_ns .colpick_new_color{ .colpick_rgbhex_ns .colpick_new_color{
width:68px; width:34px;
border: 1px solid #8f8f8f; border: 1px solid #8f8f8f;
} }
.colpick_rgbhex_ns .colpick_rgb_r { .colpick_rgbhex_ns .colpick_rgb_r {
@ -379,7 +379,7 @@ colpick Color Picker / colpick.com
} }
/*hex layout, no submit button*/ /*hex layout, no submit button*/
.colpick_hex_ns .colpick_submit, .colpick_hex_ns .colpick_current_color { .colpick_hex_ns .colpick_submit {
display:none; display:none;
} }
.colpick_hex_ns .colpick_hex_field { .colpick_hex_ns .colpick_hex_field {

View file

@ -1,14 +1,41 @@
/* /*
colpick Color Picker colpick Color Picker
Copyright 2013 Jose Vargas. Licensed under GPL license. Based on Stefan Petre's Color Picker www.eyecon.ro, dual licensed under the MIT and GPL licenses Copyright 2013 Jose Vargas. Licensed under GPL license. Based on Stefan Petre's Color Picker www.eyecon.ro, dual licensed
under the MIT and GPL licenses
For usage and examples: colpick.com/plugin For usage and examples: colpick.com/plugin
*/ */
/* global console, document, Element, EventBridge, jQuery, navigator, window, _ $ */
(function ($) { (function ($) {
var colpick = function () { var colpick = function () {
var var
tpl = '<div class="colpick"><div class="colpick_color"><div class="colpick_color_overlay1"><div class="colpick_color_overlay2"><div class="colpick_selector_outer"><div class="colpick_selector_inner"></div></div></div></div></div><div class="colpick_hue"><div class="colpick_hue_arrs"><div class="colpick_hue_larr"></div><div class="colpick_hue_rarr"></div></div></div><div class="colpick_new_color"></div><div class="colpick_current_color"></div><div class="colpick_hex_field"><div class="colpick_field_letter">#</div><input type="text" maxlength="6" size="6" /></div><div class="colpick_rgb_r colpick_field"><div class="colpick_field_letter">R</div><input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs"><div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div><div class="colpick_rgb_g colpick_field"><div class="colpick_field_letter">G</div><input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs"><div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div><div class="colpick_rgb_b colpick_field"><div class="colpick_field_letter">B</div><input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs"><div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div><div class="colpick_hsb_h colpick_field"><div class="colpick_field_letter">H</div><input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs"><div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div><div class="colpick_hsb_s colpick_field"><div class="colpick_field_letter">S</div><input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs"><div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div><div class="colpick_hsb_b colpick_field"><div class="colpick_field_letter">B</div><input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs"><div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div><div class="colpick_submit"></div></div>', tpl = '<div class="colpick"><div class="colpick_color"><div class="colpick_color_overlay1">' +
'<div class="colpick_color_overlay2"><div class="colpick_selector_outer"><div class="colpick_selector_inner">' +
'</div></div></div></div></div><div class="colpick_hue"><div class="colpick_hue_arrs">' +
'<div class="colpick_hue_larr"></div><div class="colpick_hue_rarr"></div></div></div>' +
'<div class="colpick_new_color"></div><div class="colpick_current_color"></div>' +
'<div class="colpick_hex_field"><div class="colpick_field_letter">#</div>' +
'<input type="text" maxlength="6" size="6" /></div><div class="colpick_rgb_r colpick_field">' +
'<div class="colpick_field_letter">R</div><input type="text" maxlength="3" size="3" />' +
'<div class="colpick_field_arrs"><div class="colpick_field_uarr"></div>' +
'<div class="colpick_field_darr"></div></div></div><div class="colpick_rgb_g colpick_field">' +
'<div class="colpick_field_letter">G</div><input type="text" maxlength="3" size="3" />' +
'<div class="colpick_field_arrs"><div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div>' +
'</div></div><div class="colpick_rgb_b colpick_field"><div class="colpick_field_letter">B</div>' +
'<input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs">' +
'<div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div>' +
'<div class="colpick_hsb_h colpick_field"><div class="colpick_field_letter">H</div>' +
'<input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs">' +
'<div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div>' +
'<div class="colpick_hsb_s colpick_field"><div class="colpick_field_letter">S</div>' +
'<input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs">' +
'<div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div>' +
'<div class="colpick_hsb_b colpick_field"><div class="colpick_field_letter">B</div>' +
'<input type="text" maxlength="3" size="3" /><div class="colpick_field_arrs">' +
'<div class="colpick_field_uarr"></div><div class="colpick_field_darr"></div></div></div>' +
'<div class="colpick_submit"></div></div>',
defaults = { defaults = {
showEvent: 'click', showEvent: 'click',
onShow: function () {}, onShow: function () {},
@ -52,7 +79,8 @@ For usage and examples: colpick.com/plugin
}, },
// Set the hue selector position // Set the hue selector position
setHue = function (hsb, cal) { setHue = function (hsb, cal) {
$(cal).data('colpick').hue.css('top', parseInt($(cal).data('colpick').height - $(cal).data('colpick').height * hsb.h/360, 10)); $(cal).data('colpick').hue.css('top',
parseInt($(cal).data('colpick').height - $(cal).data('colpick').height * hsb.h / 360, 10));
}, },
// Set current and new colors // Set current and new colors
setCurrentColor = function (hsb, cal) { setCurrentColor = function (hsb, cal) {
@ -91,7 +119,8 @@ For usage and examples: colpick.com/plugin
setSelector(col, cal.get(0)); setSelector(col, cal.get(0));
setHue(col, cal.get(0)); setHue(col, cal.get(0));
setNewColor(col, cal.get(0)); setNewColor(col, cal.get(0));
cal.data('colpick').onChange.apply(cal.parent(), [col, hsbToHex(col), hsbToRgb(col), cal.data('colpick').el, 0]); cal.data('colpick').onChange.apply(cal.parent(),
[col, hsbToHex(col), hsbToRgb(col), cal.data('colpick').el, 0]);
}, },
// Change style on blur and on focus of inputs // Change style on blur and on focus of inputs
blur = function (ev) { blur = function (ev) {
@ -107,7 +136,8 @@ For usage and examples: colpick.com/plugin
var field = $(this).parent().find('input').focus(); var field = $(this).parent().find('input').focus();
var current = { var current = {
el: $(this).parent().addClass('colpick_slider'), el: $(this).parent().addClass('colpick_slider'),
max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255), max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 :
(this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255),
y: ev.pageY, y: ev.pageY,
field: field, field: field,
val: parseInt(field.val(), 10), val: parseInt(field.val(), 10),
@ -140,20 +170,23 @@ For usage and examples: colpick.com/plugin
$(document).on('mouseup touchend',current,upHue); $(document).on('mouseup touchend',current,upHue);
$(document).on('mousemove touchmove',current,moveHue); $(document).on('mousemove touchmove',current,moveHue);
var pageY = ((ev.type == 'touchstart') ? ev.originalEvent.changedTouches[0].pageY : ev.pageY ); var pageY = ((ev.type === 'touchstart') ? ev.originalEvent.changedTouches[0].pageY : ev.pageY );
change.apply( change.apply(
current.cal.data('colpick') current.cal.data('colpick')
.fields.eq(4).val(parseInt(360*(current.cal.data('colpick').height - (pageY - current.y))/current.cal.data('colpick').height, 10)) .fields.eq(4).val(parseInt(360 * (current.cal.data('colpick').height -
(pageY - current.y)) / current.cal.data('colpick').height, 10))
.get(0), .get(0),
[current.cal.data('colpick').livePreview] [current.cal.data('colpick').livePreview]
); );
return false; return false;
}, },
moveHue = function (ev) { moveHue = function (ev) {
var pageY = ((ev.type == 'touchmove') ? ev.originalEvent.changedTouches[0].pageY : ev.pageY ); var pageY = ((ev.type === 'touchmove') ? ev.originalEvent.changedTouches[0].pageY : ev.pageY );
change.apply( change.apply(
ev.data.cal.data('colpick') ev.data.cal.data('colpick')
.fields.eq(4).val(parseInt(360*(ev.data.cal.data('colpick').height - Math.max(0,Math.min(ev.data.cal.data('colpick').height,(pageY - ev.data.y))))/ev.data.cal.data('colpick').height, 10)) .fields.eq(4).val(parseInt(360 * (ev.data.cal.data('colpick').height -
Math.max(0, Math.min(ev.data.cal.data('colpick').height, (pageY - ev.data.y)))) /
ev.data.cal.data('colpick').height, 10))
.get(0), .get(0),
[ev.data.preview] [ev.data.preview]
); );
@ -178,8 +211,8 @@ For usage and examples: colpick.com/plugin
$(document).on('mouseup touchend',current,upSelector); $(document).on('mouseup touchend',current,upSelector);
$(document).on('mousemove touchmove',current,moveSelector); $(document).on('mousemove touchmove',current,moveSelector);
var payeX,pageY; var pageX,pageY;
if(ev.type == 'touchstart') { if (ev.type === 'touchstart') {
pageX = ev.originalEvent.changedTouches[0].pageX, pageX = ev.originalEvent.changedTouches[0].pageX,
pageY = ev.originalEvent.changedTouches[0].pageY; pageY = ev.originalEvent.changedTouches[0].pageY;
} else { } else {
@ -189,7 +222,8 @@ For usage and examples: colpick.com/plugin
change.apply( change.apply(
current.cal.data('colpick').fields current.cal.data('colpick').fields
.eq(6).val(parseInt(100*(current.cal.data('colpick').height - (pageY - current.pos.top))/current.cal.data('colpick').height, 10)).end() .eq(6).val(parseInt(100 * (current.cal.data('colpick').height - (pageY - current.pos.top)) /
current.cal.data('colpick').height, 10)).end()
.eq(5).val(parseInt(100*(pageX - current.pos.left)/current.cal.data('colpick').height, 10)) .eq(5).val(parseInt(100*(pageX - current.pos.left)/current.cal.data('colpick').height, 10))
.get(0), .get(0),
[current.preview] [current.preview]
@ -197,8 +231,8 @@ For usage and examples: colpick.com/plugin
return false; return false;
}, },
moveSelector = function (ev) { moveSelector = function (ev) {
var payeX,pageY; var pageX,pageY;
if(ev.type == 'touchmove') { if (ev.type === 'touchmove') {
pageX = ev.originalEvent.changedTouches[0].pageX, pageX = ev.originalEvent.changedTouches[0].pageX,
pageY = ev.originalEvent.changedTouches[0].pageY; pageY = ev.originalEvent.changedTouches[0].pageY;
} else { } else {
@ -208,8 +242,11 @@ For usage and examples: colpick.com/plugin
change.apply( change.apply(
ev.data.cal.data('colpick').fields ev.data.cal.data('colpick').fields
.eq(6).val(parseInt(100*(ev.data.cal.data('colpick').height - Math.max(0,Math.min(ev.data.cal.data('colpick').height,(pageY - ev.data.pos.top))))/ev.data.cal.data('colpick').height, 10)).end() .eq(6).val(parseInt(100 * (ev.data.cal.data('colpick').height -
.eq(5).val(parseInt(100*(Math.max(0,Math.min(ev.data.cal.data('colpick').height,(pageX - ev.data.pos.left))))/ev.data.cal.data('colpick').height, 10)) Math.max(0, Math.min(ev.data.cal.data('colpick').height, (pageY - ev.data.pos.top)))) /
ev.data.cal.data('colpick').height, 10)).end()
.eq(5).val(parseInt(100 * (Math.max(0, Math.min(ev.data.cal.data('colpick').height,
(pageX - ev.data.pos.left)))) / ev.data.cal.data('colpick').height, 10))
.get(0), .get(0),
[ev.data.preview] [ev.data.preview]
); );
@ -245,21 +282,23 @@ For usage and examples: colpick.com/plugin
left -= calW; left -= calW;
} }
cal.css({left: left + 'px', top: top + 'px'}); cal.css({left: left + 'px', top: top + 'px'});
if (cal.data('colpick').onShow.apply(this, [cal.get(0)]) != false) { if (cal.data('colpick').onShow.apply(this, [cal.get(0)]) !== false) {
cal.show(); cal.show();
} }
// Hide when user clicks outside // Hide when user clicks outside
$('html').mousedown({cal:cal}, hide); $('html').mousedown({cal:cal}, hide);
cal.mousedown(function(ev){ev.stopPropagation();}) cal.mousedown(function(ev){
ev.stopPropagation();
});
}, },
hide = function (ev) { hide = function (ev) {
if (ev.data.cal.data('colpick').onHide.apply(this, [ev.data.cal.get(0)]) != false) { if (ev.data.cal.data('colpick').onHide.apply(this, [ev.data.cal.get(0)]) !== false) {
ev.data.cal.hide(); ev.data.cal.hide();
} }
$('html').off('mousedown', hide); $('html').off('mousedown', hide);
}, },
getViewport = function () { getViewport = function () {
var m = document.compatMode == 'CSS1Compat'; var m = document.compatMode === 'CSS1Compat';
return { return {
l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),
w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth) w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth)
@ -302,16 +341,19 @@ For usage and examples: colpick.com/plugin
setSelector(col, cal.get(0)); setSelector(col, cal.get(0));
setHue(col, cal.get(0)); setHue(col, cal.get(0));
setNewColor(col, cal.get(0)); setNewColor(col, cal.get(0));
// If the user triggered this behavior, then any prior color change should be negated.
cal.data('colpick').onChange.apply(cal.parent(), [col, hsbToHex(col),
hsbToRgb(col), cal.data('colpick').el, 0]);
}; };
return { return {
init: function (opt) { init: function (opt) {
opt = $.extend({}, defaults, opt||{}); opt = $.extend({}, defaults, opt||{});
// Set color // Set color
if (typeof opt.color == 'string') { if (typeof opt.color === 'string') {
opt.color = hexToHsb(opt.color); opt.color = hexToHsb(opt.color);
} else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { } else if (opt.color.r !== undefined && opt.color.g !== undefined && opt.color.b !== undefined) {
opt.color = rgbToHsb(opt.color); opt.color = rgbToHsb(opt.color);
} else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) { } else if (opt.color.h !== undefined && opt.color.s !== undefined && opt.color.b !== undefined) {
opt.color = fixHSB(opt.color); opt.color = fixHSB(opt.color);
} else { } else {
return this; return this;
@ -331,36 +373,48 @@ For usage and examples: colpick.com/plugin
// Add class according to layout // Add class according to layout
cal.addClass('colpick_'+options.layout+(options.submit?'':' colpick_'+options.layout+'_ns')); cal.addClass('colpick_'+options.layout+(options.submit?'':' colpick_'+options.layout+'_ns'));
// Add class if the color scheme is not default // Add class if the color scheme is not default
if(options.colorScheme != 'light') { if (options.colorScheme !== 'light') {
cal.addClass('colpick_'+options.colorScheme); cal.addClass('colpick_'+options.colorScheme);
} }
// Setup submit button // Setup submit button
cal.find('div.colpick_submit').html(options.submitText).click(clickSubmit); cal.find('div.colpick_submit').html(options.submitText).click(clickSubmit);
// Setup input fields // Setup input fields
options.fields = cal.find('input').change(change).blur(blur).focus(focus); options.fields = cal.find('input').change(change).blur(blur).focus(focus);
cal.find('div.colpick_field_arrs').mousedown(downIncrement).end().find('div.colpick_current_color').click(restoreOriginal); cal.find('div.colpick_field_arrs').mousedown(downIncrement);
cal.find('div.colpick_current_color').click(restoreOriginal);
// Setup hue selector // Setup hue selector
options.selector = cal.find('div.colpick_color').on('mousedown touchstart',downSelector); options.selector = cal.find('div.colpick_color').on('mousedown touchstart',downSelector);
options.selectorIndic = options.selector.find('div.colpick_selector_outer'); options.selectorIndic = options.selector.find('div.colpick_selector_outer');
// Store parts of the plugin // Store parts of the plugin
options.el = this; options.el = this;
options.hue = cal.find('div.colpick_hue_arrs'); options.hue = cal.find('div.colpick_hue_arrs');
huebar = options.hue.parent(); var huebar = options.hue.parent();
// Paint the hue bar // Paint the hue bar
var UA = navigator.userAgent.toLowerCase(); var UA = navigator.userAgent.toLowerCase();
var isIE = navigator.appName === 'Microsoft Internet Explorer'; var isIE = navigator.appName === 'Microsoft Internet Explorer';
var IEver = isIE ? parseFloat( UA.match( /msie ([0-9]{1,}[\.0-9]{0,})/ )[1] ) : 0; var IEver = isIE ? parseFloat( UA.match( /msie ([0-9]{1,}[.0-9]{0,})/ )[1] ) : 0;
var ngIE = ( isIE && IEver < 10 ); var ngIE = ( isIE && IEver < 10 );
var stops = ['#ff0000','#ff0080','#ff00ff','#8000ff','#0000ff','#0080ff','#00ffff','#00ff80','#00ff00','#80ff00','#ffff00','#ff8000','#ff0000']; var stops = ['#ff0000', '#ff0080', '#ff00ff', '#8000ff', '#0000ff', '#0080ff', '#00ffff', '#00ff80',
'#00ff00', '#80ff00', '#ffff00', '#ff8000', '#ff0000'];
if (ngIE) { if (ngIE) {
var i, div; var i, div;
for (i=0; i<=11; i++) { for (i=0; i<=11; i++) {
div = $('<div></div>').attr('style','height:8.333333%; filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='+stops[i]+', endColorstr='+stops[i+1]+'); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='+stops[i]+', endColorstr='+stops[i+1]+')";'); div = $('<div></div>').attr('style',
'height:8.333333%; filter:progid:' +
'DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=' + stops[i] +
', endColorstr=' + stops[i + 1] +
'); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=' +
stops[i] + ', endColorstr=' + stops[i + 1] + ')";');
huebar.append(div); huebar.append(div);
} }
} else { } else {
stopList = stops.join(','); var stopList = stops.join(',');
huebar.attr('style','background:-webkit-linear-gradient(top,'+stopList+'); background: -o-linear-gradient(top,'+stopList+'); background: -ms-linear-gradient(top,'+stopList+'); background:-moz-linear-gradient(top,'+stopList+'); -webkit-linear-gradient(top,'+stopList+'); background:linear-gradient(to bottom,'+stopList+'); '); huebar.attr('style', 'background:-webkit-linear-gradient(top,' + stopList +
'); background: -o-linear-gradient(top,' + stopList +
'); background: -ms-linear-gradient(top,' + stopList +
'); background:-moz-linear-gradient(top,' + stopList +
'); -webkit-linear-gradient(top,' + stopList +
'); background:linear-gradient(to bottom,' + stopList + '); ');
} }
cal.find('div.colpick_hue').on('mousedown touchstart',downHue); cal.find('div.colpick_hue').on('mousedown touchstart',downHue);
options.newColor = cal.find('div.colpick_new_color'); options.newColor = cal.find('div.colpick_new_color');
@ -410,11 +464,11 @@ For usage and examples: colpick.com/plugin
// Sets a color as new and current (default) // Sets a color as new and current (default)
setColor: function(col, setCurrent) { setColor: function(col, setCurrent) {
setCurrent = (typeof setCurrent === "undefined") ? 1 : setCurrent; setCurrent = (typeof setCurrent === "undefined") ? 1 : setCurrent;
if (typeof col == 'string') { if (typeof col === 'string') {
col = hexToHsb(col); col = hexToHsb(col);
} else if (col.r != undefined && col.g != undefined && col.b != undefined) { } else if (col.r !== undefined && col.g !== undefined && col.b !== undefined) {
col = rgbToHsb(col); col = rgbToHsb(col);
} else if (col.h != undefined && col.s != undefined && col.b != undefined) { } else if (col.h !== undefined && col.s !== undefined && col.b !== undefined) {
col = fixHSB(col); col = fixHSB(col);
} else { } else {
return this; return this;
@ -431,7 +485,8 @@ For usage and examples: colpick.com/plugin
setSelector(col, cal.get(0)); setSelector(col, cal.get(0));
setNewColor(col, cal.get(0)); setNewColor(col, cal.get(0));
cal.data('colpick').onChange.apply(cal.parent(), [col, hsbToHex(col), hsbToRgb(col), cal.data('colpick').el, 1]); cal.data('colpick').onChange.apply(cal.parent(),
[col, hsbToHex(col), hsbToRgb(col), cal.data('colpick').el, 1]);
if (setCurrent) { if (setCurrent) {
setCurrentColor(col, cal.get(0)); setCurrentColor(col, cal.get(0));
} }
@ -441,12 +496,22 @@ For usage and examples: colpick.com/plugin
}; };
}(); }();
// Color space convertions // Color space convertions
var hexToRgb = function (hex) { var hexToRgb = function (hexString) {
var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); if (typeof hexString !== "string") {
return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; print("Error - ColPick.js::hexToRgb expects string object.");
return;
}
var hexNumber = parseInt(((hexString.indexOf('#') > -1) ? hexString.substring(1) : hexString), 16);
return { r: hexNumber >> 16, g: (hexNumber & 0x00FF00) >> 8, b: (hexNumber & 0x0000FF)};
}; };
var hexToHsb = function (hex) { var hexToHsb = function (hexString) {
return rgbToHsb(hexToRgb(hex)); if (typeof hexString !== "string") {
print("Error - ColPick.js::hexToHsb expects string object.");
return;
}
return rgbToHsb(hexToRgb(hexString));
}; };
var rgbToHsb = function (rgb) { var rgbToHsb = function (rgb) {
var hsb = {h: 0, s: 0, b: 0}; var hsb = {h: 0, s: 0, b: 0};
@ -454,14 +519,22 @@ For usage and examples: colpick.com/plugin
var max = Math.max(rgb.r, rgb.g, rgb.b); var max = Math.max(rgb.r, rgb.g, rgb.b);
var delta = max - min; var delta = max - min;
hsb.b = max; hsb.b = max;
hsb.s = max != 0 ? 255 * delta / max : 0; hsb.s = max != 0 ? 255 * delta / max : 0; // eslint-disable-line eqeqeq
if (hsb.s != 0) { if (hsb.s != 0) { // eslint-disable-line eqeqeq
if (rgb.r == max) hsb.h = (rgb.g - rgb.b) / delta; if (rgb.r == max) { // eslint-disable-line eqeqeq
else if (rgb.g == max) hsb.h = 2 + (rgb.b - rgb.r) / delta; hsb.h = (rgb.g - rgb.b) / delta;
else hsb.h = 4 + (rgb.r - rgb.g) / delta; } else if (rgb.g == max) { // eslint-disable-line eqeqeq
} else hsb.h = -1; hsb.h = 2 + (rgb.b - rgb.r) / delta;
} else {
hsb.h = 4 + (rgb.r - rgb.g) / delta;
}
} else {
hsb.h = -1;
}
hsb.h *= 60; hsb.h *= 60;
if (hsb.h < 0) hsb.h += 360; if (hsb.h < 0) {
hsb.h += 360;
}
hsb.s *= 100/255; hsb.s *= 100/255;
hsb.b *= 100/255; hsb.b *= 100/255;
return hsb; return hsb;
@ -471,20 +544,30 @@ For usage and examples: colpick.com/plugin
var h = hsb.h; var h = hsb.h;
var s = hsb.s*255/100; var s = hsb.s*255/100;
var v = hsb.b*255/100; var v = hsb.b*255/100;
if(s == 0) { if (s == 0) { // eslint-disable-line eqeqeq
rgb.r = rgb.g = rgb.b = v; rgb.r = rgb.g = rgb.b = v;
} else { } else {
var t1 = v; var t1 = v;
var t2 = (255-s)*v/255; var t2 = (255-s)*v/255;
var t3 = (t1-t2)*(h%60)/60; var t3 = (t1-t2)*(h%60)/60;
if(h==360) h = 0; if (h==360) { // eslint-disable-line eqeqeq
if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3} h = 0;
else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3} }
else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3} if (h<60) {
else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3} rgb.r=t1; rgb.b=t2; rgb.g=t2+t3;
else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3} } else if (h<120) {
else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3} rgb.g=t1; rgb.b=t2; rgb.r=t1-t3;
else {rgb.r=0; rgb.g=0; rgb.b=0} } else if (h<180) {
rgb.g=t1; rgb.r=t2; rgb.b=t2+t3;
} else if (h<240) {
rgb.b=t1; rgb.r=t2; rgb.g=t1-t3;
} else if (h<300) {
rgb.b=t1; rgb.g=t2; rgb.r=t2+t3;
} else if (h<360) {
rgb.r=t1; rgb.g=t2; rgb.b=t1-t3;
} else {
rgb.r=0; rgb.g=0; rgb.b=0;
}
} }
return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)}; return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};
}; };
@ -495,7 +578,7 @@ For usage and examples: colpick.com/plugin
rgb.b.toString(16) rgb.b.toString(16)
]; ];
$.each(hex, function (nr, val) { $.each(hex, function (nr, val) {
if (val.length == 1) { if (val.length == 1) { // eslint-disable-line eqeqeq
hex[nr] = '0' + val; hex[nr] = '0' + val;
} }
}); });
@ -521,3 +604,4 @@ For usage and examples: colpick.com/plugin
} }
}); });
})(jQuery); })(jQuery);

View file

@ -31,7 +31,7 @@ var ICON_FOR_TYPE = {
var EDITOR_TIMEOUT_DURATION = 1500; var EDITOR_TIMEOUT_DURATION = 1500;
var KEY_P = 80; // Key code for letter p used for Parenting hotkey. var KEY_P = 80; // Key code for letter p used for Parenting hotkey.
var colorPickers = []; var colorPickers = {};
var lastEntityID = null; var lastEntityID = null;
var MATERIAL_PREFIX_STRING = "mat::"; var MATERIAL_PREFIX_STRING = "mat::";
@ -73,8 +73,8 @@ function enableProperties() {
function disableProperties() { function disableProperties() {
disableChildren(document.getElementById("properties-list"), "input, textarea, checkbox, .dropdown dl, .color-picker"); disableChildren(document.getElementById("properties-list"), "input, textarea, checkbox, .dropdown dl, .color-picker");
disableChildren(document, ".colpick"); disableChildren(document, ".colpick");
for (var i = 0; i < colorPickers.length; i++) { for (var pickKey in colorPickers) {
colorPickers[i].colpickHide(); colorPickers[pickKey].colpickHide();
} }
var elLocked = document.getElementById("property-locked"); var elLocked = document.getElementById("property-locked");
@ -86,7 +86,6 @@ function disableProperties() {
function showElements(els, show) { function showElements(els, show) {
for (var i = 0; i < els.length; i++) { for (var i = 0; i < els.length; i++) {
els[i].style.display = (show) ? 'table' : 'none'; els[i].style.display = (show) ? 'table' : 'none';
} }
} }
@ -1372,13 +1371,19 @@ function loaded() {
elColorRed.addEventListener('change', colorChangeFunction); elColorRed.addEventListener('change', colorChangeFunction);
elColorGreen.addEventListener('change', colorChangeFunction); elColorGreen.addEventListener('change', colorChangeFunction);
elColorBlue.addEventListener('change', colorChangeFunction); elColorBlue.addEventListener('change', colorChangeFunction);
colorPickers.push($('#property-color-control2').colpick({ colorPickers['#property-color-control2'] = $('#property-color-control2').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-color-control2').attr('active', 'true'); $('#property-color-control2').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-color-control2'].colpickSetColor({
"r": elColorRed.value,
"g": elColorGreen.value,
"b": elColorBlue.value});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-color-control2').attr('active', 'false'); $('#property-color-control2').attr('active', 'false');
@ -1387,7 +1392,7 @@ function loaded() {
$(el).css('background-color', '#' + hex); $(el).css('background-color', '#' + hex);
emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b); emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b);
} }
})); });
elLightSpotLight.addEventListener('change', createEmitCheckedPropertyUpdateFunction('isSpotlight')); elLightSpotLight.addEventListener('change', createEmitCheckedPropertyUpdateFunction('isSpotlight'));
@ -1396,13 +1401,20 @@ function loaded() {
elLightColorRed.addEventListener('change', lightColorChangeFunction); elLightColorRed.addEventListener('change', lightColorChangeFunction);
elLightColorGreen.addEventListener('change', lightColorChangeFunction); elLightColorGreen.addEventListener('change', lightColorChangeFunction);
elLightColorBlue.addEventListener('change', lightColorChangeFunction); elLightColorBlue.addEventListener('change', lightColorChangeFunction);
colorPickers.push($('#property-light-color').colpick({ colorPickers['#property-light-color'] = $('#property-light-color').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-light-color').attr('active', 'true'); $('#property-light-color').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-light-color'].colpickSetColor({
"r": elLightColorRed.value,
"g": elLightColorGreen.value,
"b": elLightColorBlue.value
});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-light-color').attr('active', 'false'); $('#property-light-color').attr('active', 'false');
@ -1411,7 +1423,7 @@ function loaded() {
$(el).css('background-color', '#' + hex); $(el).css('background-color', '#' + hex);
emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b); emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b);
} }
})); });
elLightIntensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('intensity', 1)); elLightIntensity.addEventListener('change', createEmitNumberPropertyUpdateFunction('intensity', 1));
elLightFalloffRadius.addEventListener('change', createEmitNumberPropertyUpdateFunction('falloffRadius', 1)); elLightFalloffRadius.addEventListener('change', createEmitNumberPropertyUpdateFunction('falloffRadius', 1));
@ -1477,13 +1489,20 @@ function loaded() {
elTextTextColorRed.addEventListener('change', textTextColorChangeFunction); elTextTextColorRed.addEventListener('change', textTextColorChangeFunction);
elTextTextColorGreen.addEventListener('change', textTextColorChangeFunction); elTextTextColorGreen.addEventListener('change', textTextColorChangeFunction);
elTextTextColorBlue.addEventListener('change', textTextColorChangeFunction); elTextTextColorBlue.addEventListener('change', textTextColorChangeFunction);
colorPickers.push($('#property-text-text-color').colpick({ colorPickers['#property-text-text-color'] = $('#property-text-text-color').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-text-text-color').attr('active', 'true'); $('#property-text-text-color').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-text-text-color'].colpickSetColor({
"r": elTextTextColorRed.value,
"g": elTextTextColorGreen.value,
"b": elTextTextColorBlue.value
});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-text-text-color').attr('active', 'false'); $('#property-text-text-color').attr('active', 'false');
@ -1493,7 +1512,7 @@ function loaded() {
$(el).attr('active', 'false'); $(el).attr('active', 'false');
emitColorPropertyUpdate('textColor', rgb.r, rgb.g, rgb.b); emitColorPropertyUpdate('textColor', rgb.r, rgb.g, rgb.b);
} }
})); });
var textBackgroundColorChangeFunction = createEmitColorPropertyUpdateFunction( var textBackgroundColorChangeFunction = createEmitColorPropertyUpdateFunction(
'backgroundColor', elTextBackgroundColorRed, elTextBackgroundColorGreen, elTextBackgroundColorBlue); 'backgroundColor', elTextBackgroundColorRed, elTextBackgroundColorGreen, elTextBackgroundColorBlue);
@ -1501,13 +1520,20 @@ function loaded() {
elTextBackgroundColorRed.addEventListener('change', textBackgroundColorChangeFunction); elTextBackgroundColorRed.addEventListener('change', textBackgroundColorChangeFunction);
elTextBackgroundColorGreen.addEventListener('change', textBackgroundColorChangeFunction); elTextBackgroundColorGreen.addEventListener('change', textBackgroundColorChangeFunction);
elTextBackgroundColorBlue.addEventListener('change', textBackgroundColorChangeFunction); elTextBackgroundColorBlue.addEventListener('change', textBackgroundColorChangeFunction);
colorPickers.push($('#property-text-background-color').colpick({ colorPickers['#property-text-background-color'] = $('#property-text-background-color').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-text-background-color').attr('active', 'true'); $('#property-text-background-color').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-text-background-color'].colpickSetColor({
"r": elTextBackgroundColorRed.value,
"g": elTextBackgroundColorGreen.value,
"b": elTextBackgroundColorBlue.value
});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-text-background-color').attr('active', 'false'); $('#property-text-background-color').attr('active', 'false');
@ -1516,7 +1542,7 @@ function loaded() {
$(el).css('background-color', '#' + hex); $(el).css('background-color', '#' + hex);
emitColorPropertyUpdate('backgroundColor', rgb.r, rgb.g, rgb.b); emitColorPropertyUpdate('backgroundColor', rgb.r, rgb.g, rgb.b);
} }
})); });
// Key light // Key light
var keyLightModeChanged = createZoneComponentModeChangedFunction('keyLightMode', var keyLightModeChanged = createZoneComponentModeChangedFunction('keyLightMode',
@ -1526,13 +1552,20 @@ function loaded() {
elZoneKeyLightModeDisabled.addEventListener('change', keyLightModeChanged); elZoneKeyLightModeDisabled.addEventListener('change', keyLightModeChanged);
elZoneKeyLightModeEnabled.addEventListener('change', keyLightModeChanged); elZoneKeyLightModeEnabled.addEventListener('change', keyLightModeChanged);
colorPickers.push($('#property-zone-key-light-color').colpick({ colorPickers['#property-zone-key-light-color'] = $('#property-zone-key-light-color').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-zone-key-light-color').attr('active', 'true'); $('#property-zone-key-light-color').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-zone-key-light-color'].colpickSetColor({
"r": elZoneKeyLightColorRed.value,
"g": elZoneKeyLightColorGreen.value,
"b": elZoneKeyLightColorBlue.value
});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-zone-key-light-color').attr('active', 'false'); $('#property-zone-key-light-color').attr('active', 'false');
@ -1541,7 +1574,7 @@ function loaded() {
$(el).css('background-color', '#' + hex); $(el).css('background-color', '#' + hex);
emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b, 'keyLight'); emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b, 'keyLight');
} }
})); });
var zoneKeyLightColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('keyLight', 'color', var zoneKeyLightColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('keyLight', 'color',
elZoneKeyLightColorRed, elZoneKeyLightColorGreen, elZoneKeyLightColorBlue); elZoneKeyLightColorRed, elZoneKeyLightColorGreen, elZoneKeyLightColorBlue);
@ -1595,13 +1628,20 @@ function loaded() {
elZoneHazeRange.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('haze', 'hazeRange')); elZoneHazeRange.addEventListener('change', createEmitGroupNumberPropertyUpdateFunction('haze', 'hazeRange'));
colorPickers.push($('#property-zone-haze-color').colpick({ colorPickers['#property-zone-haze-color'] = $('#property-zone-haze-color').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-zone-haze-color').attr('active', 'true'); $('#property-zone-haze-color').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-zone-haze-color'].colpickSetColor({
"r": elZoneHazeColorRed.value,
"g": elZoneHazeColorGreen.value,
"b": elZoneHazeColorBlue.value
});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-zone-haze-color').attr('active', 'false'); $('#property-zone-haze-color').attr('active', 'false');
@ -1610,7 +1650,7 @@ function loaded() {
$(el).css('background-color', '#' + hex); $(el).css('background-color', '#' + hex);
emitColorPropertyUpdate('hazeColor', rgb.r, rgb.g, rgb.b, 'haze'); emitColorPropertyUpdate('hazeColor', rgb.r, rgb.g, rgb.b, 'haze');
} }
})); });
var zoneHazeColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('haze', 'hazeColor', var zoneHazeColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('haze', 'hazeColor',
elZoneHazeColorRed, elZoneHazeColorRed,
elZoneHazeColorGreen, elZoneHazeColorGreen,
@ -1620,13 +1660,20 @@ function loaded() {
elZoneHazeColorGreen.addEventListener('change', zoneHazeColorChangeFunction); elZoneHazeColorGreen.addEventListener('change', zoneHazeColorChangeFunction);
elZoneHazeColorBlue.addEventListener('change', zoneHazeColorChangeFunction); elZoneHazeColorBlue.addEventListener('change', zoneHazeColorChangeFunction);
colorPickers.push($('#property-zone-haze-glare-color').colpick({ colorPickers['#property-zone-haze-glare-color'] = $('#property-zone-haze-glare-color').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-zone-haze-glare-color').attr('active', 'true'); $('#property-zone-haze-glare-color').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-zone-haze-glare-color'].colpickSetColor({
"r": elZoneHazeGlareColorRed.value,
"g": elZoneHazeGlareColorGreen.value,
"b": elZoneHazeGlareColorBlue.value
});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-zone-haze-glare-color').attr('active', 'false'); $('#property-zone-haze-glare-color').attr('active', 'false');
@ -1635,7 +1682,7 @@ function loaded() {
$(el).css('background-color', '#' + hex); $(el).css('background-color', '#' + hex);
emitColorPropertyUpdate('hazeGlareColor', rgb.r, rgb.g, rgb.b, 'haze'); emitColorPropertyUpdate('hazeGlareColor', rgb.r, rgb.g, rgb.b, 'haze');
} }
})); });
var zoneHazeGlareColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('haze', 'hazeGlareColor', var zoneHazeGlareColorChangeFunction = createEmitGroupColorPropertyUpdateFunction('haze', 'hazeGlareColor',
elZoneHazeGlareColorRed, elZoneHazeGlareColorRed,
elZoneHazeGlareColorGreen, elZoneHazeGlareColorGreen,
@ -1662,13 +1709,20 @@ function loaded() {
elZoneSkyboxColorRed.addEventListener('change', zoneSkyboxColorChangeFunction); elZoneSkyboxColorRed.addEventListener('change', zoneSkyboxColorChangeFunction);
elZoneSkyboxColorGreen.addEventListener('change', zoneSkyboxColorChangeFunction); elZoneSkyboxColorGreen.addEventListener('change', zoneSkyboxColorChangeFunction);
elZoneSkyboxColorBlue.addEventListener('change', zoneSkyboxColorChangeFunction); elZoneSkyboxColorBlue.addEventListener('change', zoneSkyboxColorChangeFunction);
colorPickers.push($('#property-zone-skybox-color').colpick({ colorPickers['#property-zone-skybox-color'] = $('#property-zone-skybox-color').colpick({
colorScheme: 'dark', colorScheme: 'dark',
layout: 'hex', layout: 'hex',
color: '000000', color: '000000',
submit: false, // We don't want to have a submission button submit: false, // We don't want to have a submission button
onShow: function(colpick) { onShow: function(colpick) {
$('#property-zone-skybox-color').attr('active', 'true'); $('#property-zone-skybox-color').attr('active', 'true');
// The original color preview within the picker needs to be updated on show because
// prior to the picker being shown we don't have access to the selections' starting color.
colorPickers['#property-zone-skybox-color'].colpickSetColor({
"r": elZoneSkyboxColorRed.value,
"g": elZoneSkyboxColorGreen.value,
"b": elZoneSkyboxColorBlue.value
});
}, },
onHide: function(colpick) { onHide: function(colpick) {
$('#property-zone-skybox-color').attr('active', 'false'); $('#property-zone-skybox-color').attr('active', 'false');
@ -1677,7 +1731,7 @@ function loaded() {
$(el).css('background-color', '#' + hex); $(el).css('background-color', '#' + hex);
emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b, 'skybox'); emitColorPropertyUpdate('color', rgb.r, rgb.g, rgb.b, 'skybox');
} }
})); });
elZoneSkyboxURL.addEventListener('change', createEmitGroupTextPropertyUpdateFunction('skybox', 'url')); elZoneSkyboxURL.addEventListener('change', createEmitGroupTextPropertyUpdateFunction('skybox', 'url'));

View file

@ -306,10 +306,6 @@ WebTablet.prototype.setScriptURL = function (scriptURL) {
Overlays.editOverlay(this.webOverlayID, { scriptURL: scriptURL }); Overlays.editOverlay(this.webOverlayID, { scriptURL: scriptURL });
}; };
WebTablet.prototype.getOverlayObject = function () {
return Overlays.getOverlayObject(this.webOverlayID);
};
WebTablet.prototype.setWidth = function (width) { WebTablet.prototype.setWidth = function (width) {
// imported from libraries/utils.js // imported from libraries/utils.js
resizeTablet(width); resizeTablet(width);

View file

@ -252,16 +252,17 @@ function onFinishOnOpenClicked() {
} }
function signalBodyLoaded() { function signalBodyLoaded() {
var EVENTBRIDGE_OPEN_DELAY = 500; // Delay required to ensure EventBridge is ready for use.
setTimeout(function () {
EventBridge.scriptEventReceived.connect(onScriptEventReceived);
EventBridge.emitWebEvent(JSON.stringify({ EventBridge.emitWebEvent(JSON.stringify({
type: EVENT_BRIDGE_TYPE, type: EVENT_BRIDGE_TYPE,
action: BODY_LOADED_ACTION action: BODY_LOADED_ACTION
})); }));
}, EVENTBRIDGE_OPEN_DELAY);
} }
function onBodyLoaded() { function onBodyLoaded() {
EventBridge.scriptEventReceived.connect(onScriptEventReceived);
elRecordings = document.getElementById("recordings"); elRecordings = document.getElementById("recordings");
elRecordingsTable = document.getElementById("recordings-table"); elRecordingsTable = document.getElementById("recordings-table");

View file

@ -139,7 +139,8 @@
} }
function setMappingCallback(status) { function setMappingCallback(status) {
if (status !== "") { // FIXME: "" is for RC <= 63, null is for RC > 63. Remove the former when RC63 is no longer used.
if (status !== null && status !== "") {
error("Error mapping recording to " + mappingPath + " on Asset Server!", status); error("Error mapping recording to " + mappingPath + " on Asset Server!", status);
return; return;
} }