зеркало из https://github.com/mozilla/pjs.git
263 строки
7.1 KiB
C++
263 строки
7.1 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
#ifndef __HTML_PANE_CONTEXT_H
|
|
#define __HTML_PANE_CONTEXT_H
|
|
|
|
// What is CPaneCX?
|
|
// A pane is part of a complete window.
|
|
//
|
|
// There is no relation from a pane to the chrome of a full window.
|
|
// There is no frame, no document, no view, no toolbar, etc.
|
|
// No assumptions should be made, or the pane becomes non-reusable in a
|
|
// window that is yet to be invented.
|
|
//
|
|
// A pane can be put many places:
|
|
// In a dialog.
|
|
// In a navigation tool.
|
|
// In a browser.
|
|
// It is up to the place to provide the chrome. It is up to the pane to
|
|
// provide the HTML.
|
|
|
|
#include "cxdc.h"
|
|
#include "drawable.h"
|
|
|
|
#define VSCROLL_LINE 32
|
|
#define HSCROLL_LINE 32
|
|
#define SCROLL_UNITS 10000
|
|
#define RIGHT_MARGIN (-1 * Pix2TwipsX(8))
|
|
#define LEFT_MARGIN (Pix2TwipsX(8))
|
|
#define TOP_MARGIN (Pix2TwipsY(8))
|
|
#define BOTTOM_MARGIN (-1 * Pix2TwipsY(8))
|
|
|
|
struct PaneMessage {
|
|
PaneMessage(WPARAM wSet, LPARAM lSet)
|
|
{
|
|
wParam = wSet;
|
|
lParam = lSet;
|
|
bSetRetval = FALSE;
|
|
lRetval = NULL;
|
|
}
|
|
WPARAM wParam;
|
|
LPARAM lParam;
|
|
BOOL bSetRetval;
|
|
LPARAM lRetval;
|
|
};
|
|
|
|
class CPaneCX : public CDCCX {
|
|
public:
|
|
CPaneCX(HWND hPane, BOOL bDestroyOnWMDestroy);
|
|
~CPaneCX();
|
|
virtual void DestroyContext();
|
|
virtual void Initialize(BOOL bOwnDC, RECT *pRect = NULL, BOOL bInitialPalette = TRUE, BOOL bNewMemDC = TRUE);
|
|
|
|
private:
|
|
HWND m_hPane;
|
|
BOOL m_bDestroyOnWMDestroy;
|
|
private:
|
|
BOOL SubClass(HWND hWnd, BOOL bSubClass);
|
|
void CacheDCInfo(BOOL bCache);
|
|
public:
|
|
HWND GetPane() const;
|
|
HWND SetPane(HWND hPane);
|
|
|
|
public:
|
|
BOOL IsNavCenterHTMLPane() const;
|
|
|
|
private:
|
|
WNDPROC m_pPrevProc;
|
|
private:
|
|
WNDPROC GetSubclassedProc();
|
|
friend LRESULT CALLBACK
|
|
#ifndef _WIN32
|
|
_export
|
|
#endif
|
|
PaneProc(HWND hPane, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
protected:
|
|
void PreWMPaint(PaneMessage *pMsg);
|
|
#ifdef EDITOR
|
|
virtual
|
|
#endif
|
|
void PreWMErasebkgnd(PaneMessage *pMsg);
|
|
void PreWMVScroll(PaneMessage *pMsg);
|
|
void PreWMHScroll(PaneMessage *pMsg);
|
|
void PreNavCenterQueryPosition(PaneMessage *pMsg);
|
|
void PreIdleUpdateCmdUI(PaneMessage *pMsg);
|
|
#if defined(XP_WIN32) && _MSC_VER >= 1100
|
|
void PreWMMouseWheel(PaneMessage *pMsg);
|
|
void PreWMHackedMouseWheel(PaneMessage *pMsg);
|
|
#endif
|
|
protected:
|
|
virtual void AftWMSize(PaneMessage *pMsg);
|
|
void AftWMDestroy(PaneMessage *pMsg);
|
|
void AftWMMouseActivate(PaneMessage *pMsg);
|
|
|
|
private:
|
|
HDC m_hClassDC;
|
|
HDC m_hOwnDC;
|
|
HDC m_hSubstDC;
|
|
public:
|
|
void RefreshArea(int32 lLeft, int32 lTop, uint32 lWidth, uint32 lHeight);
|
|
virtual HDC GetContextDC();
|
|
virtual void ReleaseContextDC(HDC hDC);
|
|
virtual BOOL IsOwnDC() const;
|
|
virtual BOOL IsClassDC() const;
|
|
HDC SubstituteDC(HDC hDC);
|
|
|
|
private:
|
|
CDrawable *m_pDrawable;
|
|
COffscreenDrawable *m_pOffscreenDrawable;
|
|
COnscreenDrawable *m_pOnscreenDrawable;
|
|
public:
|
|
CDrawable *GetDrawable();
|
|
virtual void SetDrawable(MWContext *pContext, CL_Drawable *pDrawable);
|
|
virtual void GetDrawingOrigin(int32 *plOrgX, int32 *plOrgY);
|
|
virtual FE_Region GetDrawingClip();
|
|
|
|
public:
|
|
void *m_pResizeReloadTimeout;
|
|
protected:
|
|
void NiceResizeReload(void);
|
|
|
|
private:
|
|
int32 m_nPageY;
|
|
int32 m_nPageX;
|
|
BOOL m_bVScrollBarOn;
|
|
BOOL m_bHScrollBarOn;
|
|
BOOL m_bDynamicScrollBars;
|
|
BOOL m_bAlwaysShowScrollBars;
|
|
#ifdef XP_WIN32
|
|
int m_iWheelDelta;
|
|
#endif
|
|
public:
|
|
void ShowScrollBars(int iBars, BOOL bShow);
|
|
BOOL IsVScrollBarOn();
|
|
BOOL IsHScrollBarOn();
|
|
BOOL DynamicScrollBars();
|
|
BOOL AlwaysShowScrollBars();
|
|
int32 GetPageY();
|
|
int32 GetPageX();
|
|
void SetAlwaysShowScrollBars(BOOL bSet);
|
|
void SetDynamicScrollBars(BOOL bSet);
|
|
void RealizeScrollBars(int32 *pX = NULL, int32 *pY = NULL);
|
|
#ifdef EDITOR
|
|
virtual
|
|
#endif
|
|
void Scroll(int iBars, UINT uSBCode, UINT uPos, HWND hCtrl, UINT uTimes = 1);
|
|
void MakeElementVisible(int32 lX, int32 lY);
|
|
|
|
#ifdef XP_WIN16
|
|
// 16-bit forms need their own segment.
|
|
private:
|
|
HGLOBAL m_hTextElementSegment;
|
|
LPVOID m_lpTextElementHeap;
|
|
public:
|
|
HINSTANCE GetSegment();
|
|
#endif
|
|
|
|
// Marginal implementation.
|
|
protected:
|
|
int32 m_lLeftMargin;
|
|
int32 m_lRightMargin;
|
|
int32 m_lTopMargin;
|
|
int32 m_lBottomMargin;
|
|
|
|
// Coordinate resolution.
|
|
public:
|
|
void ResolvePoint(XY& xy, POINT& point);
|
|
virtual void GetWindowOffset(int32 *pX, int32 *pY);
|
|
LO_Element *GetLayoutElement(XY& Point, CL_Layer *layer) const;
|
|
|
|
public:
|
|
virtual int GetUrl(URL_Struct *pUrl, FO_Present_Types iFormatOut, BOOL bReallyLoad = TRUE, BOOL bForceNew = FALSE);
|
|
public:
|
|
virtual void LayoutNewDocument(MWContext *pContext, URL_Struct *pURL, int32 *pWidth, int32 *pHeight, int32 *pmWidth, int32 *pmHeight);
|
|
virtual void FinishedLayout(MWContext *pContext);
|
|
virtual void SetDocDimension(MWContext *pContext, int iLocation, int32 lWidth, int32 lLength);
|
|
};
|
|
|
|
inline HWND CPaneCX::GetPane() const
|
|
{
|
|
return(m_hPane);
|
|
}
|
|
inline WNDPROC CPaneCX::GetSubclassedProc()
|
|
{
|
|
return(m_pPrevProc);
|
|
}
|
|
inline CDrawable *CPaneCX::GetDrawable()
|
|
{
|
|
return(m_pDrawable);
|
|
}
|
|
inline BOOL CPaneCX::IsVScrollBarOn()
|
|
{
|
|
return(m_bVScrollBarOn);
|
|
}
|
|
inline BOOL CPaneCX::IsHScrollBarOn()
|
|
{
|
|
return(m_bHScrollBarOn);
|
|
}
|
|
inline BOOL CPaneCX::DynamicScrollBars()
|
|
{
|
|
return(m_bDynamicScrollBars);
|
|
}
|
|
inline BOOL CPaneCX::AlwaysShowScrollBars()
|
|
{
|
|
return(m_bAlwaysShowScrollBars);
|
|
}
|
|
inline int32 CPaneCX::GetPageY()
|
|
{
|
|
return(m_nPageY);
|
|
}
|
|
inline int32 CPaneCX::GetPageX()
|
|
{
|
|
return(m_nPageX);
|
|
}
|
|
inline void CPaneCX::SetAlwaysShowScrollBars(BOOL bSet)
|
|
{
|
|
m_bAlwaysShowScrollBars = bSet;
|
|
}
|
|
inline void CPaneCX::SetDynamicScrollBars(BOOL bSet)
|
|
{
|
|
m_bDynamicScrollBars = bSet;
|
|
}
|
|
inline void CPaneCX::ResolvePoint(XY& xy, POINT& point)
|
|
{
|
|
xy.x = Pix2TwipsX(point.x) + GetOriginX();
|
|
xy.y = Pix2TwipsY(point.y) + GetOriginY();
|
|
}
|
|
inline LO_Element *CPaneCX::GetLayoutElement(XY& Point, CL_Layer *layer) const
|
|
{
|
|
#ifdef MOZ_NGLAYOUT
|
|
XP_ASSERT(0);
|
|
return NULL;
|
|
#else
|
|
return(LO_XYToElement(GetContext(), Point.x, Point.y, layer));
|
|
#endif
|
|
}
|
|
inline BOOL CPaneCX::IsNavCenterHTMLPane() const
|
|
{
|
|
BOOL bRetval = FALSE;
|
|
MWContext *pContext = GetContext();
|
|
if(pContext && MWContextPane == pContext->type && Pane == GetContextType()) {
|
|
bRetval = TRUE;
|
|
}
|
|
return(bRetval);
|
|
}
|
|
|
|
#endif // __HTML_PANE_CONTEXT_H
|