From 31ed378dbf02b267ef21e4d78a42a395380d768e Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 10 Aug 2016 15:08:44 -0700 Subject: [PATCH] Added dpi entity property for web-entities --- .../entities/src/EntityItemProperties.cpp | 14 ++++++++ libraries/entities/src/EntityItemProperties.h | 2 ++ .../src/EntityItemPropertiesDefaults.h | 2 ++ libraries/entities/src/EntityPropertyFlags.h | 1 + libraries/entities/src/WebEntityItem.cpp | 36 ++++++++----------- libraries/entities/src/WebEntityItem.h | 7 +++- .../networking/src/udt/PacketHeaders.cpp | 2 +- libraries/networking/src/udt/PacketHeaders.h | 1 + scripts/system/libraries/WebBuddy.js | 4 +-- 9 files changed, 43 insertions(+), 26 deletions(-) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index b3d810c0eb..06c91b4f32 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -335,6 +335,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const { CHECK_PROPERTY_CHANGE(PROP_OWNING_AVATAR_ID, owningAvatarID); CHECK_PROPERTY_CHANGE(PROP_SHAPE, shape); + CHECK_PROPERTY_CHANGE(PROP_DPI, dpi); changedProperties += _animation.getChangedProperties(); changedProperties += _keyLight.getChangedProperties(); @@ -504,6 +505,7 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine, bool // Web only if (_type == EntityTypes::Web) { COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SOURCE_URL, sourceUrl); + COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_DPI, dpi); } // PolyVoxel only @@ -726,6 +728,8 @@ void EntityItemProperties::copyFromScriptValue(const QScriptValue& object, bool COPY_PROPERTY_FROM_QSCRIPTVALUE(clientOnly, bool, setClientOnly); COPY_PROPERTY_FROM_QSCRIPTVALUE(owningAvatarID, QUuid, setOwningAvatarID); + COPY_PROPERTY_FROM_QSCRIPTVALUE(dpi, uint16_t, setDPI); + _lastEdited = usecTimestampNow(); } @@ -903,6 +907,8 @@ void EntityItemProperties::entityPropertyFlagsFromScriptValue(const QScriptValue ADD_PROPERTY_TO_MAP(PROP_FLYING_ALLOWED, FlyingAllowed, flyingAllowed, bool); ADD_PROPERTY_TO_MAP(PROP_GHOSTING_ALLOWED, GhostingAllowed, ghostingAllowed, bool); + ADD_PROPERTY_TO_MAP(PROP_DPI, DPI, dpi, uint16_t); + // FIXME - these are not yet handled //ADD_PROPERTY_TO_MAP(PROP_CREATED, Created, created, quint64); @@ -1065,6 +1071,7 @@ bool EntityItemProperties::encodeEntityEditPacket(PacketType command, EntityItem if (properties.getType() == EntityTypes::Web) { APPEND_ENTITY_PROPERTY(PROP_SOURCE_URL, properties.getSourceUrl()); + APPEND_ENTITY_PROPERTY(PROP_DPI, properties.getDPI()); } if (properties.getType() == EntityTypes::Text) { @@ -1364,6 +1371,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int if (properties.getType() == EntityTypes::Web) { READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SOURCE_URL, QString, setSourceUrl); + READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_DPI, uint16_t, setDPI); } if (properties.getType() == EntityTypes::Text) { @@ -1642,6 +1650,8 @@ void EntityItemProperties::markAllChanged() { _clientOnlyChanged = true; _owningAvatarIDChanged = true; + + _dpiChanged = true; } // The minimum bounding box for the entity. @@ -1977,6 +1987,10 @@ QList EntityItemProperties::listChangedProperties() { out += "ghostingAllowed"; } + if (dpiChanged()) { + out += "dpi"; + } + if (shapeChanged()) { out += "shape"; } diff --git a/libraries/entities/src/EntityItemProperties.h b/libraries/entities/src/EntityItemProperties.h index 22d740e0dd..4591dabc51 100644 --- a/libraries/entities/src/EntityItemProperties.h +++ b/libraries/entities/src/EntityItemProperties.h @@ -215,6 +215,8 @@ public: DEFINE_PROPERTY(PROP_CLIENT_ONLY, ClientOnly, clientOnly, bool, false); DEFINE_PROPERTY_REF(PROP_OWNING_AVATAR_ID, OwningAvatarID, owningAvatarID, QUuid, UNKNOWN_ENTITY_ID); + DEFINE_PROPERTY_REF(PROP_DPI, DPI, dpi, uint16_t, ENTITY_ITEM_DEFAULT_DPI); + static QString getBackgroundModeString(BackgroundMode mode); diff --git a/libraries/entities/src/EntityItemPropertiesDefaults.h b/libraries/entities/src/EntityItemPropertiesDefaults.h index 4ec0bea7df..3ab827a222 100644 --- a/libraries/entities/src/EntityItemPropertiesDefaults.h +++ b/libraries/entities/src/EntityItemPropertiesDefaults.h @@ -73,4 +73,6 @@ const bool ENTITY_ITEM_DEFAULT_BILLBOARDED = false; const QString ENTITY_ITEM_DEFAULT_NAME = QString(""); +const uint16_t ENTITY_ITEM_DEFAULT_DPI = 30; + #endif // hifi_EntityItemPropertiesDefaults_h diff --git a/libraries/entities/src/EntityPropertyFlags.h b/libraries/entities/src/EntityPropertyFlags.h index 0baef0fa25..e09db1e867 100644 --- a/libraries/entities/src/EntityPropertyFlags.h +++ b/libraries/entities/src/EntityPropertyFlags.h @@ -176,6 +176,7 @@ enum EntityPropertyList { PROP_OWNING_AVATAR_ID, // doesn't go over wire PROP_SHAPE, + PROP_DPI, PROP_LOCAL_VELOCITY, // only used to convert values to and from scripts PROP_LOCAL_ANGULAR_VELOCITY, // only used to convert values to and from scripts diff --git a/libraries/entities/src/WebEntityItem.cpp b/libraries/entities/src/WebEntityItem.cpp index c97eedc56a..1a8bf074d2 100644 --- a/libraries/entities/src/WebEntityItem.cpp +++ b/libraries/entities/src/WebEntityItem.cpp @@ -21,26 +21,8 @@ #include "EntityTree.h" #include "EntityTreeElement.h" -const float DEFAULT_DPI = 30.47f; - const QString WebEntityItem::DEFAULT_SOURCE_URL("http://www.google.com"); -static float parseDPIFromUserData(QString str) { - QJsonParseError error; - auto doc = QJsonDocument::fromJson(str.toUtf8(), &error); - if (error.error != QJsonParseError::NoError) { - return DEFAULT_DPI; - } - QJsonObject obj = doc.object(); - - QJsonValue dpiValue = obj.value("dpi"); - if (!dpiValue.isDouble()) { - return DEFAULT_DPI; - } - double dpi = dpiValue.toDouble(); - return (float)dpi; -} - EntityItemPointer WebEntityItem::factory(const EntityItemID& entityID, const EntityItemProperties& properties) { EntityItemPointer entity { new WebEntityItem(entityID) }; entity->setProperties(properties); @@ -49,7 +31,7 @@ EntityItemPointer WebEntityItem::factory(const EntityItemID& entityID, const Ent WebEntityItem::WebEntityItem(const EntityItemID& entityItemID) : EntityItem(entityItemID) { _type = EntityTypes::Web; - _dpi = DEFAULT_DPI; + _dpi = ENTITY_ITEM_DEFAULT_DPI; } const float WEB_ENTITY_ITEM_FIXED_DEPTH = 0.01f; @@ -62,6 +44,7 @@ void WebEntityItem::setDimensions(const glm::vec3& value) { EntityItemProperties WebEntityItem::getProperties(EntityPropertyFlags desiredProperties) const { EntityItemProperties properties = EntityItem::getProperties(desiredProperties); // get the properties from our base class COPY_ENTITY_PROPERTY_TO_PROPERTIES(sourceUrl, getSourceUrl); + COPY_ENTITY_PROPERTY_TO_PROPERTIES(dpi, getDPI); return properties; } @@ -70,6 +53,7 @@ bool WebEntityItem::setProperties(const EntityItemProperties& properties) { somethingChanged = EntityItem::setProperties(properties); // set the properties in our base class SET_ENTITY_PROPERTY_FROM_PROPERTIES(sourceUrl, setSourceUrl); + SET_ENTITY_PROPERTY_FROM_PROPERTIES(dpi, setDPI); if (somethingChanged) { bool wantDebug = false; @@ -82,9 +66,6 @@ bool WebEntityItem::setProperties(const EntityItemProperties& properties) { setLastEdited(properties._lastEdited); } - // AJT: TODO MAKE THIS A REAL PROPERTY - _dpi = parseDPIFromUserData(getUserData()); - return somethingChanged; } @@ -97,6 +78,7 @@ int WebEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, i const unsigned char* dataAt = data; READ_ENTITY_PROPERTY(PROP_SOURCE_URL, QString, setSourceUrl); + READ_ENTITY_PROPERTY(PROP_DPI, uint16_t, setDPI); return bytesRead; } @@ -106,6 +88,7 @@ int WebEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, i EntityPropertyFlags WebEntityItem::getEntityProperties(EncodeBitstreamParams& params) const { EntityPropertyFlags requestedProperties = EntityItem::getEntityProperties(params); requestedProperties += PROP_SOURCE_URL; + requestedProperties += PROP_DPI; return requestedProperties; } @@ -119,6 +102,7 @@ void WebEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBitst bool successPropertyFits = true; APPEND_ENTITY_PROPERTY(PROP_SOURCE_URL, _sourceUrl); + APPEND_ENTITY_PROPERTY(PROP_DPI, _dpi); } bool WebEntityItem::findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, @@ -146,3 +130,11 @@ void WebEntityItem::setSourceUrl(const QString& value) { } const QString& WebEntityItem::getSourceUrl() const { return _sourceUrl; } + +void WebEntityItem::setDPI(uint16_t value) { + _dpi = value; +} + +uint16_t WebEntityItem::getDPI() const { + return _dpi; +} diff --git a/libraries/entities/src/WebEntityItem.h b/libraries/entities/src/WebEntityItem.h index 2179f34e36..5a8097a9f1 100644 --- a/libraries/entities/src/WebEntityItem.h +++ b/libraries/entities/src/WebEntityItem.h @@ -54,9 +54,14 @@ public: virtual void setSourceUrl(const QString& value); const QString& getSourceUrl() const; + virtual bool wantsHandControllerPointerEvents() const override { return true; } + + void setDPI(uint16_t value); + uint16_t getDPI() const; + protected: QString _sourceUrl; - float _dpi; + uint16_t _dpi; }; #endif // hifi_WebEntityItem_h diff --git a/libraries/networking/src/udt/PacketHeaders.cpp b/libraries/networking/src/udt/PacketHeaders.cpp index e9d61a827a..217c2ca3fb 100644 --- a/libraries/networking/src/udt/PacketHeaders.cpp +++ b/libraries/networking/src/udt/PacketHeaders.cpp @@ -47,7 +47,7 @@ PacketVersion versionForPacketType(PacketType packetType) { case PacketType::EntityAdd: case PacketType::EntityEdit: case PacketType::EntityData: - return VERSION_MODEL_ENTITIES_SUPPORT_SIMPLE_HULLS; + return VERSION_WEB_ENTITIES_SUPPORT_DPI; case PacketType::AvatarIdentity: case PacketType::AvatarData: case PacketType::BulkAvatarData: diff --git a/libraries/networking/src/udt/PacketHeaders.h b/libraries/networking/src/udt/PacketHeaders.h index 40524e2288..54fdfb84c7 100644 --- a/libraries/networking/src/udt/PacketHeaders.h +++ b/libraries/networking/src/udt/PacketHeaders.h @@ -186,6 +186,7 @@ const PacketVersion VERSION_ENTITIES_MORE_SHAPES = 59; const PacketVersion VERSION_ENTITIES_PROPERLY_ENCODE_SHAPE_EDITS = 60; const PacketVersion VERSION_MODEL_ENTITIES_SUPPORT_STATIC_MESH = 61; const PacketVersion VERSION_MODEL_ENTITIES_SUPPORT_SIMPLE_HULLS = 62; +const PacketVersion VERSION_WEB_ENTITIES_SUPPORT_DPI = 63; enum class AvatarMixerPacketVersion : PacketVersion { TranslationSupport = 17, diff --git a/scripts/system/libraries/WebBuddy.js b/scripts/system/libraries/WebBuddy.js index 33b6c74c93..3525a3d726 100644 --- a/scripts/system/libraries/WebBuddy.js +++ b/scripts/system/libraries/WebBuddy.js @@ -34,10 +34,10 @@ WebBuddy = function (url) { shapeType: "box", userData: JSON.stringify({ "grabbableKey": {"grabbable": true}, - "dpi": 75 }), parentID: MyAvatar.sessionUUID, - parentJointIndex: NEGATIVE_ONE + parentJointIndex: NEGATIVE_ONE, + dpi: 45 }); this.state = "idle";