Files
2026-02-02 04:50:13 +01:00

115 lines
3.9 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* 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/>.
*
*/
#ifndef HODJNPODJ_HNPLIBS_RULES_H
#define HODJNPODJ_HNPLIBS_RULES_H
#include "bagel/hodjnpodj/hnplibs/dibdoc.h"
namespace Bagel {
namespace HodjNPodj {
#define IDD_RULES_DIALOG 900
#define IDC_RULES_OKAY 900
#define IDC_RULES_ARROWDN 901
#define IDC_RULES_ARROWUP 902
#define IDC_RULES_INVALID 903
class CRules : public CDialog {
// Construction
public:
CRules(CWnd *pParent = nullptr, const char *pszPathName = nullptr,
CPalette *pPalette = nullptr, const char *pszSoundPath = nullptr);
void UpdateScroll(int nPage);
void ClearDialogImage();
void RefreshBackground();
private:
bool SetupKeyboardHook();
void RemoveKeyboardHook();
static CDibDoc *LoadScrollDIB(const char *pSpec, CRect *pRect);
static bool PaintScrollDIB(CDC *pDC, CDibDoc *pDibDoc);
static CBitmap *CreateScrollBitmap(CDC *pDC, CDibDoc *pDibDoc, CPalette *pPalette);
static CDC *SetupMask(CDC *pDC, CDC *pBitmapDC, CBitmap *pMask, CBitmap * &pMaskOld, CRect *pRect);
static CDC *SetupCompatibleContext(CDC *pDC, CBitmap *pBitmap, CBitmap * &pBitmapOld, CPalette *pPalette, CPalette * &pPalOld);
static void ReleaseCompatibleContext(CDC * &pDC, CBitmap * &pBitmap, CBitmap *pBitmapOld, CPalette *pPalOld);
bool CreateWorkAreas(CDC *pDC);
void UnfurlScroll(CDC *pDC);
void UpdateMore(CDC *pDC);
void WritePage(CDC *pDC, int nPage);
void ShowWaitCursor();
void DoWaitCursor(int nCode) override {
CDialog::DoWaitCursor(nCode);
}
void DoArrowCursor();
void Sleep(clock_t wait);
private:
bool m_bKeyboardHook = false; // whether keyboard hook present
CRect OkayRect; // rectangle bounding the OKAY button
CRect ScrollRect, // x/y (left/right) and dx/dy (right/bottom) for the scroll window
ScrollTopRect, // rectangle bounding the scroll top section
ScrollBotRect, // rectangle bounding the scroll bottom section
ScrollMidRect; // rectangle bounding the scroll middle section
CRect ScrollTopCurlRect, // current location of top curl for mouse clicks
ScrollBotCurlRect; // current location of bottom curl for mouse clicks
// Dialog Data
//{{AFX_DATA(CRules)
enum { IDD = IDD_RULES_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Implementation
protected:
virtual void DoDataExchange(CDataExchange* pDX) override; // DDX/DDV support
// Generated message map functions
//{{AFX_MSG(CRules)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
virtual bool OnInitDialog() override;
afx_msg bool OnEraseBkgnd(CDC *pDC);
virtual void OnOK() override;
virtual void OnCancel() override;
afx_msg void OnDestroy();
afx_msg void OnPaint();
afx_msg void OnShowWindow(bool bShow, unsigned int nStatus);
afx_msg void OnSize(unsigned int nType, int cx, int cy);
afx_msg void OnMouseMove(unsigned int nFlags, CPoint point);
afx_msg bool OnSetCursor(CWnd *pWnd, unsigned int nHitTest, unsigned int message);
afx_msg void OnLButtonDown(unsigned int nFlags, CPoint point);
afx_msg void OnActivate(unsigned int nState, CWnd *pWndOther, bool bMinimized) override;
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
} // namespace HodjNPodj
} // namespace Bagel
#endif