virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string value1Code; { gd::CallbacksForGeneratingExpressionCode callbacks(value1Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[0].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || value1Code.empty()) value1Code = "0"; } std::string value2Code; { gd::CallbacksForGeneratingExpressionCode callbacks(value2Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || value2Code.empty()) value2Code = "0"; } std::string resultingBoolean = codeGenerator.GenerateBooleanFullName("conditionTrue", context)+".val"; if ( instruction.GetParameters()[1].GetPlainString() == "=" || instruction.GetParameters()[1].GetPlainString().empty() ) return resultingBoolean + " = ("+value1Code+" == "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == ">") return resultingBoolean + " = ("+value1Code+" > "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "<") return resultingBoolean + " = ("+value1Code+" < "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "<=") return resultingBoolean + " = ("+value1Code+" <= "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == ">=") return resultingBoolean + " = ("+value1Code+" >= "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "!=") return resultingBoolean + " = ("+value1Code+" != "+value2Code+");\n"; return ""; };
void Save_Widget::widget_update() { callbacks(false); try { if (_plugin) { String tmp; tmp = _plugin->option( _plugin->options()[Save::COLOR_PROFILE_OPTION]); tmp >> _options.color_profile; tmp = _plugin->option(_plugin->options()[Save::FILM_PRINT_OPTION]); tmp >> _options.film_print; } } catch (String) {} _color_profile_widget->set(_options.color_profile); _black_widget->set(_options.film_print.black); _white_widget->set(_options.film_print.white); _gamma_widget->set(_options.film_print.gamma); callbacks(true); }
void Save_Widget::widget_update() { callbacks(false); try { if (_plugin) { String tmp; tmp = _plugin->option( _plugin->options()[Save::COLOR_PROFILE_OPTION]); tmp >> _options.color_profile; tmp = _plugin->option(_plugin->options()[Save::FILM_PRINT_OPTION]); tmp >> _options.film_print; tmp = _plugin->option(_plugin->options()[Save::VERSION_OPTION]); tmp >> _options.version; tmp = _plugin->option(_plugin->options()[Save::TYPE_OPTION]); tmp >> _options.type; tmp = _plugin->option(_plugin->options()[Save::ENDIAN_OPTION]); tmp >> _options.endian; } } catch (String) {} _color_profile_widget->set(_options.color_profile); _black_widget->set(_options.film_print.black); _white_widget->set(_options.film_print.white); _gamma_widget->set(_options.film_print.gamma); _version_widget->set(_options.version); _type_widget->set(_options.type); _endian_widget->set(_options.endian); callbacks(true); }
virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string expressionCode; { gd::CallbacksForGeneratingExpressionCode callbacks(expressionCode, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseStringExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || expressionCode.empty()) expressionCode = "\"\""; } std::string varGetter; { VariableCodeGenerationCallbacks callbacks(varGetter, codeGenerator, context, VariableCodeGenerationCallbacks::LAYOUT_VARIABLE); gd::VariableParser parser(instruction.GetParameters()[0].GetPlainString()); if ( !parser.Parse(callbacks) ) varGetter = "runtimeScene.getVariables().get(\"\")"; } std::string op = instruction.GetParameters()[1].GetPlainString(); if ( op == "=" ) return varGetter+".setString("+expressionCode+");\n"; else if ( op == "+" ) return varGetter+".concatenate("+expressionCode+");\n"; return ""; };
void Application_Message_Dialog::widget_update() { callbacks(false); _widget->set(String_Util::join(_list, "\n")); callbacks(true); }
void Application_Message_Dialog::dialog_update() { callbacks(false); _show_widget->set(_show); callbacks(true); }
static Wrapped wrap(CallbackArray<NbEvents>& callbacks, Func&& func) { callbacks[Idx] = std::unique_ptr<CallbackHandler<Func>>( new CallbackHandler<Func>( std::forward<Func>( func ) ) ); return [](void* opaque, Args... args) -> Ret { auto boxed = BoxOpaque<NbEvents, Strategy>( opaque, std::forward<Args>( args )... ); assert(boxed.callbacks()[Idx] != nullptr ); auto cbHandler = static_cast<CallbackHandler<Func>*>( boxed.callbacks()[Idx].get() ); return cbHandler->func( boxed, std::forward<Args>(args)... ); }; }
virtual std::string GenerateCode(gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { std::string outputCode; std::vector<std::string> realObjects = codeGenerator.ExpandObjectsName(instruction.GetParameter(0).GetPlainString(), context); for (unsigned int i = 0;i<realObjects.size();++i) { context.SetCurrentObject(realObjects[i]); context.ObjectsListNeeded(realObjects[i]); std::string newX, newY; std::string expression1Code; { gd::CallbacksForGeneratingExpressionCode callbacks(expression1Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || expression1Code.empty()) expression1Code = "0"; } std::string expression2Code; { gd::CallbacksForGeneratingExpressionCode callbacks(expression2Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[4].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || expression2Code.empty()) expression2Code = "0"; } std::string op1 = instruction.GetParameter(1).GetPlainString(); if ( op1 == "=" || op1.empty() ) newX = expression1Code; else if ( op1 == "/" || op1 == "*" || op1 == "-" || op1 == "+" ) newX = codeGenerator.GetObjectListName(realObjects[i], context)+"[i].getX() "+op1 + expression1Code; else return ""; std::string op2 = instruction.GetParameter(3).GetPlainString(); if ( op2 == "=" || op2.empty() ) newY = expression2Code; else if ( op2 == "/" || op2 == "*" || op2 == "-" || op2 == "+" ) newY = codeGenerator.GetObjectListName(realObjects[i], context)+"[i].getY() "+op2 + expression2Code; else return ""; std::string call = codeGenerator.GetObjectListName(realObjects[i], context)+"[i].setPosition("+newX+","+newY+")"; outputCode += "for(var i = 0, len = "+codeGenerator.GetObjectListName(realObjects[i], context)+".length ;i < len;++i) {\n"; outputCode += " "+call+";\n"; outputCode += "}\n"; context.SetNoCurrentObject(); } return outputCode; };
void Save_Widget::plugin_update() { callbacks(false); if (_plugin) { String tmp; tmp << _options.codec; _plugin->option(_plugin->options()[Save::CODEC], &tmp); } callbacks(true); }
void Save_Widget::plugin_update() { callbacks(false); if (_plugin) { String tmp; tmp << _options.compression; _plugin->option(_plugin->options()[Save::COMPRESSION_OPTION], &tmp); } callbacks(true); }
void AttachedDetachedInvocation::dispatch(Element* element) { switch (m_which) { case CustomElementLifecycleCallbacks::AttachedCallback: callbacks()->attached(element); break; case CustomElementLifecycleCallbacks::DetachedCallback: callbacks()->detached(element); break; default: ASSERT_NOT_REACHED(); } }
void Window::frame_update() { DJV_DEBUG(String_Format("Window::frame_update(%%)").arg(int64_t(this))); DJV_DEBUG_PRINT("frame = " << _frame); callbacks(false); _slider->set(_frame); _widget->set(_movie.image(_frame)); _widget->redraw(); callbacks(true); }
std::set < std::string > EventsVariablesFinder::FindArgumentsInInstructions(const gd::Platform & platform, const gd::Project & project, const gd::Layout & layout, const vector < gd::Instruction > & instructions, bool instructionsAreConditions, const std::string & parameterType, const std::string & objectName) { std::set < std::string > results; for (unsigned int aId = 0;aId < instructions.size();++aId) { std::string lastObjectParameter = ""; gd::InstructionMetadata instrInfos = instructionsAreConditions ? MetadataProvider::GetConditionMetadata(platform, instructions[aId].GetType()) : MetadataProvider::GetActionMetadata(platform, instructions[aId].GetType()); for (unsigned int pNb = 0;pNb < instrInfos.parameters.size();++pNb) { //The parameter has the searched type... if ( instrInfos.parameters[pNb].type == parameterType ) { //...remember the value of the parameter. if (objectName.empty() || lastObjectParameter == objectName) results.insert(instructions[aId].GetParameter(pNb).GetPlainString()); } //Search in expressions else if (instrInfos.parameters[pNb].type == "expression") { CallbacksForSearchingVariable callbacks(results, parameterType, objectName); gd::ExpressionParser parser(instructions[aId].GetParameter(pNb).GetPlainString()); parser.ParseMathExpression(platform, project, layout, callbacks); } //Search in string expressions else if (instrInfos.parameters[pNb].type == "string"||instrInfos.parameters[pNb].type == "file" ||instrInfos.parameters[pNb].type == "joyaxis" ||instrInfos.parameters[pNb].type == "color"||instrInfos.parameters[pNb].type == "layer") { CallbacksForSearchingVariable callbacks(results, parameterType, objectName); gd::ExpressionParser parser(instructions[aId].GetParameter(pNb).GetPlainString()); parser.ParseStringExpression(platform, project, layout, callbacks); } //Remember the value of the last "object" parameter. else if (gd::ParameterMetadata::IsObject(instrInfos.parameters[pNb].type)) { lastObjectParameter = instructions[aId].GetParameter(pNb).GetPlainString(); } } if ( !instructions[aId].GetSubInstructions().empty() ) FindArgumentsInInstructions(platform, project, layout, instructions[aId].GetSubInstructions(), instructionsAreConditions, parameterType); } return results; }
void File_Browser::widget_update() { //DJV_DEBUG("File_Browser::widget_update"); //DJV_DEBUG_PRINT("value = " << _value); //DJV_DEBUG_PRINT("value seq = " << _value.seq()); callbacks(false); _value_widget->set(_value); _seq_widget->set(_seq); callbacks(true); }
void Save_Widget::plugin_update() { callbacks(false); if (_plugin) { String tmp; tmp << _options.color_profile; _plugin->option(_plugin->options()[Save::COLOR_PROFILE_OPTION], &tmp); tmp << _options.film_print; _plugin->option(_plugin->options()[Save::FILM_PRINT_OPTION], &tmp); } callbacks(true); }
SceneExtension::SceneExtension() { gd::BuiltinExtensionsImplementer::ImplementsSceneExtension(*this); #if defined(GD_IDE_ONLY) GetAllExpressions()["Random"].SetFunctionName("GDpriv::CommonInstructions::Random").SetIncludeFile("GDCpp/Extensions/Builtin/CommonInstructionsTools.h"); GetAllStrExpressions()["CurrentSceneName"].SetFunctionName("GetSceneName").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["DepartScene"].SetFunctionName("SceneJustBegins").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["Scene"].SetFunctionName("ReplaceScene").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["PushScene"].SetFunctionName("PushScene").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["PopScene"].SetFunctionName("PopScene").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["Quit"].SetFunctionName("StopGame").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["SceneBackground"].SetFunctionName("ChangeSceneBackground").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllActions()["DisableInputWhenFocusIsLost"].SetFunctionName("DisableInputWhenFocusIsLost").SetIncludeFile("GDCpp/Extensions/Builtin/RuntimeSceneTools.h"); GetAllConditions()["Egal"].codeExtraInformation .SetCustomCodeGenerator([](gd::Instruction & instruction, gd::EventsCodeGenerator & codeGenerator, gd::EventsCodeGenerationContext & context) { gd::String value1Code; { gd::CallbacksForGeneratingExpressionCode callbacks(value1Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[0].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || value1Code.empty()) value1Code = "0"; } gd::String value2Code; { gd::CallbacksForGeneratingExpressionCode callbacks(value2Code, codeGenerator, context); gd::ExpressionParser parser(instruction.GetParameters()[2].GetPlainString()); if (!parser.ParseMathExpression(codeGenerator.GetPlatform(), codeGenerator.GetProject(), codeGenerator.GetLayout(), callbacks) || value2Code.empty()) value2Code = "0"; } if ( instruction.GetParameters()[1].GetPlainString() == "=" || instruction.GetParameters()[1].GetPlainString().empty() ) return "conditionTrue = ("+value1Code+" == "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == ">") return "conditionTrue = ("+value1Code+" > "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "<") return "conditionTrue = ("+value1Code+" < "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "<=") return "conditionTrue = ("+value1Code+" <= "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == ">=") return "conditionTrue = ("+value1Code+" >= "+value2Code+");\n"; else if ( instruction.GetParameters()[1].GetPlainString() == "!=") return "conditionTrue = ("+value1Code+" != "+value2Code+");\n"; return gd::String(""); }); #endif }
// CAPPFIX_WEB_HTML5: Request Animation Frame void ScriptedAnimationController::serviceScriptedAnimations(DOMTimeStamp time) { if (!m_callbacks.size() || m_suspendCount) return; // First, generate a list of callbacks to consider. Callbacks registered from this point // on are considered only for the "next" frame, not this one. CallbackList callbacks(m_callbacks); // Invoking callbacks may detach elements from our document, which clears the document's // reference to us, so take a defensive reference. RefPtr<ScriptedAnimationController> protector(this); for (size_t i = 0; i < callbacks.size(); ++i) { RequestAnimationFrameCallback* callback = callbacks[i].get(); if (!callback->m_firedOrCancelled) { callback->m_firedOrCancelled = true; callback->handleEvent(time); } } // Remove any callbacks we fired from the list of pending callbacks. for (size_t i = 0; i < m_callbacks.size();) { if (m_callbacks[i]->m_firedOrCancelled) m_callbacks.remove(i); else ++i; } if (m_callbacks.size()) scheduleAnimation(); }
void DOMFileSystemBase::copy(const EntryBase* source, EntryBase* parent, const String& newName, EntryCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType) { if (!fileSystem()) { reportError(errorCallback, FileError::kAbortErr); return; } String destinationPath; if (!verifyAndGetDestinationPathForCopyOrMove(source, parent, newName, destinationPath)) { reportError(errorCallback, FileError::kInvalidModificationErr); return; } std::unique_ptr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create( successCallback, errorCallback, m_context, parent->filesystem(), destinationPath, source->isDirectory())); callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); fileSystem()->copy(createFileSystemURL(source), parent->filesystem()->createFileSystemURL(destinationPath), std::move(callbacks)); }
void File_Browser::type_update() { //DJV_DEBUG("File_Browser::type_update"); callbacks(false); //! \todo What about image save plugins? const List<Plugin *> & plugins = Image_Load_Factory::global()->plugins(); _type_glob = glob (plugins); _type_label = glob_label(plugins); callbacks(true); }
inline windows_named_mutex::windows_named_mutex (open_or_create_t, const char *name, const permissions &perm) : m_mtx_wrapper() { named_mut_callbacks callbacks(m_mtx_wrapper); m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks); }
void DOMFileSystemBase::getDirectory(const EntryBase* entry, const String& path, const FileSystemFlags& flags, EntryCallback* successCallback, ErrorCallbackBase* errorCallback, SynchronousType synchronousType) { if (!fileSystem()) { reportError(errorCallback, FileError::kAbortErr); return; } String absolutePath; if (!pathToAbsolutePath(m_type, entry, path, absolutePath)) { reportError(errorCallback, FileError::kInvalidModificationErr); return; } std::unique_ptr<AsyncFileSystemCallbacks> callbacks(EntryCallbacks::create( successCallback, errorCallback, m_context, this, absolutePath, true)); callbacks->setShouldBlockUntilCompletion(synchronousType == Synchronous); if (flags.createFlag()) fileSystem()->createDirectory(createFileSystemURL(absolutePath), flags.exclusive(), std::move(callbacks)); else fileSystem()->directoryExists(createFileSystemURL(absolutePath), std::move(callbacks)); }
inline windows_named_semaphore::windows_named_semaphore (open_or_create_t, const char *name, unsigned int initial_count, const permissions &perm) : m_sem_wrapper() { named_sem_callbacks callbacks(m_sem_wrapper, initial_count); m_named_sync.open_or_create(DoOpenOrCreate, name, perm, callbacks); }
void JamomaExpressionComposition::firstResultCallback(bool first_result) { bool result = do_evaluation(first_result, mSecondExpression->evaluate()); for (auto callback : callbacks()) callback(result); }
void JamomaExpressionComposition::secondResultCallback(bool second_result) { bool result = do_evaluation(mFirstExpression->evaluate(), second_result); for (auto callback : callbacks()) callback(result); }
void ScriptedAnimationController::serviceScriptedAnimations(DOMTimeStamp time) { if (!m_callbacks.size() || m_suspendCount) return; // We want to run the callback for all elements in the document that have registered // for a callback and that are visible. Running the callbacks can cause new callbacks // to be registered, existing callbacks to be cancelled, and elements to gain or lose // visibility so this code has to iterate carefully. // FIXME: Currently, this code doesn't do any visibility tests beyond checking display: // First, generate a list of callbacks to consider. Callbacks registered from this point // on are considered only for the "next" frame, not this one. CallbackList callbacks(m_callbacks); // Firing the callback may cause the visibility of other elements to change. To avoid // missing any callbacks, we keep iterating through the list of candiate callbacks and firing // them until nothing new becomes visible. bool firedCallback; // Invoking callbacks may detach elements from our document, which clear's the document's // reference to us, so take a defensive reference. RefPtr<ScriptedAnimationController> protector(this); do { firedCallback = false; // A previous iteration may have detached this Document from the DOM tree. // If so, then we do not need to process any more callbacks. if (!m_document) continue; // A previous iteration may have invalidated style (or layout). Update styles for each iteration // for now since all we check is the existence of a renderer. m_document->updateStyleIfNeeded(); for (size_t i = 0; i < callbacks.size(); ++i) { RequestAnimationFrameCallback* callback = callbacks[i].get(); if (!callback->m_firedOrCancelled && (!callback->m_element || callback->m_element->renderer())) { callback->m_firedOrCancelled = true; InspectorInstrumentationCookie cookie = InspectorInstrumentation::willFireAnimationFrame(m_document, callback->m_id); callback->handleEvent(time); InspectorInstrumentation::didFireAnimationFrame(cookie); firedCallback = true; callbacks.remove(i); break; } } } while (firedCallback); // Remove any callbacks we fired from the list of pending callbacks. for (size_t i = 0; i < m_callbacks.size();) { if (m_callbacks[i]->m_firedOrCancelled) m_callbacks.remove(i); else ++i; } if (m_callbacks.size()) scheduleAnimation(); }
void IDBFactoryBackendProxy::deleteDatabase(const String& name, PassRefPtr<IDBCallbacks> prpCallbacks, const String& databaseIdentifier, ExecutionContext* context) { RefPtr<IDBCallbacks> callbacks(prpCallbacks); WebSecurityOrigin origin(context->securityOrigin()); if (!allowIndexedDB(context, name, origin, callbacks)) return; m_webIDBFactory->deleteDatabase(name, new WebIDBCallbacksImpl(callbacks), databaseIdentifier); }
void IDBFactoryBackendProxy::getDatabaseNames(PassRefPtr<IDBCallbacks> prpCallbacks, const String& databaseIdentifier, ExecutionContext* context) { RefPtr<IDBCallbacks> callbacks(prpCallbacks); WebSecurityOrigin origin(context->securityOrigin()); if (!allowIndexedDB(context, "Database Listing", origin, callbacks)) return; m_webIDBFactory->getDatabaseNames(new WebIDBCallbacksImpl(callbacks), databaseIdentifier); }
virtual bool OnSubTextExpression(const gd::Platform & platform, const gd::Project & project, const gd::Layout & layout, gd::Expression & expression) { CallbacksForSearchingVariable callbacks(results, parameterType, objectName); gd::ExpressionParser parser(expression.GetPlainString()); parser.ParseStringExpression(platform, project, layout, callbacks); return true; }
void IDBFactoryBackendProxy::open(const String& name, int64_t version, int64_t transactionId, PassRefPtr<IDBCallbacks> prpCallbacks, PassRefPtr<IDBDatabaseCallbacks> prpDatabaseCallbacks, const String& databaseIdentifier, ExecutionContext* context) { RefPtr<IDBCallbacks> callbacks(prpCallbacks); RefPtr<IDBDatabaseCallbacks> databaseCallbacks(prpDatabaseCallbacks); WebSecurityOrigin origin(context->securityOrigin()); if (!allowIndexedDB(context, name, origin, callbacks)) return; m_webIDBFactory->open(name, version, transactionId, new WebIDBCallbacksImpl(callbacks), new WebIDBDatabaseCallbacksImpl(databaseCallbacks), databaseIdentifier); }
void Save_Widget::widget_update() { callbacks(false); try { if (_plugin) { String tmp; tmp = _plugin->option(_plugin->options()[Save::COMPRESSION_OPTION]); tmp >> _options.compression; } } catch (String) {} _compression_widget->set(_options.compression); callbacks(true); }