17 "title" :
"VuoTextFieldInternal",
18 "dependencies" : [
"VuoKeyboard",
"VuoClipboard" ],
67 this->context = context;
72 screenBackingScaleFactor = 1;
76 validateCharInput = NULL;
77 validateTextInput = NULL;
104 position = newPosition;
128 if (state->
text == text)
131 if(state->
text != NULL)
174 validateCharInput = validateCharInputCallback;
183 validateTextInput = validateTextInputCallback;
191 this->sessionEndedCallback = sessionEndedCallback;
203 bool foundTextLayer =
false;
206 for (
unsigned long i = 1; i <= childObjectCount && !foundTextLayer; ++i)
225 bool VuoTextFieldInternal::GetTextLocalPosition(
const VuoRenderedLayers* renderedLayers, uint64_t
id, VuoPoint2d point, VuoPoint2d* inverseTransformedPoint)
231 if( FindTextLayer(renderedLayers,
id, &textLayer, ancestors) )
260 uint32_t utf32_char = unicode[0];
292 if(validateCharInput == NULL || utf32_char < 32 || validateCharInput(state->
text, utf32_char, cursor))
305 bool stateDidChange =
false;
307 if(renderedLayers == NULL)
308 return stateDidChange;
310 unsigned long int pixelsWide, pixelsHigh;
311 float backingScaleFactor;
313 && (screenSize.x != pixelsWide
314 || screenSize.y != pixelsHigh
315 || screenBackingScaleFactor != backingScaleFactor))
316 stateDidChange =
true;
318 screenSize.x = pixelsWide;
319 screenSize.y = pixelsHigh;
320 screenBackingScaleFactor = backingScaleFactor;
335 VuoPoint2d inverseTransformedPoint;
337 if(it.type == VuoInteractionType_Press || it.type == VuoInteractionType_Click)
341 if( state->
isFocused && GetTextLocalPosition(renderedLayers,
id, it.position, &inverseTransformedPoint) )
343 if( it.clickCount == 1 )
344 stb_textedit_click(&state->
text, &state->
textEditState, inverseTransformedPoint.x, inverseTransformedPoint.y);
345 else if( it.clickCount == 2 )
347 else if( it.clickCount == 3 )
350 stateDidChange =
true;
353 else if(state->
isFocused && it.type == VuoInteractionType_Drag)
355 if( GetTextLocalPosition(renderedLayers,
id, it.position, &inverseTransformedPoint) )
356 stateDidChange = stb_textedit_drag(&state->
text, &state->
textEditState, inverseTransformedPoint.x, inverseTransformedPoint.y);
365 stateDidChange =
true;
369 return stateDidChange;
375 void VuoTextFieldInternal::OnLostFocus()
377 if(validateTextInput != NULL)
381 if(validateTextInput(context, state->
text, &modifiedText))
385 if(modifiedText != NULL)
393 if (sessionEndedCallback)
394 sessionEndedCallback(context, state->
text);
413 screenBackingScaleFactor,