39 #include "WebFrameView.h" |
39 #include "WebFrameView.h" |
40 #include "WebSurface.h" |
40 #include "WebSurface.h" |
41 #include "BrCtl.h" |
41 #include "BrCtl.h" |
42 #include "Frame.h" |
42 #include "Frame.h" |
43 #include "WebCursor.h" |
43 #include "WebCursor.h" |
|
44 #include "WebPointerEventHandler.h" |
44 #include "WebPageScrollHandler.h" |
45 #include "WebPageScrollHandler.h" |
|
46 #include "WebKitLogger.h" |
45 |
47 |
46 using namespace WebCore; |
48 using namespace WebCore; |
|
49 using namespace RT_GestureHelper; |
47 // CONSTANTS |
50 // CONSTANTS |
48 const TInt KPluginGranularity = 3; |
51 const TInt KPluginGranularity = 3; |
49 _LIT(KPath,"c:\\system\\temp\\"); |
52 _LIT(KPath,"c:\\system\\temp\\"); |
50 |
53 |
51 void panicPlugin(TInt error = KErrNone) |
54 void panicPlugin(TInt error = KErrNone) |
154 } |
157 } |
155 |
158 |
156 void PluginWin::windowChangedL() |
159 void PluginWin::windowChangedL() |
157 { |
160 { |
158 if (m_fullscreen) return; |
161 if (m_fullscreen) return; |
|
162 PlayPausePluginL(); |
159 if (m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->setwindow ){ |
163 if (m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->setwindow ){ |
160 NPWindow window; |
164 NPWindow window; |
161 TRect rect( m_pluginskin->getPluginWinRect() ); |
165 TRect rect( m_pluginskin->getPluginWinRect() ); |
162 TRect clipRect = m_pluginskin->getClipRect(); |
166 TRect clipRect = m_pluginskin->getClipRect(); |
163 TRect myRect = Rect(); |
167 TRect myRect = Rect(); |
657 // CPluginWin::HitRegionContains |
661 // CPluginWin::HitRegionContains |
658 // ----------------------------------------------------------------------------- |
662 // ----------------------------------------------------------------------------- |
659 // |
663 // |
660 TBool PluginWin::HitRegionContains(const TPoint &aPoint, const CCoeControl &/*aControl*/) const |
664 TBool PluginWin::HitRegionContains(const TPoint &aPoint, const CCoeControl &/*aControl*/) const |
661 { |
665 { |
|
666 PluginHandler* pluginHandler = WebCore::StaticObjectsContainer::instance()->pluginHandler(); |
|
667 pluginHandler->setPluginToActivate(NULL); |
662 |
668 |
663 if (m_pluginskin->frame()->frameView()->topView()->focusedElementType() != TBrCtlDefs::EElementActivatedObjectBox) |
669 if (m_pluginskin->frame()->frameView()->topView()->focusedElementType() != TBrCtlDefs::EElementActivatedObjectBox) |
664 { |
670 { |
665 |
671 |
666 if ( !m_pluginskin->CanInteract() && !m_pluginskin->pluginPlayer() ) |
672 if ( !m_pluginskin->CanInteract() && !m_pluginskin->pluginPlayer() ) |
667 { |
673 { |
668 m_pluginskin->activate(); |
674 m_pluginskin->activate(); |
669 } |
675 } |
670 else { |
676 else { |
|
677 /* We are storing plugin that we want to acrivate here |
|
678 * When we get to WebPointerEventHandler::HandleGesture() we will check |
|
679 * if this pointer != NULL and will send mousePress event to WebCore. |
|
680 * This will trigger the plugin activation. |
|
681 */ |
|
682 pluginHandler->setPluginToActivate(m_pluginskin); |
671 TPoint point = m_pluginskin->getPluginWinRect().iTl + aPoint; |
683 TPoint point = m_pluginskin->getPluginWinRect().iTl + aPoint; |
672 |
684 |
673 // Plugin gets pointer event. Activate plugin |
685 // Plugin gets pointer event. Activate plugin |
674 control(m_pluginskin->frame())->webView()->setFocusNone(); |
686 control(m_pluginskin->frame())->webView()->setFocusNone(); |
675 |
687 |
676 WebCursor* cursor = StaticObjectsContainer::instance()->webCursor(); |
688 WebCursor* cursor = StaticObjectsContainer::instance()->webCursor(); |
677 cursor->setPosition(point); |
689 cursor->setPosition(point); |
678 TKeyEvent keyEvent; |
|
679 keyEvent.iModifiers = 0; |
|
680 keyEvent.iRepeats = 0; |
|
681 keyEvent.iCode = EKeyDevice3; |
|
682 keyEvent.iScanCode = EStdKeyDevice3; |
|
683 CCoeEnv::Static()->SimulateKeyEventL(keyEvent, EEventKeyDown); |
|
684 CCoeEnv::Static()->SimulateKeyEventL(keyEvent, EEventKey); |
|
685 CCoeEnv::Static()->SimulateKeyEventL(keyEvent, EEventKeyUp); |
|
686 PluginWin* win = const_cast<PluginWin*>(this); |
|
687 } |
690 } |
688 } |
691 } |
689 return ETrue; |
692 return ETrue; |
690 } |
693 } |
691 |
694 |
723 } |
726 } |
724 |
727 |
725 void PluginWin::TogleScreenMode(bool aFullScreen) |
728 void PluginWin::TogleScreenMode(bool aFullScreen) |
726 { |
729 { |
727 m_fullscreen = aFullScreen; |
730 m_fullscreen = aFullScreen; |
728 WebFrame* mf = mainFrame(m_pluginskin->frame()); |
731 CBrCtl* brCtl = control(m_pluginskin->frame()); |
|
732 |
|
733 StaticObjectsContainer::instance()->setPluginFullscreen(aFullScreen); |
|
734 brCtl->reportStateChanged(TBrCtlDefs::EStatePluginFullScreen, m_fullscreen); |
|
735 } |
|
736 void PluginWin::adaptiveZoom(const TPoint& aCurPosition) |
|
737 { |
729 CBrCtl* brCtl = control(m_pluginskin->frame()); |
738 CBrCtl* brCtl = control(m_pluginskin->frame()); |
730 WebView* view = brCtl->webView(); |
739 WebView* view = brCtl->webView(); |
731 |
740 WebCursor* cursor = StaticObjectsContainer::instance()->webCursor(); |
732 view->setPluginFullscreen(aFullScreen); |
741 cursor->setPosition(aCurPosition); |
733 brCtl->reportStateChanged(TBrCtlDefs::EStatePluginFullScreen, m_fullscreen); |
742 view->setZoomLevelAdaptively(); |
734 } |
743 } |
735 |
|
736 void PluginWin::NotifyPluginVisible (TBool visible) |
744 void PluginWin::NotifyPluginVisible (TBool visible) |
737 |
745 |
738 { |
746 { |
739 if(m_notifier) |
747 if(m_notifier) |
740 { |
748 { |
746 { |
754 { |
747 TRAP_IGNORE(m_notifier->NotifyL(MPluginNotifier::EPluginInvisible, (void*)0)); |
755 TRAP_IGNORE(m_notifier->NotifyL(MPluginNotifier::EPluginInvisible, (void*)0)); |
748 } |
756 } |
749 } |
757 } |
750 } |
758 } |
|
759 void PluginWin::PlayPausePluginL () |
|
760 { |
|
761 if(m_notifier) |
|
762 { |
|
763 CBrCtl* brCtl = control(m_pluginskin->frame()); |
|
764 WebView* view = brCtl->webView(); |
|
765 TBool scrolling = view->viewIsScrolling(); |
|
766 if (scrolling) { |
|
767 m_notifier->NotifyL( MPluginNotifier::EPluginPause, (void*)1 ); |
|
768 } |
|
769 else { |
|
770 m_notifier->NotifyL( MPluginNotifier::EPluginPause, (void*)0 ); |
|
771 } |
|
772 } |
|
773 } |
|
774 |
|
775 void PluginWin::HandlePointerEventFromPluginL(const TPointerEvent& aEvent) |
|
776 { |
|
777 CBrCtl* brCtl = control(m_pluginskin->frame()); |
|
778 WebView* view = brCtl->webView(); |
|
779 TPointerEvent event(aEvent); |
|
780 |
|
781 if (!StaticObjectsContainer::instance()->isPluginFullscreen()) { |
|
782 event.iPosition = aEvent.iPosition - view->PositionRelativeToScreen(); |
|
783 } |
|
784 view->pointerEventHandler()->HandlePointerEventL(event); |
|
785 } |
|
786 |
|
787 |
|
788 TBool PluginWin::HandleGesture(const TGestureEvent& aEvent) |
|
789 { |
|
790 TBool ret = EFalse; |
|
791 if (m_control) { |
|
792 TGestureEvent gestEvent(aEvent); |
|
793 CBrCtl* brCtl = control(m_pluginskin->frame()); |
|
794 WebView* view = brCtl->webView(); |
|
795 TPoint newPos = aEvent.CurrentPos(); |
|
796 TPoint startPos = aEvent.StartPos(); |
|
797 TPoint viewPos = view->PositionRelativeToScreen(); |
|
798 TPoint ctrlPos = m_control->PositionRelativeToScreen(); |
|
799 |
|
800 if (!StaticObjectsContainer::instance()->isPluginFullscreen()) { |
|
801 // adjust the position to make it relative to top left corner of |
|
802 newPos += viewPos; |
|
803 startPos += viewPos; |
|
804 gestEvent.SetCurrentPos(newPos); |
|
805 gestEvent.SetStartPos(startPos); |
|
806 } |
|
807 |
|
808 if (StaticObjectsContainer::instance()->isPluginFullscreen() || |
|
809 m_control->Rect().Contains(newPos - ctrlPos)) { |
|
810 NPEvent event; |
|
811 NPEventPointer ev; |
|
812 event.event = ENppEventPointer; |
|
813 ev.reserved = &gestEvent; |
|
814 ev.pointerEvent = NULL; |
|
815 event.param = &ev; |
|
816 ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), |
|
817 static_cast<void*>(&event)); |
|
818 } |
|
819 } |
|
820 return ret; |
|
821 |
|
822 } |