2015-10-27 4 views
0

Nous faisons un plugin pour le navigateur safari sur mac. Après la navigation sur internet, j'ai trouvé que généralement les plugins sur mac sont sans fenêtre mais je veux un plugin fenêtré. Même dans la fonction NPP_SetWindow j'ai essayé d'imprimer la valeur de la variable de type (qui est de type NPWindowType) comme suit:Un plugin (pour un safari sur Mac) peut-il être programmé en mode fenêtré ou sans fenêtre?

NPError NPP_SetWindow(NPP instance, NPWindow * pNPWindow) 
{ 
... 
printf("....: %d",pNPWindow->type); 
... 
} 

Il imprime i.e. sa valeur est NPWindowTypeDrawable signifie sans fenêtre.

De plus, je l'ai lu quelque part le code suivant:

NPError NPP_New(NPMIMEType pluginType, 
     NPP instance, uint16 mode, 
     int16 argc, char *argn[], 
     char *argv[], NPSavedData *saved) 
{ 
... 
NPError result = NPN_SetValue(instance, NPPVpluginWindowBool, (void*)false); 
} 

Ici, il dit qu'un plug-in peut être fait par la valeur sans fenêtre pour passer NPPVpluginWindowBool ​​ comme faux dans appel de fonction NPN_SetValue. Si un plugin ne fait pas cet appel, il est considéré comme un plugin fenêtré. Mais il est aussi dit que "les plug-ins sur Mac OS X sont toujours sans fenêtre". Je n'ai pas encore entendu parler de ça.

Ma question est, va passer vraie valeur pour NPPVpluginWindowBool ​​ faire ici plug-in de fenêtré? Je ne l'ai pas encore essayé.

S'il vous plaît suggérer comment faire un plugin fenêtré si un programme ou de toute autre manière autour de sorte que pNPWindow-> type (dans le premier extrait de code) serait également imprimer 1 i.e. NPWindowTypeWindow signifie plug-in fenêtré.

Merci.

Répondre

1

Il n'y a pas de plugin fenêtré sur Mac; il y avait à la fois, mais il n'y en a plus.

Maintenant que vous venez de modèles de dessin, et il y a trois:

  • CoreGraphics
  • CoreAnimation
  • InvalidatingCoreAnimation

Les deux premiers sont les seuls qui travaillent sur Safari. Il n'y a aucun moyen d'obtenir un objet fenêtre sur Mac. Il y avait un couple de hacks que vous pouviez utiliser avec Quartz et QuickDraw, peut-être aussi avec Carbon et CoreGraphics, mais ces modèles ont disparu depuis longtemps.

Voir aussi:

+0

Salut @taxilian, merci pour votre réponse. Pourriez-vous partager un exemple de code concernant "Vous pouvez obtenir un CGContextRef, puis créer votre propre NSWindow et NSView hors écran et les rendre dans le CGContextRef", lire l'un des liens partagés ci-dessus? – user2181750

+0

De même, existe-t-il un moyen d'obtenir NSWindow à partir de l'objet CGContextRef? – user2181750

+1

Vous ne pouvez pas obtenir une NSWindow à partir d'un CGContextRef. Anticiper les questions futures: il n'y a * aucun moyen * d'obtenir NSWindow du broswer dans le processus du plugin. Il ne s'agit pas d'être intelligent, ni de trouver une échappatoire, vous ne pouvez pas l'obtenir, car les pointeurs de fenêtre sur OS X sont spécifiques au processus et vous êtes dans un processus différent (comme je l'ai dit dans la réponse à un autre des questions). Ce que vous essayez de faire ne peut pas être fait. Je recommande de poser une question qui exprime un objectif de plus haut niveau afin que quelqu'un puisse essayer de vous orienter dans la bonne direction, plutôt que de demander des détails sur le mauvais chemin. – smorgan