summaryrefslogtreecommitdiff
path: root/win/Pieceprv.cpp
diff options
context:
space:
mode:
authorleo2006-01-20 06:14:06 +0000
committerleo2006-01-20 06:14:06 +0000
commita05319c8417b5bad66458baefa0cbf8dffa66291 (patch)
tree0fa2d53c3604a72b0dc88c886ec0bd828c99903f /win/Pieceprv.cpp
parent633c4ee66a14a6d7df81d82e315df64d7f4b10d8 (diff)
Made the Windows piece preview use the common preview code.
git-svn-id: http://svn.leocad.org/trunk@458 c7d43263-9d01-0410-8a33-9dba5d9f93d6
Diffstat (limited to 'win/Pieceprv.cpp')
-rw-r--r--win/Pieceprv.cpp151
1 files changed, 26 insertions, 125 deletions
diff --git a/win/Pieceprv.cpp b/win/Pieceprv.cpp
index 707edc3..bf1a714 100644
--- a/win/Pieceprv.cpp
+++ b/win/Pieceprv.cpp
@@ -8,6 +8,7 @@
#include "pieceinf.h"
#include "globals.h"
#include "project.h"
+#include "preview.h"
#ifdef _DEBUG
#define new DEBUG_NEW
@@ -20,10 +21,7 @@ static char THIS_FILE[] = __FILE__;
CPiecePreview::CPiecePreview()
{
- m_pPalette = NULL;
- m_hglRC = 0;
- m_pDC = NULL;
- m_pPieceInfo = NULL;
+ m_Preview = NULL;
}
CPiecePreview::~CPiecePreview()
@@ -50,147 +48,50 @@ BOOL CPiecePreview::OnEraseBkgnd(CDC* pDC)
return TRUE;
}
-void CPiecePreview::SetPieceInfo(PieceInfo* pInfo)
-{
- if (m_pPieceInfo != NULL)
- m_pPieceInfo->DeRef();
- m_pPieceInfo = pInfo;
- m_pPieceInfo->AddRef();
-}
-
void CPiecePreview::OnPaint()
{
- CPaintDC dc(this); // device context for painting
- if (!IsWindowEnabled() || (m_pPieceInfo == NULL))
+ if (!IsWindowEnabled() || (m_Preview == NULL))
return;
- HDC oldDC = pfnwglGetCurrentDC();
- HGLRC oldRC = pfnwglGetCurrentContext();
-
- if (m_pPalette)
- {
- m_pDC->SelectPalette(m_pPalette, FALSE);
- m_pDC->RealizePalette();
- }
-
- pfnwglMakeCurrent(m_pDC->m_hDC, m_hglRC);
-
- double aspect = (float)m_szView.cx/(float)m_szView.cy;
- glViewport(0, 0, m_szView.cx, m_szView.cy);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(30.0f, aspect, 1.0f, 100.0f);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-
- gluLookAt (-5, -5, 4, 0, 0, 0, 0, 0, 1);
- m_pPieceInfo->ZoomExtents(30.0f, (float)aspect);
-
- float pos[4] = { 0, 0, 10, 0 }, *bg = project->GetBackgroundColor();
- glLightfv(GL_LIGHT0, GL_POSITION, pos);
- glClearColor(bg[0], bg[1], bg[2], bg[3]);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- m_pPieceInfo->RenderPiece(project->GetCurrentColor());
-
- glFinish();
- OpenGLSwapBuffers (m_pDC->m_hDC);
- pfnwglMakeCurrent (oldDC, oldRC);
+ m_Preview->OnDraw();
}
void CPiecePreview::OnSize(UINT nType, int cx, int cy)
{
+ m_Preview->OnSize(cx, cy);
CWnd::OnSize(nType, cx, cy);
-
- if (cy < 1) cy = 1;
- m_szView.cx = cx;
- m_szView.cy = cy;
}
int CPiecePreview::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
- if (CWnd::OnCreate(lpCreateStruct) == -1)
+ if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
-
- m_pDC = new CClientDC(this);
- ASSERT(m_pDC != NULL);
-
- // Fill in the Pixel Format Descriptor
- PIXELFORMATDESCRIPTOR pfd;
- memset(&pfd,0, sizeof(PIXELFORMATDESCRIPTOR));
-
- pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
- pfd.nVersion = 1;
- pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER;
- pfd.iPixelType = PFD_TYPE_RGBA;
- pfd.cColorBits = 24;
- pfd.cDepthBits = 32;
- pfd.iLayerType = PFD_MAIN_PLANE;
-
- int nPixelFormat = OpenGLChoosePixelFormat(m_pDC->m_hDC, &pfd);
- if (nPixelFormat == 0)
- return 0;
-
- if (!OpenGLSetPixelFormat(m_pDC->m_hDC, nPixelFormat, &pfd))
- return 0;
-
- m_pPalette = new CPalette;
-
- if (CreateRGBPalette(m_pDC->m_hDC, &m_pPalette))
- {
- m_pDC->SelectPalette(m_pPalette, FALSE);
- m_pDC->RealizePalette();
- }
- else
- {
- delete m_pPalette;
- m_pPalette = NULL;
- }
-
- // Create a rendering context.
- m_hglRC = pfnwglCreateContext(m_pDC->m_hDC);
- if (!m_hglRC)
- return 0;
-
- HDC oldDC = pfnwglGetCurrentDC();
- HGLRC oldRC = pfnwglGetCurrentContext();
- pfnwglMakeCurrent (m_pDC->m_hDC, m_hglRC);
-
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHTING);
- glEnable(GL_DEPTH_TEST);
- glDepthFunc(GL_LEQUAL);
- glEnable(GL_POLYGON_OFFSET_FILL);
- glPolygonOffset(0.5f, 0.1f);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- // Set the material color to follow the current color
- glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- glDisable (GL_DITHER);
- glShadeModel (GL_FLAT);
-
- pfnwglMakeCurrent (oldDC, oldRC);
- pfnwglShareLists (oldRC, m_hglRC);
-
- return 0;
+
+ m_Preview = new PiecePreview(NULL);
+ m_Preview->Create(m_hWnd);
+ m_Preview->MakeCurrent();
+
+ return 0;
}
void CPiecePreview::OnDestroy()
{
- if (m_pPalette)
+ if (m_Preview)
{
- CClientDC dc(this);
- CPalette palDefault;
- palDefault.CreateStockObject(DEFAULT_PALETTE);
- dc.SelectPalette(&palDefault, FALSE);
- delete m_pPalette;
+ m_Preview->DestroyContext();
+ delete m_Preview;
+ m_Preview = NULL;
}
- if (m_hglRC)
- pfnwglDeleteContext(m_hglRC);
- if (m_pDC)
- delete m_pDC;
-
CWnd::OnDestroy();
}
+
+void CPiecePreview::SetPieceInfo(PieceInfo* pInfo)
+{
+ m_Preview->SetCurrentPiece(pInfo);
+}
+
+PieceInfo* CPiecePreview::GetPieceInfo() const
+{
+ return m_Preview->GetCurrentPiece();
+}