#include <dali/internal/graphics/gles/egl-graphics.h>
#include <dali/internal/graphics/gles/egl-implementation.h>
#include <dali/internal/system/common/environment-variables.h>
+#include <dali/internal/system/common/system-factory.h>
#include <dali/internal/window-system/common/window-base.h>
#include <dali/internal/window-system/common/window-factory.h>
#include <dali/internal/window-system/common/window-system.h>
mOwnSurface(false),
mIsImeWindowSurface(false),
mNeedWindowRotationAcknowledgement(false),
- mIsWindowOrientationChanging(false)
+ mIsWindowOrientationChanging(false),
+ mIsFrontBufferRendering(false),
+ mIsFrontBufferRenderingChanged(false)
{
DALI_LOG_INFO(gWindowRenderSurfaceLogFilter, Debug::Verbose, "Creating Window\n");
Initialize(surface);
// Create the EGL window
EGLNativeWindowType window = mWindowBase->CreateEglWindow(width, height);
+ if(mWindowBase->GetType() == WindowType::IME)
+ {
+ InitializeImeSurface();
+ }
+
auto eglGraphics = static_cast<EglGraphics*>(mGraphics);
Internal::Adaptor::EglImplementation& eglImpl = eglGraphics->GetEglImplementation();
mPositionSize.width = surfaceSize.width;
mPositionSize.height = surfaceSize.height;
- DALI_LOG_RELEASE_INFO("Window is resizing, (%d, %d), [%d x %d]\n", mPositionSize.x, mPositionSize.y, mPositionSize.width, mPositionSize.height);
+ DALI_LOG_RELEASE_INFO("Window is resizing, (%d, %d), [%d x %d], IMEWindow [%d]\n", mPositionSize.x, mPositionSize.y, mPositionSize.width, mPositionSize.height, mIsImeWindowSurface);
// Window rotate or screen rotate
if(mIsWindowOrientationChanging || isScreenOrientationChanging)
SetFullSwapNextFrame();
}
+ // When mIsFrontBufferRendering is not equal to mWindowBase's
+ if(mIsFrontBufferRenderingChanged)
+ {
+ mIsFrontBufferRenderingChanged = false;
+ mWindowBase->SetEglWindowFrontBufferMode(mIsFrontBufferRendering);
+ SetFullSwapNextFrame();
+ }
+
SetBufferDamagedRects(damagedRects, clippingRect);
if(scene)
void WindowRenderSurface::InitializeImeSurface()
{
- mIsImeWindowSurface = true;
- if(!mPostRenderTrigger)
+ if(!mIsImeWindowSurface)
{
- mPostRenderTrigger = std::unique_ptr<TriggerEventInterface>(TriggerEventFactory::CreateTriggerEvent(MakeCallback(this, &WindowRenderSurface::ProcessPostRender),
- TriggerEventInterface::KEEP_ALIVE_AFTER_TRIGGER));
+ mIsImeWindowSurface = true;
+ if(!mPostRenderTrigger)
+ {
+ mPostRenderTrigger = std::unique_ptr<TriggerEventInterface>(TriggerEventFactory::CreateTriggerEvent(MakeCallback(this, &WindowRenderSurface::ProcessPostRender),
+ TriggerEventInterface::KEEP_ALIVE_AFTER_TRIGGER));
+
+ }
}
}
{
if(!iter->fileDescriptorMonitor)
{
- iter->fileDescriptorMonitor = std::unique_ptr<FileDescriptorMonitor>(new FileDescriptorMonitor(iter->fileDescriptor,
- MakeCallback(this, &WindowRenderSurface::OnFileDescriptorEventDispatched),
- FileDescriptorMonitor::FD_READABLE));
+ iter->fileDescriptorMonitor = Dali::Internal::Adaptor::GetSystemFactory()->CreateFileDescriptorMonitor(iter->fileDescriptor, MakeCallback(this, &WindowRenderSurface::OnFileDescriptorEventDispatched), FileDescriptorMonitor::FD_READABLE);
DALI_LOG_RELEASE_INFO("WindowRenderSurface::ProcessFrameCallback: Add handler [%d]\n", iter->fileDescriptor);
}
}
}
+void WindowRenderSurface::SetFrontBufferRendering(bool enable)
+{
+ if(mIsFrontBufferRendering != enable)
+ {
+ mIsFrontBufferRendering = enable;
+ mIsFrontBufferRenderingChanged = !mIsFrontBufferRenderingChanged;
+ }
+}
+
} // namespace Adaptor
} // namespace Internal