web entity wantsKeyboardFocus property

This commit is contained in:
HifiExperiments 2024-02-15 11:54:49 -08:00
parent eebeca515e
commit dc32e5c0a3
10 changed files with 50 additions and 4 deletions

View file

@ -171,6 +171,7 @@ void WebEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& scene
_dpi = entity->getDPI();
_color = entity->getColor();
_alpha = entity->getAlpha();
_wantsKeyboardFocus = entity->wantsKeyboardFocus();
_pulseProperties = entity->getPulseProperties();
if (_contentType == ContentType::NoContent) {

View file

@ -67,7 +67,7 @@ protected:
virtual bool isTransparent() const override;
virtual bool wantsHandControllerPointerEvents() const override { return true; }
virtual bool wantsKeyboardFocus() const override { return true; }
virtual bool wantsKeyboardFocus() const override { return _wantsKeyboardFocus; }
void handlePointerEventAsTouch(const PointerEvent& event);
void handlePointerEventAsMouse(const PointerEvent& event);
@ -103,6 +103,7 @@ private:
bool _useBackground { false };
QString _userAgent;
WebInputMode _inputMode { WebInputMode::TOUCH };
bool _wantsKeyboardFocus { true };
glm::vec3 _contextPosition;

View file

@ -644,6 +644,7 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
CHECK_PROPERTY_CHANGE(PROP_SCRIPT_URL, scriptURL);
CHECK_PROPERTY_CHANGE(PROP_MAX_FPS, maxFPS);
CHECK_PROPERTY_CHANGE(PROP_INPUT_MODE, inputMode);
CHECK_PROPERTY_CHANGE(PROP_WANTS_KEYBOARD_FOCUS, wantsKeyboardFocus);
CHECK_PROPERTY_CHANGE(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, showKeyboardFocusHighlight);
CHECK_PROPERTY_CHANGE(PROP_WEB_USE_BACKGROUND, useBackground);
CHECK_PROPERTY_CHANGE(PROP_USER_AGENT, userAgent);
@ -1423,6 +1424,8 @@ EntityPropertyFlags EntityItemProperties::getChangedProperties() const {
* @property {string} scriptURL="" - The URL of a JavaScript file to inject into the web page.
* @property {number} maxFPS=10 - The maximum update rate for the web content, in frames/second.
* @property {WebInputMode} inputMode="touch" - The user input mode to use.
* @property {boolean} wantsKeyboardFocus=true - <code>true</code> if the entity should capture keyboard focus, <code>false</code> if it
* shouldn't.
* @property {boolean} showKeyboardFocusHighlight=true - <code>true</code> if the entity is highlighted when it has keyboard
* focus, <code>false</code> if it isn't.
* @property {boolean} useBackground=true - <code>true</code> if the web entity should have a background,
@ -1857,6 +1860,7 @@ ScriptValue EntityItemProperties::copyToScriptValue(ScriptEngine* engine, bool s
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SCRIPT_URL, scriptURL);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_MAX_FPS, maxFPS);
COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(PROP_INPUT_MODE, inputMode, getInputModeAsString());
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_WANTS_KEYBOARD_FOCUS, wantsKeyboardFocus);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, showKeyboardFocusHighlight);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_WEB_USE_BACKGROUND, useBackground);
COPY_PROPERTY_TO_QSCRIPTVALUE(PROP_USER_AGENT, userAgent);
@ -2238,6 +2242,7 @@ void EntityItemProperties::copyFromScriptValue(const ScriptValue& object, bool h
COPY_PROPERTY_FROM_QSCRIPTVALUE(scriptURL, QString, setScriptURL);
COPY_PROPERTY_FROM_QSCRIPTVALUE(maxFPS, uint8_t, setMaxFPS);
COPY_PROPERTY_FROM_QSCRIPTVALUE_ENUM(inputMode, InputMode);
COPY_PROPERTY_FROM_QSCRIPTVALUE(wantsKeyboardFocus, bool, setWantsKeyboardFocus);
COPY_PROPERTY_FROM_QSCRIPTVALUE(showKeyboardFocusHighlight, bool, setShowKeyboardFocusHighlight);
COPY_PROPERTY_FROM_QSCRIPTVALUE(useBackground, bool, setUseBackground);
COPY_PROPERTY_FROM_QSCRIPTVALUE(userAgent, QString, setUserAgent);
@ -2522,6 +2527,7 @@ void EntityItemProperties::merge(const EntityItemProperties& other) {
COPY_PROPERTY_IF_CHANGED(scriptURL);
COPY_PROPERTY_IF_CHANGED(maxFPS);
COPY_PROPERTY_IF_CHANGED(inputMode);
COPY_PROPERTY_IF_CHANGED(wantsKeyboardFocus);
COPY_PROPERTY_IF_CHANGED(showKeyboardFocusHighlight);
COPY_PROPERTY_IF_CHANGED(useBackground);
COPY_PROPERTY_IF_CHANGED(userAgent);
@ -2917,6 +2923,7 @@ bool EntityItemProperties::getPropertyInfo(const QString& propertyName, EntityPr
ADD_PROPERTY_TO_MAP(PROP_SCRIPT_URL, ScriptURL, scriptURL, QString);
ADD_PROPERTY_TO_MAP(PROP_MAX_FPS, MaxFPS, maxFPS, uint8_t);
ADD_PROPERTY_TO_MAP(PROP_INPUT_MODE, InputMode, inputMode, WebInputMode);
ADD_PROPERTY_TO_MAP(PROP_WANTS_KEYBOARD_FOCUS, WantsKeyboardFocus, wantsKeyboardFocus, bool);
ADD_PROPERTY_TO_MAP(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, ShowKeyboardFocusHighlight, showKeyboardFocusHighlight, bool);
ADD_PROPERTY_TO_MAP(PROP_WEB_USE_BACKGROUND, useBackground, useBackground, bool);
ADD_PROPERTY_TO_MAP(PROP_USER_AGENT, UserAgent, userAgent, QString);
@ -3340,6 +3347,7 @@ OctreeElement::AppendState EntityItemProperties::encodeEntityEditPacket(PacketTy
APPEND_ENTITY_PROPERTY(PROP_SCRIPT_URL, properties.getScriptURL());
APPEND_ENTITY_PROPERTY(PROP_MAX_FPS, properties.getMaxFPS());
APPEND_ENTITY_PROPERTY(PROP_INPUT_MODE, (uint32_t)properties.getInputMode());
APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, properties.getWantsKeyboardFocus());
APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, properties.getShowKeyboardFocusHighlight());
APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, properties.getUseBackground());
APPEND_ENTITY_PROPERTY(PROP_USER_AGENT, properties.getUserAgent());
@ -3806,6 +3814,7 @@ bool EntityItemProperties::decodeEntityEditPacket(const unsigned char* data, int
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SCRIPT_URL, QString, setScriptURL);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_MAX_FPS, uint8_t, setMaxFPS);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_INPUT_MODE, WebInputMode, setInputMode);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_WANTS_KEYBOARD_FOCUS, bool, setWantsKeyboardFocus);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, bool, setShowKeyboardFocusHighlight);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_WEB_USE_BACKGROUND, bool, setUseBackground);
READ_ENTITY_PROPERTY_TO_PROPERTIES(PROP_USER_AGENT, QString, setUserAgent);
@ -4169,6 +4178,7 @@ void EntityItemProperties::markAllChanged() {
_scriptURLChanged = true;
_maxFPSChanged = true;
_inputModeChanged = true;
_wantsKeyboardFocusChanged = true;
_showKeyboardFocusHighlightChanged = true;
_useBackgroundChanged = true;
_userAgentChanged = true;
@ -4836,6 +4846,9 @@ QList<QString> EntityItemProperties::listChangedProperties() {
if (faceCameraChanged()) {
out += "faceCamera";
}
if (wantsKeyboardFocusChanged()) {
out += "wantsKeyboardFocus";
}
if (showKeyboardFocusHighlightChanged()) {
out += "showKeyboardFocusHighlight";
}

View file

@ -362,6 +362,7 @@ public:
DEFINE_PROPERTY_REF(PROP_SCRIPT_URL, ScriptURL, scriptURL, QString, "");
DEFINE_PROPERTY_REF(PROP_MAX_FPS, MaxFPS, maxFPS, uint8_t, WebEntityItem::DEFAULT_MAX_FPS);
DEFINE_PROPERTY_REF_ENUM(PROP_INPUT_MODE, InputMode, inputMode, WebInputMode, WebInputMode::TOUCH);
DEFINE_PROPERTY_REF(PROP_WANTS_KEYBOARD_FOCUS, WantsKeyboardFocus, wantsKeyboardFocus, bool, true);
DEFINE_PROPERTY_REF(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, ShowKeyboardFocusHighlight, showKeyboardFocusHighlight, bool, true);
DEFINE_PROPERTY_REF(PROP_WEB_USE_BACKGROUND, UseBackground, useBackground, bool, true);
DEFINE_PROPERTY_REF(PROP_USER_AGENT, UserAgent, userAgent, QString, WebEntityItem::DEFAULT_USER_AGENT);

View file

@ -322,9 +322,10 @@ enum EntityPropertyList {
PROP_SCRIPT_URL = PROP_DERIVED_2,
PROP_MAX_FPS = PROP_DERIVED_3,
PROP_INPUT_MODE = PROP_DERIVED_4,
PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT = PROP_DERIVED_5,
PROP_WEB_USE_BACKGROUND = PROP_DERIVED_6,
PROP_USER_AGENT = PROP_DERIVED_7,
PROP_WANTS_KEYBOARD_FOCUS = PROP_DERIVED_5,
PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT = PROP_DERIVED_6,
PROP_WEB_USE_BACKGROUND = PROP_DERIVED_7,
PROP_USER_AGENT = PROP_DERIVED_8,
// Polyline
PROP_LINE_POINTS = PROP_DERIVED_0,

View file

@ -61,6 +61,7 @@ EntityItemProperties WebEntityItem::getProperties(const EntityPropertyFlags& des
COPY_ENTITY_PROPERTY_TO_PROPERTIES(scriptURL, getScriptURL);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(maxFPS, getMaxFPS);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(inputMode, getInputMode);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(wantsKeyboardFocus, wantsKeyboardFocus);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(showKeyboardFocusHighlight, getShowKeyboardFocusHighlight);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(useBackground, getUseBackground);
COPY_ENTITY_PROPERTY_TO_PROPERTIES(userAgent, getUserAgent);
@ -83,6 +84,7 @@ bool WebEntityItem::setSubClassProperties(const EntityItemProperties& properties
SET_ENTITY_PROPERTY_FROM_PROPERTIES(scriptURL, setScriptURL);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(maxFPS, setMaxFPS);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(inputMode, setInputMode);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(wantsKeyboardFocus, setWantsKeyboardFocus);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(showKeyboardFocusHighlight, setShowKeyboardFocusHighlight);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(useBackground, setUseBackground);
SET_ENTITY_PROPERTY_FROM_PROPERTIES(userAgent, setUserAgent);
@ -113,6 +115,7 @@ int WebEntityItem::readEntitySubclassDataFromBuffer(const unsigned char* data, i
READ_ENTITY_PROPERTY(PROP_SCRIPT_URL, QString, setScriptURL);
READ_ENTITY_PROPERTY(PROP_MAX_FPS, uint8_t, setMaxFPS);
READ_ENTITY_PROPERTY(PROP_INPUT_MODE, WebInputMode, setInputMode);
READ_ENTITY_PROPERTY(PROP_WANTS_KEYBOARD_FOCUS, bool, setWantsKeyboardFocus);
READ_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, bool, setShowKeyboardFocusHighlight);
READ_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, bool, setUseBackground);
READ_ENTITY_PROPERTY(PROP_USER_AGENT, QString, setUserAgent);
@ -131,6 +134,7 @@ EntityPropertyFlags WebEntityItem::getEntityProperties(EncodeBitstreamParams& pa
requestedProperties += PROP_SCRIPT_URL;
requestedProperties += PROP_MAX_FPS;
requestedProperties += PROP_INPUT_MODE;
requestedProperties += PROP_WANTS_KEYBOARD_FOCUS;
requestedProperties += PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT;
requestedProperties += PROP_WEB_USE_BACKGROUND;
requestedProperties += PROP_USER_AGENT;
@ -158,6 +162,7 @@ void WebEntityItem::appendSubclassData(OctreePacketData* packetData, EncodeBitst
APPEND_ENTITY_PROPERTY(PROP_SCRIPT_URL, getScriptURL());
APPEND_ENTITY_PROPERTY(PROP_MAX_FPS, getMaxFPS());
APPEND_ENTITY_PROPERTY(PROP_INPUT_MODE, (uint32_t)getInputMode());
APPEND_ENTITY_PROPERTY(PROP_WANTS_KEYBOARD_FOCUS, wantsKeyboardFocus());
APPEND_ENTITY_PROPERTY(PROP_SHOW_KEYBOARD_FOCUS_HIGHLIGHT, getShowKeyboardFocusHighlight());
APPEND_ENTITY_PROPERTY(PROP_WEB_USE_BACKGROUND, getUseBackground());
APPEND_ENTITY_PROPERTY(PROP_USER_AGENT, getUserAgent());
@ -269,6 +274,17 @@ WebInputMode WebEntityItem::getInputMode() const {
});
}
void WebEntityItem::setWantsKeyboardFocus(bool value) {
withWriteLock([&] {
_needsRenderUpdate |= _wantsKeyboardFocus != value;
_wantsKeyboardFocus = value;
});
}
bool WebEntityItem::wantsKeyboardFocus() const {
return _wantsKeyboardFocus;
}
void WebEntityItem::setShowKeyboardFocusHighlight(bool value) {
_showKeyboardFocusHighlight = value;
}

View file

@ -72,6 +72,9 @@ public:
void setInputMode(const WebInputMode& value);
WebInputMode getInputMode() const;
bool wantsKeyboardFocus() const;
void setWantsKeyboardFocus(bool value);
bool getShowKeyboardFocusHighlight() const;
void setShowKeyboardFocusHighlight(bool value);
@ -94,6 +97,7 @@ protected:
QString _scriptURL;
uint8_t _maxFPS;
WebInputMode _inputMode;
bool _wantsKeyboardFocus { false };
bool _showKeyboardFocusHighlight { false };
bool _useBackground { false };
QString _userAgent;

View file

@ -292,6 +292,7 @@ enum class EntityVersion : PacketVersion {
TextAlignment,
Mirror,
EntityTags,
WantsKeyboardFocus,
// Add new versions above here
NUM_PACKET_TYPE,

View file

@ -237,6 +237,9 @@
"showKeyboardFocusHighlight": {
"tooltip": "If enabled, highlights when it has keyboard focus."
},
"wantsKeyboardFocus": {
"tooltip": "If enabled, this web entity will capture keyboard focus once clicked."
},
"isEmitting": {
"tooltip": "If enabled, then particles are emitted."
},

View file

@ -808,6 +808,11 @@ const GROUPS = [
},
propertyID: "inputMode",
},
{
label: "Wants Keyboard Focus",
type: "bool",
propertyID: "wantsKeyboardFocus",
},
{
label: "Focus Highlight",
type: "bool",