/* Copyright (c) 2002-2012 Croteam Ltd. 
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation


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.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */

// ActiveTextureWnd.cpp : implementation file
//

#include "stdafx.h"
#include "ActiveTextureWnd.h"

#ifdef _DEBUG
#undef new
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CActiveTextureWnd

CActiveTextureWnd::CActiveTextureWnd()
{
  m_pDrawPort = NULL;
  m_pViewPort = NULL;
}

CActiveTextureWnd::~CActiveTextureWnd()
{
}


BEGIN_MESSAGE_MAP(CActiveTextureWnd, CWnd)
	//{{AFX_MSG_MAP(CActiveTextureWnd)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CActiveTextureWnd message handlers

void CActiveTextureWnd::OnPaint() 
{
  {
  CPaintDC dc(this);
  }

  if( (m_pViewPort == NULL) && (m_pDrawPort == NULL) )
  {
    // initialize canvas for active texture button
    _pGfx->CreateWindowCanvas( m_hWnd, &m_pViewPort, &m_pDrawPort);
  }

  // if there is a valid drawport, and the drawport can be locked
  if( (m_pDrawPort != NULL) && (m_pDrawPort->Lock()) )
  {
    PIXaabbox2D rectPict;
    rectPict = PIXaabbox2D( PIX2D(0, 0),
                            PIX2D(m_pDrawPort->GetWidth(), m_pDrawPort->GetHeight()));
    // clear texture area to black
    m_pDrawPort->Fill( C_BLACK | CT_OPAQUE);
    // erase z-buffer
    m_pDrawPort->FillZBuffer(ZBUF_BACK);
    
    // if there is valid active texture
    if( theApp.m_ptdActiveTexture != NULL)
    {
      CTextureObject toActiveTexture;
      toActiveTexture.SetData( theApp.m_ptdActiveTexture);
      m_pDrawPort->PutTexture( &toActiveTexture, rectPict);
    }
    else
    {
      // type text saying none selected
      m_pDrawPort->SetFont( theApp.m_pfntSystem);
      m_pDrawPort->SetTextAspect( 1.0f);
      m_pDrawPort->PutText( "None", 25, 20);
      m_pDrawPort->PutText( "selected", 8, 50);
    }

    // unlock the drawport
    m_pDrawPort->Unlock();

    if (m_pViewPort!=NULL)
    {
      m_pViewPort->SwapBuffers();
    }
  }
}

void CActiveTextureWnd::OnLButtonDown(UINT nFlags, CPoint point) 
{
  if( theApp.m_ptdActiveTexture == NULL) return;
  HGLOBAL hglobal = CreateHDrop( theApp.m_ptdActiveTexture->GetName());
  m_DataSource.CacheGlobalData( CF_HDROP, hglobal);
  m_DataSource.DoDragDrop( DROPEFFECT_COPY);
  CWnd::OnLButtonDown(nFlags, point);
}

void CActiveTextureWnd::OnRButtonDown(UINT nFlags, CPoint point) 
{
	CWnd::OnRButtonDown(nFlags, point);
}

void CActiveTextureWnd::OnDestroy() 
{
	CWnd::OnDestroy();

  if( m_pViewPort != NULL)
  {
    _pGfx->DestroyWindowCanvas( m_pViewPort);
    m_pViewPort = NULL;
  }

  m_pViewPort = NULL;
  m_pDrawPort = NULL;
}