void NetscapePlugin::geometryDidChange(const IntSize& pluginSize, const IntRect& clipRect, const AffineTransform& pluginToRootViewTransform) { ASSERT(m_isStarted); if (pluginSize == m_pluginSize && m_clipRect == clipRect && m_pluginToRootViewTransform == pluginToRootViewTransform) { // Nothing to do. return; } bool shouldCallSetWindow = true; // If the plug-in doesn't want window relative coordinates, we don't need to call setWindow unless its size or clip rect changes. if (m_hasCalledSetWindow && wantsPluginRelativeNPWindowCoordinates() && m_pluginSize == pluginSize && m_clipRect == clipRect) shouldCallSetWindow = false; m_pluginSize = pluginSize; m_clipRect = clipRect; m_pluginToRootViewTransform = pluginToRootViewTransform; IntPoint frameRectLocationInWindowCoordinates = m_pluginToRootViewTransform.mapPoint(IntPoint()); m_frameRectInWindowCoordinates = IntRect(frameRectLocationInWindowCoordinates, m_pluginSize); platformGeometryDidChange(); if (!shouldCallSetWindow) return; callSetWindow(); }
bool NetscapePlugin::platformPostInitializeWindowless() { Display* display = x11HostDisplay(); m_npWindow.type = NPWindowTypeDrawable; m_npWindow.window = 0; int depth = displayDepth(); #if PLATFORM(QT) ASSERT(depth == 16 || depth == 24 || depth == 32); #endif NPSetWindowCallbackStruct* callbackStruct = static_cast<NPSetWindowCallbackStruct*>(m_npWindow.ws_info); callbackStruct->display = display; callbackStruct->depth = depth; XVisualInfo visualTemplate; visualTemplate.screen = x11Screen(); visualTemplate.depth = depth; visualTemplate.c_class = TrueColor; int numMatching; XVisualInfo* visualInfo = XGetVisualInfo(display, VisualScreenMask | VisualDepthMask | VisualClassMask, &visualTemplate, &numMatching); ASSERT(visualInfo); Visual* visual = visualInfo[0].visual; ASSERT(visual); XFree(visualInfo); callbackStruct->visual = visual; callbackStruct->colormap = XCreateColormap(display, rootWindowID(), visual, AllocNone); callSetWindow(); return true; }
void NetscapePlugin::geometryDidChange(const IntRect& frameRect, const IntRect& clipRect) { ASSERT(m_isStarted); if (m_frameRect == frameRect && m_clipRect == clipRect) { // Nothing to do. return; } m_frameRect = frameRect; m_clipRect = clipRect; platformGeometryDidChange(); callSetWindow(); }
void NetscapePlugin::platformPaint(GraphicsContext* context, const IntRect& dirtyRect, bool) { CurrentPluginSetter setCurrentPlugin(this); // FIXME: Call SetWindow here if we haven't called it yet (see r59904). if (m_isWindowed) { // FIXME: Paint windowed plugins into context if context->shouldIncludeChildWindows() is true. return; } controller()->willSendEventToPlugin(); LocalWindowsContext windowsContext(context, dirtyRect, m_isTransparent); m_npWindow.type = NPWindowTypeDrawable; m_npWindow.window = windowsContext.hdc(); WINDOWPOS windowpos = { 0, 0, 0, 0, 0, 0, 0 }; IntPoint pluginLocationInRootViewCoordinates = convertToRootView(IntPoint()); windowpos.x = pluginLocationInRootViewCoordinates.x(); windowpos.y = pluginLocationInRootViewCoordinates.y(); windowpos.cx = m_pluginSize.width(); windowpos.cy = m_pluginSize.height(); NPEvent npEvent; npEvent.event = WM_WINDOWPOSCHANGED; npEvent.wParam = 0; npEvent.lParam = reinterpret_cast<uintptr_t>(&windowpos); NPP_HandleEvent(&npEvent); callSetWindow(); RECT dirtyWinRect = dirtyRect; npEvent.event = WM_PAINT; npEvent.wParam = reinterpret_cast<uintptr_t>(windowsContext.hdc()); npEvent.lParam = reinterpret_cast<uintptr_t>(&dirtyWinRect); NPP_HandleEvent(&npEvent); }
void NetscapePlugin::destroy() { ASSERT(m_isStarted); // Stop all streams. stopAllStreams(); #if !PLUGIN_ARCHITECTURE(MAC) m_npWindow.window = 0; callSetWindow(); #endif NPP_Destroy(0); m_isStarted = false; m_pluginController = 0; platformDestroy(); }
void NetscapePlugin::destroy() { ASSERT(m_isStarted); // Stop all streams. stopAllStreams(); #if !PLUGIN_ARCHITECTURE(MAC) && !PLUGIN_ARCHITECTURE(X11) m_npWindow.window = 0; callSetWindow(); #endif NPP_Destroy(0); m_isStarted = false; platformDestroy(); m_timers.clear(); }
bool NetscapePlugin::platformPostInitialize() { #if PLATFORM(X11) if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) { m_impl = NetscapePluginX11::create(*this); if (!m_impl) return false; } #endif // Windowed plugins need a platform implementation. if (!m_impl) return !m_isWindowed; m_npWindow.type = m_impl->windowType(); m_npWindow.window = m_impl->window(); m_npWindow.ws_info = m_impl->windowSystemInfo(); callSetWindow(); return true; }
bool NetscapePlugin::platformPostInitializeWindowed(bool needsXEmbed, uint64_t windowID) { m_npWindow.type = NPWindowTypeWindow; if (!needsXEmbed) { notImplemented(); return false; } Display* display = x11HostDisplay(); #if PLATFORM(GTK) // It seems flash needs the socket to be in the same process, // I guess it uses gdk_window_lookup(), so we create a new socket here // containing a plug with the UI process socket embedded. m_platformPluginWidget = gtk_plug_new(static_cast<Window>(windowID)); GtkWidget* socket = gtk_socket_new(); // Do not show the plug widget until the socket is connected. g_signal_connect_swapped(socket, "plug-added", G_CALLBACK(gtk_widget_show), m_platformPluginWidget); g_signal_connect(socket, "plug-removed", G_CALLBACK(socketPlugRemovedCallback), nullptr); gtk_container_add(GTK_CONTAINER(m_platformPluginWidget), socket); gtk_widget_show(socket); m_npWindow.window = GINT_TO_POINTER(gtk_socket_get_id(GTK_SOCKET(socket))); GdkWindow* window = gtk_widget_get_window(socket); NPSetWindowCallbackStruct* callbackStruct = static_cast<NPSetWindowCallbackStruct*>(m_npWindow.ws_info); callbackStruct->display = GDK_WINDOW_XDISPLAY(window); callbackStruct->visual = GDK_VISUAL_XVISUAL(gdk_window_get_visual(window)); callbackStruct->depth = gdk_visual_get_depth(gdk_window_get_visual(window)); callbackStruct->colormap = XCreateColormap(display, GDK_ROOT_WINDOW(), callbackStruct->visual, AllocNone); #else UNUSED_PARAM(windowID); #endif XFlush(display); callSetWindow(); return true; }