[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25060] trunk/blender/intern/ghost/intern: SVN maintenance.

gsr b3d gsr.b3d at infernal-iceberg.com
Wed Dec 2 02:23:29 CET 2009


Revision: 25060
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25060
Author:   gsrb3d
Date:     2009-12-02 02:23:29 +0100 (Wed, 02 Dec 2009)

Log Message:
-----------
SVN maintenance.

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp
    trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.h

Property Changed:
----------------
    trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp
    trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.h

Modified: trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp	2009-12-02 01:12:22 UTC (rev 25059)
+++ trunk/blender/intern/ghost/intern/GHOST_DropTargetWin32.cpp	2009-12-02 01:23:29 UTC (rev 25060)
@@ -1,426 +1,426 @@
-/**
- * $Id: $
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
- 
-#include "GHOST_Debug.h"
-#include "GHOST_DropTargetWin32.h"
-
-#ifdef GHOST_DEBUG
-// utility
-void printLastError(void);
-#endif // GHOST_DEBUG
-
-
-GHOST_DropTargetWin32::GHOST_DropTargetWin32(GHOST_WindowWin32 * window, GHOST_SystemWin32 * system)
-:
-m_window(window),
-m_system(system)
-{
-	m_cRef = 1;
-	m_hWnd = window->getHWND();
-	m_draggedObjectType = GHOST_kDragnDropTypeUnknown;
-	
-	// register our window as drop target
-	::RegisterDragDrop(m_hWnd, this);
-}
-
-GHOST_DropTargetWin32::~GHOST_DropTargetWin32()
-{
-	::RevokeDragDrop(m_hWnd);
-}
-
-
-/* 
- * 	IUnknown::QueryInterface
- */
-HRESULT __stdcall GHOST_DropTargetWin32::QueryInterface (REFIID riid, void ** ppvObj)
-{
-
-	if (!ppvObj)
-		return E_INVALIDARG;
-	*ppvObj = NULL;
-
-	if(riid == IID_IUnknown || riid == IID_IDropTarget)
-	{
-		AddRef();
-		*ppvObj = (void*)this;
-		return S_OK;
-	}
-	else
-	{
-		*ppvObj = 0;
-		return E_NOINTERFACE;
-	}
-}
-
-
-/* 
- *	IUnknown::AddRef 
- */
-
-ULONG __stdcall GHOST_DropTargetWin32::AddRef(void)
-{
-	return ::InterlockedIncrement(&m_cRef);
-}
-
-/* 
- * IUnknown::Release
- */
-ULONG __stdcall GHOST_DropTargetWin32::Release(void)
-{
-	ULONG refs = ::InterlockedDecrement(&m_cRef);
-		
-	if(refs == 0)
-	{
-		delete this;
-		return 0;
-	}
-	else
-	{
-		return refs;
-	}
-}
-
-/* 
- * Implementation of IDropTarget::DragEnter
- */
-HRESULT __stdcall GHOST_DropTargetWin32::DragEnter(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect)
-{
-	// we don't know yet if we accept the drop.
-	m_window->setAcceptDragOperation(false);
-	*pdwEffect = DROPEFFECT_NONE;
-	
-	m_draggedObjectType = getGhostType(pDataObject);
-	m_system->pushDragDropEvent(GHOST_kEventDraggingEntered, m_draggedObjectType, m_window, pt.x, pt.y, NULL);
-	return S_OK;
-}
-
-/* 
- * Implementation of IDropTarget::DragOver
- */
-HRESULT __stdcall GHOST_DropTargetWin32::DragOver(DWORD grfKeyState, POINTL pt, DWORD * pdwEffect)
-{
-	if(m_window->canAcceptDragOperation())
-	{
-		*pdwEffect = allowedDropEffect(*pdwEffect);
-	}
-	else
-	{
-		*pdwEffect = DROPEFFECT_NONE;
-		//*pdwEffect = DROPEFFECT_COPY; // XXX Uncomment to test drop. Drop will not be called if pdwEffect == DROPEFFECT_NONE.
-	}
-	m_system->pushDragDropEvent(GHOST_kEventDraggingUpdated, m_draggedObjectType, m_window, pt.x, pt.y, NULL);
-	return S_OK;
-}
-
-/* 
- * Implementation of IDropTarget::DragLeave
- */
-HRESULT __stdcall GHOST_DropTargetWin32::DragLeave(void)
-{
-	m_system->pushDragDropEvent(GHOST_kEventDraggingExited, m_draggedObjectType, m_window, 0, 0, NULL);
-	m_draggedObjectType = GHOST_kDragnDropTypeUnknown;
-	return S_OK;
-}
-
-/* Implementation of IDropTarget::Drop
- * This function will not be called if pdwEffect is set to DROPEFFECT_NONE in 
- * the implementation of IDropTarget::DragOver
- */
-HRESULT __stdcall GHOST_DropTargetWin32::Drop(IDataObject * pDataObject, DWORD grfKeyState, POINTL pt, DWORD * pdwEffect)
-{
-	void * data = getGhostData(pDataObject);
-	if(m_window->canAcceptDragOperation())
-	{
-		*pdwEffect = allowedDropEffect(*pdwEffect);
-
-	}
-	else
-	{
-		*pdwEffect = DROPEFFECT_NONE;
-	}
-	if (data)
-		m_system->pushDragDropEvent(GHOST_kEventDraggingDropDone, m_draggedObjectType, m_window, pt.x, pt.y, data );
-		
-	m_draggedObjectType = GHOST_kDragnDropTypeUnknown;
-	return S_OK;
-}
-
-/* 
- * Helpers
- */
- 
-DWORD GHOST_DropTargetWin32::allowedDropEffect(DWORD dwAllowed)
-{
-	DWORD dwEffect = DROPEFFECT_NONE;
-	if(dwAllowed & DROPEFFECT_COPY) 
-		dwEffect = DROPEFFECT_COPY;
-
-	return dwEffect;
-}
-
-GHOST_TDragnDropTypes GHOST_DropTargetWin32::getGhostType(IDataObject * pDataObject)
-{
-	/* Text
-	 * Note: Unicode text is aviable as CF_TEXT too, the system can do the 
-	 * conversion, but we do the conversion ourself with WC_NO_BEST_FIT_CHARS.
-	 */
-	FORMATETC fmtetc = { CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
-	if(pDataObject->QueryGetData(&fmtetc) == S_OK)
-	{
-		return GHOST_kDragnDropTypeString;
-	}
-
-	// Filesnames
-	fmtetc.cfFormat = CF_HDROP;
-	if(pDataObject->QueryGetData(&fmtetc) == S_OK)
-	{
-		return GHOST_kDragnDropTypeFilenames;
-	}
-
-	return GHOST_kDragnDropTypeUnknown;
-}
-
-void * GHOST_DropTargetWin32::getGhostData(IDataObject * pDataObject)
-{
-	GHOST_TDragnDropTypes type = getGhostType(pDataObject);
-	switch(type)
-	{
-		case GHOST_kDragnDropTypeFilenames:
-			return getDropDataAsFilenames(pDataObject);
-			break;
-		case GHOST_kDragnDropTypeString:
-			return getDropDataAsString(pDataObject);
-			break;
-		case GHOST_kDragnDropTypeBitmap:
-			//return getDropDataAsBitmap(pDataObject);
-			break;
-		default:
-#ifdef GHOST_DEBUG
-			::printf("\nGHOST_kDragnDropTypeUnknown");
-#endif // GHOST_DEBUG
-			return NULL;
-			break;
-	}
-	return NULL;
-}
-
-void * GHOST_DropTargetWin32::getDropDataAsFilenames(IDataObject * pDataObject)
-{
-	UINT  totfiles, nvalid=0;
-	WCHAR fpath [MAX_PATH]; 
-	char * temp_path;
-	GHOST_TStringArray *strArray = NULL;
-	FORMATETC fmtetc = { CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
-	STGMEDIUM stgmed;
-	HDROP hdrop;
-
-	// Check if dataobject supplies the format we want.
-	// Double checking here, first in getGhostType.
-	if(pDataObject->QueryGetData(&fmtetc) == S_OK)
-	{
-		if(pDataObject->GetData(&fmtetc, &stgmed) == S_OK)
-		{
-			hdrop = (HDROP)::GlobalLock(stgmed.hGlobal);
-
-			totfiles = ::DragQueryFileW ( hdrop, -1, NULL, 0 );
-			if (!totfiles)
-			{
-				::GlobalUnlock(stgmed.hGlobal);
-				return NULL;
-			}
-
-			strArray = (GHOST_TStringArray*) ::malloc(sizeof(GHOST_TStringArray));
-			strArray->count = 0;
-			strArray->strings = (GHOST_TUns8**) ::malloc(totfiles*sizeof(GHOST_TUns8*));
-
-			for ( UINT nfile = 0; nfile < totfiles; nfile++ )
-			{
-				if ( ::DragQueryFileW ( hdrop, nfile, fpath, MAX_PATH ) > 0 )
-				{
-					if ( !WideCharToANSI(fpath, temp_path) )
-					{
-						continue;
-					} 
-					// Just ignore paths that could not be converted verbatim.
-					if (strpbrk(temp_path, "?"))
-					{
-#ifdef GHOST_DEBUG
-						::printf("\ndiscarding path that contains illegal characters: %s", temp_path);
-#endif // GHOST_DEBUG
-						::free(temp_path);
-						temp_path = NULL;
-						continue;
-					}
-					strArray->strings[nvalid] = (GHOST_TUns8*) temp_path;
-					strArray->count = nvalid+1;
-					nvalid++;
-				}
-			}
-			// Free up memory.
-			::GlobalUnlock(stgmed.hGlobal);
-			::ReleaseStgMedium(&stgmed);
-			
-			return strArray;
-		}
-	}
-	return NULL;
-}
-
-void * GHOST_DropTargetWin32::getDropDataAsString(IDataObject * pDataObject)
-{
-	char* tmp_string;
-	FORMATETC fmtetc = { CF_UNICODETEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
-	STGMEDIUM stgmed;
-
-	// Try unicode first.
-	// Check if dataobject supplies the format we want.
-	if(pDataObject->QueryGetData(&fmtetc) == S_OK)
-	{
-		if(pDataObject->GetData(&fmtetc, &stgmed) == S_OK)
-		{
-			LPCWSTR wstr = (LPCWSTR)::GlobalLock(stgmed.hGlobal);
-			if ( !WideCharToANSI(wstr, tmp_string) )
-			{
-				::GlobalUnlock(stgmed.hGlobal);
-				return NULL;
-			}
-			// Free memory
-			::GlobalUnlock(stgmed.hGlobal);
-			::ReleaseStgMedium(&stgmed);
-#ifdef GHOST_DEBUG
-			::printf("\n<converted droped unicode string>\n%s\n</droped converted unicode string>\n",tmp_string);
-#endif // GHOST_DEBUG
-			return tmp_string;
-		}
-	}
-
-	fmtetc.cfFormat = CF_TEXT;
-
-	if(pDataObject->QueryGetData(&fmtetc) == S_OK)
-	{
-		if(pDataObject->GetData(&fmtetc, &stgmed) == S_OK)
-		{
-			char * str = (char*)::GlobalLock(stgmed.hGlobal);
-			
-			tmp_string = (char*)::malloc(::strlen(str)+1);
-			if ( !tmp_string )
-			{
-				::GlobalUnlock(stgmed.hGlobal);
-				return NULL;
-			}
-
-			if ( !::strcpy(tmp_string, str) )
-			{
-				::free(tmp_string);
-				::GlobalUnlock(stgmed.hGlobal);
-				return NULL;
-			}
-			// Free memory
-			::GlobalUnlock(stgmed.hGlobal);
-			::ReleaseStgMedium(&stgmed);
-
-			return tmp_string;
-		}
-	}
-	
-	return NULL;
-}
-
-int GHOST_DropTargetWin32::WideCharToANSI(LPCWSTR in, char * &out)
-{
-	int size;
-	out = NULL; //caller should free if != NULL
-
-	// Get the required size.
-	size = ::WideCharToMultiByte(CP_ACP,		//System Default Codepage
-								0x00000400,		// WC_NO_BEST_FIT_CHARS
-								in,
-								-1,				//-1 null terminated, makes output null terminated too.
-								NULL,
-								0,
-								NULL,NULL
-			);
-	
-	if(!size) 
-	{
-#ifdef GHOST_DEBUG
-		::printLastError();
-#endif // GHOST_DEBUG
-		return 0;
-	}
-
-	out = (char*)::malloc(size);
-	if (!out)
-	{
-		::printf("\nmalloc failed!!!");
-		return 0;
-	}
-
-	size = ::WideCharToMultiByte(CP_ACP,
-								0x00000400,
-								in,
-								-1,
-								(LPSTR) out,
-								size,
-								NULL,NULL
-			);
-
-	if(!size)
-	{
-#ifdef GHOST_DEBUG
-		::printLastError();
-#endif //GHOST_DEBUG
-		::free(out);
-		out = NULL;
-	}
-	return size;
-}
-
-#ifdef GHOST_DEBUG
-void printLastError(void)
-{
-	LPTSTR s;
-	DWORD err;
-
-	err = GetLastError();
-	if(FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
-		FORMAT_MESSAGE_FROM_SYSTEM,
-		NULL,
-		err,
-		0,
-		(LPTSTR)&s,
-		0,
-		NULL)
-	)
-	{
-		printf("\nLastError: (%d) %s\n", (int)err, s);
-		LocalFree(s);
-	}
-}
-#endif // GHOST_DEBUG
-
+/**
+ * $Id$
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list