repos = repo.spin_2.4_base_standard, repo.spin_2.4_mobile_target_tm1
[repo.spin_2.4_mobile_target_tm1]
-url = http://168.219.209.55/download/snapshots/2.4-mobile/common/latest/repos/target-TM1/packages/
+url = http://165.213.149.200/download/snapshots/2.4-mobile-release/common/latest/repos/target-TM1/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
[repo.spin_2.4_base_standard]
-url = http://168.219.209.55/download/snapshots/2.4-base/common/latest/repos/standard/packages/
+url = http://165.213.149.200/download/snapshots/2.4-base/common/latest/repos/standard/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
[profile.sdk]
repos = repo.spin_2.4_base_emulator, repo.spin_2.4_mobile_emulator
[repo.spin_2.4_mobile_emulator]
-url = http://168.219.209.55/download/snapshots/2.4-mobile/common/latest/repos/emulator/packages/
+url = http://165.213.149.200/download/snapshots/2.4-mobile-release/common/latest/repos/emulator/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
[repo.spin_2.4_base_emulator]
-url = http://168.219.209.55/download/snapshots/2.4-base/common/latest/repos/emulator/packages/
+url = http://165.213.149.200/download/snapshots/2.4-base/common/latest/repos/emulator/packages/
+user = blinkbot
+passwdx = QlpoOTFBWSZTWd0JOhUAAACBAABgIAAhAIIjF3JFOFCQ3Qk6FQ==
#define ENABLE_TIZEN_AVOID_NORMALIZATION_FOR_FILE 1 /* Loader Team */
#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+#define ENABLE_SKIP_PLAY_MEDIA_SEEKING 0 /* Mahesha N(mahesha.n@samsung.com) : Use Skip Play Seekingfeature for HTML Audio and Video Features. */
+
#if CPU(X86) || CPU(X86_64)
#define ENABLE_TIZEN_USE_HW_VIDEO_OVERLAY_IN_FULLSCREEN 0 /* Eojin ham(eojin.ham@samsung.com) : Use HW video overlay when play video in fullscreen. */
#else
+2013-03-06 Abhishek Arya <inferno@chromium.org>
+
+ Crash in SVGViewSpec::viewTarget
+ https://bugs.webkit.org/show_bug.cgi?id=111648
+
+ Reviewed by Philip Rogers.
+
+ * svg/SVGViewSpec.cpp:
+ (WebCore::SVGViewSpec::viewTarget):
+
2013-03-14 Ojan Vafai <ojan@chromium.org>
Auto height column flexboxes with border and padding are too short
if (endedPlayback()) {
ExceptionCode unused;
seek(0, unused);
- }
-
- if (m_mediaController)
+ } else if (m_mediaController)
m_mediaController->bringElementUpToSpeed(this);
if (m_paused) {
void MediaControlSeekButtonElement::setActive(bool flag, bool pause)
{
+#if ENABLE(SKIP_PLAY_MEDIA_SEEKING)
if (flag && !m_seekTimer.isActive())
m_seekTimer.start(1, cSkipRepeatDelay);
else if (m_seekTimer.isActive())
m_seekTimer.stop();
+#endif
MediaControlInputElement::setActive(flag, pause);
}
void MediaControlSeekButtonElement::seekTimerFired(Timer<MediaControlSeekButtonElement>*)
{
+#if ENABLE(SKIP_PLAY_MEDIA_SEEKING)
ExceptionCode ec;
float skipTime = isForwardButton() ? cSkipTime : -cSkipTime;
mediaController()->setCurrentTime(mediaController()->currentTime() + skipTime, ec);
+#endif
}
#else
inline MediaControlSeekButtonElement::MediaControlSeekButtonElement(Document* document, MediaControlElementType displayType)
updateStatusDisplay();
#if ENABLE(TIZEN_GSTREAMER_VIDEO)
- if (m_mediaController->supportsFullscreen() && !m_isFullscreen)
- m_fullScreenButton->show();
+ m_fullScreenButton->hide();
#else
if (m_mediaController->supportsFullscreen())
m_fullScreenButton->show();
m_statusDisplay->hide();
reset();
+
+#if ENABLE(TIZEN_GSTREAMER_VIDEO)
+ if (m_mediaController->supportsFullscreen() && !m_isFullscreen)
+ m_fullScreenButton->show();
+#endif
}
void MediaControlRootElement::changedClosedCaptionsVisibility()
void setCoverAreaMultiplier(double coverAreaMultiplier);
#endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ virtual bool filterPaintingDisabled() const { return false; }
+ virtual void syncInvalidationForBlurFilter() { }
+#endif
+
protected:
// Should be called from derived class destructors. Should call willBeDestroyed() on super.
virtual void willBeDestroyed();
#endif
}
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+bool TiledBackingStore::hasDirtyRect()
+{
+ TileMap::iterator end = m_tiles.end();
+ for (TileMap::iterator it = m_tiles.begin(); it != end; ++it) {
+ if (it->second->isDirty())
+ return true;
+ }
+
+ return false;
+}
+#endif
+
#if ENABLE(TIZEN_RECORDING_SURFACE_PAINT_THREAD)
void TiledBackingStore::updateTileBuffersBegin()
{
void setCanInvalidateLowScaleBackingStore(bool canInvalidate) { m_canInvalidateLowScaleBackingStore = canInvalidate; }
#endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ bool hasDirtyRect();
+#endif
+
private:
#if !ENABLE(TIZEN_RECORDING_SURFACE_PAINT_THREAD)
void startTileBufferUpdateTimer();
return FALSE;
}
+static gboolean mediaPlayerPrivateBufferUnderrunCallback(MediaPlayerPrivateGStreamer* player)
+{
+ if (player->isDestroyed(player))
+ return FALSE;
+
+ player->notifyPlayerNoMoreDataToPlay();
+ return FALSE;
+}
+
static void mediaPlayerPrivateMuteChangedCallback(GObject*, GParamSpec*, MediaPlayerPrivateGStreamer* player)
{
if (player->isDestroyed(player))
return FALSE;
}
+static void mediaPlayerPrivateMultiQueueUnderRunCallback(GstElement* bin, MediaPlayerPrivateGStreamer* player)
+{
+ if (!player->isDestroyed(player))
+ player->multiQueueUnderrunHandle();
+}
+
#if ENABLE(TIZEN_GSTREAMER_VIDEO)
static void mediaPlayerPrivateSourceSetupCallback(GObject*, GstElement* source, MediaPlayerPrivateGStreamer* player)
{
player->setMultiQueue(element);
player->initializeMultiQueue();
g_signal_handlers_disconnect_by_func(GST_ELEMENT_PARENT(element), reinterpret_cast<gpointer>(mediaPlayerPrivateElementAddedCallback), player);
+ g_signal_connect(GST_BIN(element), "underrun", G_CALLBACK(mediaPlayerPrivateMultiQueueUnderRunCallback), player);
} else if (String(GST_ELEMENT_NAME (element)).startsWith("typefindelement", false)) {
g_signal_connect(GST_BIN(element), "have-type", G_CALLBACK(mediaPlayerPrivateHaveTypeCallback), player);
} else if (String(GST_ELEMENT_NAME (element)).startsWith("queue2", false)) {
, m_hasVideo(false)
, m_hasAudio(false)
, m_audioTimerHandler(0)
+ , m_bufferUnderrunHandler(0)
, m_videoTimerHandler(0)
, m_webkitAudioSink(0)
, m_totalBytes(-1)
, m_updatePixmapSize(true)
#endif
{
-#if ENABLE(TIZEN_USE_HW_VIDEO_OVERLAY_IN_FULLSCREEN)
- if (element()->isFullscreen())
+#if ENABLE(TIZEN_USE_HW_VIDEO_OVERLAY_IN_FULLSCREEN) && ENABLE(TIZEN_EXTENSIBLE_API)
+ if (element()->isFullscreen() && TizenExtensibleAPI::extensibleAPI().hwVideoOverlayInFullscreen())
m_overlayType = MediaPlayer::HwOverlay;
#endif
#if ENABLE(TIZEN_GSTREAMER_VIDEO)
g_signal_handlers_disconnect_by_func(m_playBin.get(), reinterpret_cast<gpointer>(mediaPlayerPrivateSourceSetupCallback), this);
#endif
+ g_signal_handlers_disconnect_by_func(m_playBin.get(), reinterpret_cast<gpointer>(mediaPlayerPrivateMultiQueueUnderRunCallback), this);
m_playBin = 0;
}
if (m_audioTimerHandler)
g_source_remove(m_audioTimerHandler);
+ if (m_bufferUnderrunHandler)
+ g_source_remove(m_bufferUnderrunHandler);
+
#if ENABLE(TIZEN_ACCELERATED_COMPOSITING) && USE(TIZEN_TEXTURE_MAPPER) && ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
if (m_videoLayer)
m_videoLayer->clearSurface();
g_object_set(m_webkitAudioSink.get(), "provide-clock", 0, NULL);
}
- if (newState == GST_STATE_PLAYING)
+ if (newState == GST_STATE_PLAYING || (isLocalMediaStream() && newState == GST_STATE_PAUSED))
MediaResourceControllerGStreamerTizen::mediaResourceController().updateAudioSessionState(element(), ASM_STATE_PLAYING);
#endif
GstStateChangeReturn setStateResult = gst_element_set_state(m_playBin.get(), newState);
static_cast<double>(volume));
}
+void MediaPlayerPrivateGStreamer::notifyPlayerNoMoreDataToPlay()
+{
+ // NetworkError needs to be fired after playing buffered data as libsoup is firing
+ // errors if connection is lost in few seconds.
+ if (m_shouldDelayErrorEvent) {
+ LOG_MEDIA_MESSAGE("Delayed network error event fired.");
+ m_shouldDelayErrorEvent = false;
+ loadingFailed(MediaPlayer::NetworkError);
+ }
+}
+
void MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange()
{
m_volumeTimerHandler = 0;
return TRUE;
}
+void MediaPlayerPrivateGStreamer::multiQueueUnderrunHandle()
+{
+ // Underrun callback works from streaming thread, need to run handler from
+ // main thread
+ if (m_bufferUnderrunHandler)
+ g_source_remove(m_bufferUnderrunHandler);
+ m_bufferUnderrunHandler = g_timeout_add(0, reinterpret_cast<GSourceFunc>(mediaPlayerPrivateBufferUnderrunCallback), this);
+}
+
void MediaPlayerPrivateGStreamer::processBufferingStats(GstMessage* message)
{
// This is the immediate buffering that needs to happen so we have
void setMuted(bool);
void muteChanged();
void notifyPlayerOfMute();
+ void notifyPlayerNoMoreDataToPlay();
void setPreload(MediaPlayer::Preload);
void fillTimerFired(Timer<MediaPlayerPrivateGStreamer>*);
virtual void changeOverlayType(MediaPlayer::OverlayType);
virtual void rotateHwOverlayVideo();
#endif
+ void multiQueueUnderrunHandle();
private:
MediaPlayerPrivateGStreamer(MediaPlayer*);
bool m_hasVideo;
bool m_hasAudio;
guint m_audioTimerHandler;
+ guint m_bufferUnderrunHandler;
guint m_videoTimerHandler;
GRefPtr<GstElement> m_webkitAudioSink;
mutable long m_totalBytes;
PaintBehaviorSelectionOnly = 1 << 0,
PaintBehaviorForceBlackText = 1 << 1,
PaintBehaviorFlattenCompositingLayers = 1 << 2,
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ PaintBehaviorDiableFilterPainting = 1 << 4,
+#endif
PaintBehaviorRenderingSVGMask = 1 << 3
};
#if ENABLE(CSS_FILTERS)
FilterEffectRendererHelper filterPainter(filterRenderer() && paintsWithFilters());
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ bool filterPaintingDisabled = paintBehavior & PaintBehaviorDiableFilterPainting;
+ if (filterPainter.haveFilterEffect() && !context->paintingDisabled() && !filterPaintingDisabled) {
+#else
if (filterPainter.haveFilterEffect() && !context->paintingDisabled()) {
+#endif
LayoutPoint rootLayerOffset;
convertToLayerCoords(rootLayer, rootLayerOffset);
RenderLayerFilterInfo* filterInfo = this->filterInfo();
#endif
// We have to use the same root as for hit testing, because both methods can compute and cache clipRects.
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ PaintBehavior paintBehavior = PaintBehaviorNormal;
+ if (graphicsLayer->filterPaintingDisabled())
+ paintBehavior |= PaintBehaviorDiableFilterPainting;
+
+ paintIntoLayer(m_owningLayer, &context, dirtyRect, paintBehavior, paintingPhase, renderer());
+#else
paintIntoLayer(m_owningLayer, &context, dirtyRect, PaintBehaviorNormal, paintingPhase, renderer());
+#endif
if (m_usingTiledCacheLayer)
m_owningLayer->renderer()->frame()->view()->setLastPaintTime(currentTime());
{
if (!m_contextElement)
return 0;
- return static_cast<SVGElement*>(m_contextElement->treeScope()->getElementById(m_viewTargetString));
+ Element* element = m_contextElement->treeScope()->getElementById(m_viewTargetString);
+ if (!element || !element->isSVGElement())
+ return 0;
+ return static_cast<SVGElement*>(element);
}
SVGTransformListPropertyTearOff* SVGViewSpec::transform()
/**
* \enum _Ewk_Context_Menu_Item_Tag
- * @brief Enumeration that provides the tags of items in the context menu.
+ *
+ * @brief Enumeration that provides the tags of items in the context menu.\n
+ * Enumeration values from 9001 to 9999 of _Ewk_Context_Menu_Item_Tag are reserved for product vendors.
+ *
* @since_tizen 2.3
*/
enum _Ewk_Context_Menu_Item_Tag{
g_enableEvasRender = true;
#endif
if (!impl->exceedTouchTapThreshold) {
+ unsigned numberOfTouchPoints = evas_touch_point_list_count(smartData->base.evas);
+ if (numberOfTouchPoints == 0 && wasHandled)
+ impl->gestureClient->setGestureEnabled(false);
+
impl->gestureClient->setTapEnabled(!wasHandled);
#if ENABLE(TIZEN_ISF_PORT)
if (wasHandled && impl->pageProxy->isViewVisible() && impl->inputMethodContext()) {
void GestureClient::endTap(const IntPoint& position)
{
- if (!m_isTapEnabled) {
+ if (!m_isTapEnabled && m_isGestureEnabled) {
setTapScheduled(true, position);
return;
}
int viewX, viewY;
evas_object_geometry_get(m_viewImpl->view(), &viewX, &viewY, 0, 0);
- m_zoom->start(position, IntPoint(viewX, viewY));
+ m_zoom->start(position, IntPoint(viewX, viewY), scale);
#if ENABLE(TIZEN_DLOG_SUPPORT)
TIZEN_LOGI("[Touch] position[%d, %d]", position.x(), position.y());
#endif
#endif
, m_isTheFirstPanAnimatorProcessed(false)
, m_dataStoreTrigger(false)
- , m_animatorTimeStamp(0)
- , m_currentAnimatorTime(0)
#if ENABLE(TIZEN_ENABLE_MINIMUM_2_CPU_ON_MOUSE_DOWN)
, m_enable2CpuJob(0)
#endif
{
Pan* pan = static_cast<Pan*>(data);
- double currentTimeStamp = ecore_time_get();
- if (pan->m_animatorTimeStamp)
- pan->m_currentAnimatorTime = currentTimeStamp - pan->m_animatorTimeStamp;
-
- pan->m_animatorTimeStamp = currentTimeStamp;
-
// We have to skip first vsync animator in order to prevent
// to draw two times within 16ms during GPU clock is low.
if (!pan->m_isTheFirstPanAnimatorProcessed) {
m_history[index2].x, m_history[index2].y, m_history[index2].time);
}
#endif
- // deltaCalibraion is for the compensation of the irregualr animator time.
- // delatCalibration should be set when m_currentAnimatorTime is between 8ms and 32ms.
- // If not, deltaX and deltaY can have meaningless values.
- double deltaCalibration = 1.0;
- if (m_currentAnimatorTime > 0.008 && m_currentAnimatorTime < 0.032)
- deltaCalibration = ecore_animator_frametime_get() / m_currentAnimatorTime;
-
- int deltaX = floor((m_lastPoint.x() - m_currentPoint.x()) * deltaCalibration + 0.5);
- int deltaY = floor((m_lastPoint.y() - m_currentPoint.y()) * deltaCalibration + 0.5);
+ int deltaX = m_lastPoint.x() - m_currentPoint.x();
+ int deltaY = m_lastPoint.y() - m_currentPoint.y();
PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
EINA_SAFETY_ON_NULL_RETURN(pageClientImpl);
#endif
bool m_isTheFirstPanAnimatorProcessed;
bool m_dataStoreTrigger;
- double m_animatorTimeStamp;
- double m_currentAnimatorTime;
#if ENABLE(TIZEN_ENABLE_MINIMUM_2_CPU_ON_MOUSE_DOWN)
Ecore_Job* m_enable2CpuJob;
#endif
{
double xVelocity = 0;
double yVelocity = 0;
- double currentTime = ecore_time_get();
+ double currentTime = ecore_loop_time_get();
double timeDifference = currentTime - timestamp1;
// Initialize m_lastPoint with latest position.
, m_isZooming(false)
, m_isZoomInformationUpdated(false)
, m_isScaleFactorChanged(false)
+ , m_zoomRate(1.0)
+ , m_zoomBeginningRate(1.0)
+ , m_zoomBaseRate(0)
, m_baseScaleFactor(0)
, m_newScaleFactor(0)
, m_currentScaleFactor(0)
}
}
-void Zoom::start(const IntPoint& centerPoint, const IntPoint& viewLocation)
+void Zoom::start(const IntPoint& centerPoint, const IntPoint& viewLocation, const double zoom)
{
PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
EINA_SAFETY_ON_NULL_RETURN(pageClientImpl);
m_isZooming = true;
m_isStopped = false;
m_isZoomInformationUpdated = false;
+ m_zoomRate = zoom;
+ m_zoomBeginningRate = zoom;
m_baseScaleFactor = pageClientImpl->scaleFactor();
m_newScaleFactor = m_baseScaleFactor;
+ m_zoomBaseRate = m_baseScaleFactor;
m_currentScaleFactor = m_baseScaleFactor;
m_newScrollPosition = m_baseScrollPosition = pageClientImpl->scrollPosition();
m_centerPoint = centerPoint;
void Zoom::update(const double zoom, const IntPoint& centerPoint)
{
if (!m_isZooming)
- start(centerPoint, IntPoint());
+ start(centerPoint, IntPoint(), zoom);
+
+ double scaleDiff = zoom - m_zoomRate;
+ double newScaleFactor = m_newScaleFactor + (m_zoomBaseRate * (scaleDiff / m_zoomBeginningRate));
+ m_zoomRate = zoom;
PageClientImpl* pageClientImpl = m_viewImpl->pageClient.get();
EINA_SAFETY_ON_NULL_RETURN(pageClientImpl);
#if ENABLE(TIZEN_WEBKIT2_TEXT_ZOOM)
- double newScaleFactor = m_baseScaleFactor * zoom;
- if (!m_viewImpl->page()->pageGroup()->preferences()->textZoomEnabled())
- newScaleFactor = pageClientImpl->adjustScaleWithViewport(newScaleFactor);
+ if (m_viewImpl->page()->pageGroup()->preferences()->textZoomEnabled())
+ newScaleFactor = m_baseScaleFactor * zoom;
+ else {
+ double adjustedScaleFactor = pageClientImpl->adjustScaleWithViewport(newScaleFactor);
+ if (adjustedScaleFactor != newScaleFactor) {
+ m_zoomBeginningRate = zoom;
+ newScaleFactor = m_zoomBaseRate = adjustedScaleFactor;
+ }
+ }
#else
- double newScaleFactor = pageClientImpl->adjustScaleWithViewport(m_baseScaleFactor * zoom);
+ double adjustedScaleFactor = pageClientImpl->adjustScaleWithViewport(newScaleFactor);
+ if (adjustedScaleFactor != newScaleFactor) {
+ m_zoomBeginningRate = zoom;
+ newScaleFactor = m_zoomBaseRate = adjustedScaleFactor;
+ }
#endif
m_newScaleFactor = newScaleFactor;
}
m_isZooming = false;
+ m_zoomBeginningRate = 1.0;
+ m_zoomRate = 1.0;
+
#if ENABLE(TIZEN_LOW_SCALE_LAYER)
m_viewImpl->page()->setPaintOnlyLowScaleLayer(false);
#endif
}
~Zoom();
- void start(const WebCore::IntPoint& centerPoint, const WebCore::IntPoint& viewLocation);
+ void start(const WebCore::IntPoint& centerPoint, const WebCore::IntPoint& viewLocation, const double zoom);
void update(const double zoom, const WebCore::IntPoint& centerPoint);
void stop();
bool m_isZooming;
bool m_isZoomInformationUpdated;
bool m_isScaleFactorChanged;
+ double m_zoomRate;
+ double m_zoomBeginningRate;
+ double m_zoomBaseRate;
double m_baseScaleFactor;
double m_newScaleFactor;
double m_currentScaleFactor;
#if ENABLE(TIZEN_DEFER_FIXED_LAYER_UPDATE)
, m_needUpdateFixedLayerPosition(false)
#endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ , m_needsSyncAnimation(false)
+#endif
{
#if ENABLE(TIZEN_WEBKIT2_TILED_AC)
m_webPage->corePage()->settings()->setScrollingCoordinatorEnabled(true);
}
#endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ if (m_needsSyncAnimation) {
+ m_rootLayer->syncInvalidationForBlurFilter();
+ m_needsSyncAnimation = false;
+ }
+#endif
+
#if ENABLE(TIZEN_WEBKIT2_TILED_AC_SHARED_PLATFORM_SURFACE)
WebProcess::shared().platformSurfacePool()->shrinkIfNeeded();
SharedPlatformSurfaceManagement::getInstance().allowRemove();
virtual void setAccelerationMode(bool mode) { m_accelerationMode = (mode ? OpenGLMode : SoftwareMode); }
virtual AccelerationMode accelerationMode() const { return m_accelerationMode; }
#endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ virtual bool needsSyncAnimation() { return m_needsSyncAnimation; }
+ virtual void setNeedsSyncAnimation() { m_needsSyncAnimation = true; }
+#endif
+
#if ENABLE(TIZEN_UPDATE_ONLY_VISIBLE_AREA_STATE)
void updateOnlyVisibleAreaState(bool state);
#endif
#if ENABLE(TIZEN_DEFER_FIXED_LAYER_UPDATE)
bool m_needUpdateFixedLayerPosition;
#endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ bool m_needsSyncAnimation;
+#endif
};
}
#if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_SCROLLBAR)
, m_animationTimer(this, &WebGraphicsLayer::animationTimerFired)
#endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ , m_needsPaintBlurFilter(false)
+ , m_needsInvalidationForBlurFilter(false)
+#endif
{
static WebLayerID nextLayerID = 1;
m_id = nextLayerID++;
clearFilters();
didChangeFilters();
}
+ m_needsPaintBlurFilter = true;
return false;
}
+ m_needsPaintBlurFilter = false;
#endif
if (filters() == newFilters)
}
m_inUpdateMode = true;
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ if (filterPaintingDisabled())
+ m_needsInvalidationForBlurFilter |= m_mainBackingStore ? m_mainBackingStore->hasDirtyRect() : true;
+ else
+ m_needsInvalidationForBlurFilter = false;
+#endif
+
// This is the only place we (re)create the main tiled backing store, once we
// have a remote client and we are ready to send our data to the UI process.
if (!m_mainBackingStore)
didChangeAnimations();
#endif
didChangeLayerState();
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ if (m_webGraphicsLayerClient)
+ m_webGraphicsLayerClient->setNeedsSyncAnimation();
+#endif
return true;
}
}
#endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+bool WebGraphicsLayer::filterPaintingDisabled() const
+{
+ if (m_webGraphicsLayerClient && m_webGraphicsLayerClient->needsSyncAnimation() && m_needsPaintBlurFilter)
+ return true;
+
+ return false;
+}
+
+void WebGraphicsLayer::syncInvalidationForBlurFilter()
+{
+ if (m_needsInvalidationForBlurFilter) {
+ // Filter effect was not applied so make dirty rect to repaint.
+ setNeedsDisplay();
+ m_needsInvalidationForBlurFilter = false;
+ }
+
+ for (size_t i = 0; i < children().size(); ++i)
+ children()[i]->syncInvalidationForBlurFilter();
+}
+#endif
}
#endif
enum AccelerationMode { NotReady, SoftwareMode, OpenGLMode };
virtual AccelerationMode accelerationMode() const = 0;
#endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ virtual bool needsSyncAnimation() = 0;
+ virtual void setNeedsSyncAnimation() = 0;
+#endif
};
}
virtual double backingStoreMemoryEstimate() const;
#endif
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ virtual bool filterPaintingDisabled() const ;
+ virtual void syncInvalidationForBlurFilter();
+#endif
+
private:
virtual void willBeDestroyed();
WebKit::WebLayerID m_id;
#if ENABLE(TIZEN_CSS_OVERFLOW_SCROLL_SCROLLBAR)
WebCore::Timer<WebGraphicsLayer> m_animationTimer;
#endif
+
+#if ENABLE(TIZEN_USE_SW_PATH_FOR_BLUR_FILTER)
+ bool m_needsPaintBlurFilter;
+ bool m_needsInvalidationForBlurFilter;
+#endif
};
WebGraphicsLayer* toWebGraphicsLayer(GraphicsLayer*);