// EXTERNAL INCLUDES
#include <dali/devel-api/scripting/scripting.h>
+#include <dali/integration-api/adaptor-framework/adaptor.h>
#include <dali/integration-api/debug.h>
#include <dali/public-api/object/property-array.h>
#include <dali/public-api/object/type-registry-helper.h>
mImageVisualShaderFactory(),
mTextVisualShaderFactory(),
mSlotDelegate(this),
+ mIdleCallback(nullptr),
mDebugEnabled(debugEnabled),
mPreMultiplyOnLoad(true)
{
VisualFactory::~VisualFactory()
{
+ if(mIdleCallback && Adaptor::IsAvailable())
+ {
+ // Removes the callback from the callback manager in case the control is destroyed before the callback is executed.
+ Adaptor::Get().RemoveIdle(mIdleCallback);
+ mIdleCallback = nullptr;
+ }
}
void VisualFactory::OnStyleChangedSignal(Toolkit::StyleManager styleManager, StyleChange::Type type)
return mPreMultiplyOnLoad;
}
+void VisualFactory::DiscardVisual(Toolkit::Visual::Base visual)
+{
+ mDiscardedVisuals.emplace_back(visual);
+
+ RegisterDiscardCallback();
+}
+
+void VisualFactory::UsePreCompiledShader()
+{
+ if(mPrecompiledShaderRequested)
+ {
+ return;
+ }
+ mPrecompiledShaderRequested = true;
+
+ RawShaderData rawShaderData;
+ Integration::ShaderPrecompiler::Get().Enable();
+ GetImageVisualShaderFactory().GetPrecompiledShader(rawShaderData);
+ Integration::ShaderPrecompiler::Get().SavePrecomipleShaderList(rawShaderData);
+}
+
Internal::TextureManager& VisualFactory::GetTextureManager()
{
return GetFactoryCache().GetTextureManager();
}
SetBrokenImageUrl(styleManager);
}
+
+ //UsePreCompiledShader(); // Call forcelly
+
return *mFactoryCache;
}
return *mTextVisualShaderFactory;
}
+void VisualFactory::OnDiscardCallback()
+{
+ mIdleCallback = nullptr;
+
+ // Discard visual now.
+ mDiscardedVisuals.clear();
+}
+
+void VisualFactory::RegisterDiscardCallback()
+{
+ if(!mIdleCallback && Adaptor::IsAvailable())
+ {
+ // The callback manager takes the ownership of the callback object.
+ mIdleCallback = MakeCallback(this, &VisualFactory::OnDiscardCallback);
+
+ Adaptor& adaptor = Adaptor::Get();
+
+ if(!adaptor.AddIdle(mIdleCallback, false))
+ {
+ // Fail to add idle. (Maybe adaptor is paused.)
+ mIdleCallback = nullptr;
+ }
+ }
+}
+
} // namespace Internal
} // namespace Toolkit