forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			161 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			161 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 | |
| /* ***** BEGIN LICENSE BLOCK *****
 | |
|  * Version: NPL 1.1/GPL 2.0/LGPL 2.1
 | |
|  *
 | |
|  * The contents of this file are subject to the Netscape Public License
 | |
|  * Version 1.1 (the "License"); you may not use this file except in
 | |
|  * compliance with the License. You may obtain a copy of the License at
 | |
|  * http://www.mozilla.org/NPL/
 | |
|  *
 | |
|  * Software distributed under the License is distributed on an "AS IS" basis,
 | |
|  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 | |
|  * for the specific language governing rights and limitations under the
 | |
|  * License.
 | |
|  *
 | |
|  * The Original Code is mozilla.org code.
 | |
|  *
 | |
|  * The Initial Developer of the Original Code is 
 | |
|  * Netscape Communications Corporation.
 | |
|  * Portions created by the Initial Developer are Copyright (C) 1998
 | |
|  * the Initial Developer. All Rights Reserved.
 | |
|  *
 | |
|  * Contributor(s):
 | |
|  *
 | |
|  * Alternatively, the contents of this file may be used under the terms of
 | |
|  * either the GNU General Public License Version 2 or later (the "GPL"), or 
 | |
|  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 | |
|  * in which case the provisions of the GPL or the LGPL are applicable instead
 | |
|  * of those above. If you wish to allow use of your version of this file only
 | |
|  * under the terms of either the GPL or the LGPL, and not to allow others to
 | |
|  * use your version of this file under the terms of the NPL, indicate your
 | |
|  * decision by deleting the provisions above and replace them with the notice
 | |
|  * and other provisions required by the GPL or the LGPL. If you do not delete
 | |
|  * the provisions above, a recipient may use your version of this file under
 | |
|  * the terms of any one of the NPL, the GPL or the LGPL.
 | |
|  *
 | |
|  * ***** END LICENSE BLOCK ***** */
 | |
| 
 | |
| 
 | |
| #include <windows.h>
 | |
| #include <windowsx.h>
 | |
| 
 | |
| #include "plugin.h"
 | |
| 
 | |
| //////////////////////////////////////
 | |
| //
 | |
| // general initialization and shutdown
 | |
| //
 | |
| NPError NS_PluginInitialize()
 | |
| {
 | |
|   return NPERR_NO_ERROR;
 | |
| }
 | |
| 
 | |
| void NS_PluginShutdown()
 | |
| {
 | |
| }
 | |
| 
 | |
| /////////////////////////////////////////////////////////////
 | |
| //
 | |
| // construction and destruction of our plugin instance object
 | |
| //
 | |
| nsPluginInstanceBase * NS_NewPluginInstance(NPP aInstance)
 | |
| {
 | |
|   nsPluginInstance * plugin = new nsPluginInstance(aInstance);
 | |
|   return plugin;
 | |
| }
 | |
| 
 | |
| void NS_DestroyPluginInstance(nsPluginInstanceBase * aPlugin)
 | |
| {
 | |
|   if(aPlugin)
 | |
|     delete aPlugin;
 | |
| }
 | |
| 
 | |
| ////////////////////////////////////////
 | |
| //
 | |
| // nsPluginInstance class implementation
 | |
| //
 | |
| nsPluginInstance::nsPluginInstance(NPP aInstance) : nsPluginInstanceBase(),
 | |
|   mInstance(aInstance),
 | |
|   mInitialized(FALSE)
 | |
| {
 | |
|   mhWnd = NULL;
 | |
| }
 | |
| 
 | |
| nsPluginInstance::~nsPluginInstance()
 | |
| {
 | |
| }
 | |
| 
 | |
| static LRESULT CALLBACK PluginWinProc(HWND, UINT, WPARAM, LPARAM);
 | |
| static WNDPROC lpOldProc = NULL;
 | |
| 
 | |
| NPBool nsPluginInstance::init(NPWindow* aWindow)
 | |
| {
 | |
|   if(aWindow == NULL)
 | |
|     return FALSE;
 | |
| 
 | |
|   mhWnd = (HWND)aWindow->window;
 | |
|   if(mhWnd == NULL)
 | |
|     return FALSE;
 | |
| 
 | |
|   // subclass window so we can intercept window messages and
 | |
|   // do our drawing to it
 | |
|   lpOldProc = SubclassWindow(mhWnd, (WNDPROC)PluginWinProc);
 | |
| 
 | |
|   // associate window with our nsPluginInstance object so we can access 
 | |
|   // it in the window procedure
 | |
|   SetWindowLong(mhWnd, GWL_USERDATA, (LONG)this);
 | |
| 
 | |
|   mInitialized = TRUE;
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| void nsPluginInstance::shut()
 | |
| {
 | |
|   // subclass it back
 | |
|   SubclassWindow(mhWnd, lpOldProc);
 | |
|   mhWnd = NULL;
 | |
|   mInitialized = FALSE;
 | |
| }
 | |
| 
 | |
| NPBool nsPluginInstance::isInitialized()
 | |
| {
 | |
|   return mInitialized;
 | |
| }
 | |
| 
 | |
| const char * nsPluginInstance::getVersion()
 | |
| {
 | |
|   return NPN_UserAgent(mInstance);
 | |
| }
 | |
| 
 | |
| static LRESULT CALLBACK PluginWinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
 | |
| {
 | |
|   switch (msg) {
 | |
|     case WM_PAINT:
 | |
|       {
 | |
|         // draw a frame and display the string
 | |
|         PAINTSTRUCT ps;
 | |
|         HDC hdc = BeginPaint(hWnd, &ps);
 | |
|         RECT rc;
 | |
|         GetClientRect(hWnd, &rc);
 | |
|         FrameRect(hdc, &rc, GetStockBrush(BLACK_BRUSH));
 | |
| 
 | |
|         // get our plugin instance object and ask it for the version string
 | |
|         nsPluginInstance *plugin = (nsPluginInstance *)GetWindowLong(hWnd, GWL_USERDATA);
 | |
|         if (plugin) {
 | |
|           const char * string = plugin->getVersion();
 | |
|           DrawText(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 | |
|         }
 | |
|         else {
 | |
|           char string[] = "Error occured";
 | |
|           DrawText(hdc, string, strlen(string), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
 | |
|         }
 | |
| 
 | |
|         EndPaint(hWnd, &ps);
 | |
|       }
 | |
|       break;
 | |
|     default:
 | |
|       break;
 | |
|   }
 | |
| 
 | |
|   return DefWindowProc(hWnd, msg, wParam, lParam);
 | |
| }
 | 
