mirror of
https://github.com/kevinbentley/Descent3.git
synced 2025-01-22 19:55:23 +00:00
a4ab78192c
Join the license header with historical comments using a separator so IDEs can correctly parse the initial header. Also use .gitattributes to ensure all files are LF.
246 lines
5.4 KiB
C++
246 lines
5.4 KiB
C++
/*
|
|
* Descent 3
|
|
* Copyright (C) 2024 Parallax Software
|
|
*
|
|
* 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
|
|
--- HISTORICAL COMMENTS FOLLOW ---
|
|
|
|
* $Logfile: /DescentIII/Main/editor/GrWnd.cpp $
|
|
* $Revision: 1.1.1.1 $
|
|
* $Date: 2003-08-26 03:57:38 $
|
|
* $Author: kevinb $
|
|
*
|
|
* Base class of all GrWnds. Does screen and viewport allocation
|
|
*
|
|
* $Log: not supported by cvs2svn $
|
|
*
|
|
* 2 8/19/97 10:46a Samir
|
|
* Fixed unusual problem when for some reason during GrWnd creation, the
|
|
* height or width is 0, causing an error.
|
|
*
|
|
* 10 1/30/97 6:43p Samir
|
|
* stupid forgetting an argument
|
|
*
|
|
* 9 1/30/97 6:23p Samir
|
|
* Reflect changes in grScreen, where there is no viewing rect, so we blt
|
|
* to the entire window
|
|
*
|
|
* 8 1/21/97 12:47p Samir
|
|
* Added OnSize and GRWND_STYLE constant to adjust window look.
|
|
*
|
|
* $NoKeywords: $
|
|
*/
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "editor.h"
|
|
#include "GrWnd.h"
|
|
|
|
#include <assert.h>
|
|
|
|
#include "mono.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGrWnd
|
|
|
|
CGrWnd::CGrWnd(const char *name)
|
|
{
|
|
m_grScreen = NULL;
|
|
m_grViewport = NULL;
|
|
if (name) strncpy(m_Name, name, 15);
|
|
m_Name[31] = 0;
|
|
|
|
m_Active = FALSE;
|
|
}
|
|
|
|
CGrWnd::~CGrWnd()
|
|
{
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CGrWnd, CWnd)
|
|
//{{AFX_MSG_MAP(CGrWnd)
|
|
ON_WM_DESTROY()
|
|
ON_WM_CREATE()
|
|
ON_WM_MOVE()
|
|
ON_WM_SIZE()
|
|
ON_WM_NCACTIVATE()
|
|
ON_WM_NCPAINT()
|
|
ON_WM_CHILDACTIVATE()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGrWnd message handlers
|
|
|
|
BOOL CGrWnd::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
return CWnd::PreCreateWindow(cs);
|
|
}
|
|
|
|
|
|
|
|
void CGrWnd::OnDestroy()
|
|
{
|
|
CWnd::OnDestroy();
|
|
|
|
// TODO: Add your message handler code here
|
|
// destroy screen element
|
|
if (m_grViewport) { delete m_grViewport; m_grViewport = NULL; }
|
|
if (m_grScreen) { delete m_grScreen; m_grScreen = NULL; }
|
|
|
|
m_grCreated = FALSE;
|
|
}
|
|
|
|
|
|
int CGrWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CWnd::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
// TODO: Add your specialized creation code here
|
|
// Create a screen the size of the new client area
|
|
RECT rect;
|
|
int client_width, client_height;
|
|
|
|
GetClientRect(&rect);
|
|
client_width = (rect.right-rect.left);
|
|
client_height = (rect.bottom-rect.top);
|
|
if (client_width && client_height) {
|
|
ASSERT(m_grScreen == NULL);
|
|
m_grScreen = new grScreen(client_width, client_height, BPP_16, m_Name);
|
|
m_grScreen->attach_to_window((unsigned)m_hWnd);
|
|
m_grViewport = new grViewport(m_grScreen);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
void CGrWnd::OnMove(int x, int y)
|
|
{
|
|
CWnd::OnMove(x, y);
|
|
|
|
// TODO: Add your message handler code here
|
|
}
|
|
|
|
void CGrWnd::OnSize(UINT nType, int cx, int cy)
|
|
{
|
|
CWnd::OnSize(nType, cx, cy);
|
|
|
|
// TODO: Add your message handler code here
|
|
if (m_grViewport) {
|
|
delete m_grViewport;
|
|
delete m_grScreen;
|
|
m_grViewport = NULL;
|
|
m_grScreen = NULL;
|
|
}
|
|
if (cx && cy && !m_grViewport) {
|
|
RECT rect;
|
|
int client_width, client_height;
|
|
|
|
GetClientRect(&rect);
|
|
client_width = (rect.right-rect.left);
|
|
client_height = (rect.bottom-rect.top);
|
|
|
|
m_grScreen = new grScreen(client_width, client_height, BPP_16, m_Name);
|
|
m_grScreen->attach_to_window((unsigned)m_hWnd);
|
|
m_grViewport = new grViewport(m_grScreen);
|
|
}
|
|
}
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// private functions
|
|
// ---------------------------------------------------------------------------
|
|
|
|
void CGrWnd::DrawCaption(BOOL active)
|
|
{
|
|
CDC *dc;
|
|
DWORD dwstyle;
|
|
RECT winrect, caprect;
|
|
int c_left=0, c_top=0; // caption bar's coordinates in window
|
|
|
|
// get needed info
|
|
GetWindowRect(&winrect);
|
|
dwstyle = GetStyle();
|
|
if ((dwstyle & WS_CAPTION) != WS_CAPTION) return;
|
|
dc = GetWindowDC();
|
|
|
|
// calculate c_left, c_top
|
|
if (dwstyle & WS_THICKFRAME) {
|
|
c_left += GetSystemMetrics(SM_CXSIZEFRAME);
|
|
c_top += GetSystemMetrics(SM_CYSIZEFRAME);
|
|
}
|
|
if (dwstyle & WS_SYSMENU) {
|
|
c_left += GetSystemMetrics(SM_CXSIZE);
|
|
}
|
|
caprect.left = c_left;
|
|
caprect.top = c_top;
|
|
|
|
// calucation c_right, c_bottom.
|
|
caprect.right = winrect.right - winrect.left - (2*c_left);
|
|
if (dwstyle & WS_THICKFRAME) {
|
|
caprect.right -= GetSystemMetrics(SM_CXSIZEFRAME);
|
|
}
|
|
caprect.bottom = GetSystemMetrics(SM_CYSIZE);
|
|
|
|
if (active) {
|
|
dc->SetBkColor(GetSysColor(COLOR_ACTIVECAPTION));
|
|
dc->SetTextColor(GetSysColor(COLOR_CAPTIONTEXT));
|
|
}
|
|
else {
|
|
dc->SetBkColor(GetSysColor(COLOR_INACTIVECAPTION));
|
|
dc->SetTextColor(GetSysColor(COLOR_INACTIVECAPTIONTEXT));
|
|
}
|
|
|
|
dc->DrawText(m_Name, -1, &caprect, DT_LEFT );
|
|
|
|
ReleaseDC(dc);
|
|
}
|
|
|
|
|
|
BOOL CGrWnd::OnNcActivate(BOOL bActive)
|
|
{
|
|
CWnd::OnNcActivate(bActive);
|
|
|
|
/* m_Active = bActive;
|
|
|
|
OnNcPaint();
|
|
*/
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
void CGrWnd::OnNcPaint()
|
|
{
|
|
CWnd::OnNcPaint(); // We may have to do this.
|
|
// DrawCaption(m_Active);
|
|
}
|
|
|
|
|
|
void CGrWnd::OnChildActivate()
|
|
{
|
|
CWnd::OnChildActivate();
|
|
}
|