зеркало из https://github.com/mozilla/gecko-dev.git
154 строки
4.8 KiB
C++
154 строки
4.8 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.
|
|
*/
|
|
|
|
// drawable.h - Classes used for maintaining the notion of
|
|
// offscreen and onscreen drawables, so that
|
|
// document contents can be drawn to either
|
|
// location. Currently used for LAYERS.
|
|
#include "stdafx.h"
|
|
#include "layers.h"
|
|
#include "fe_rgn.h"
|
|
#include "cl_types.h"
|
|
|
|
#ifndef _DRAWABLE_H_
|
|
#define _DRAWABLE_H_
|
|
|
|
#ifdef LAYERS
|
|
|
|
extern CL_DrawableVTable wfe_drawable_vtable;
|
|
|
|
class CDrawable {
|
|
protected:
|
|
int32 m_lOrgX, m_lOrgY;
|
|
FE_Region m_hClipRgn;
|
|
CAbstractCX* m_parentContext;
|
|
|
|
public:
|
|
// Constructor and destructor
|
|
CDrawable();
|
|
CDrawable( CAbstractCX* m_parentContext);
|
|
~CDrawable() {}
|
|
|
|
// Lock the drawable for use, based on the state passed in.
|
|
// Does nothing in the super class.
|
|
virtual PRBool LockDrawable(CL_Drawable *pCLDrawable,
|
|
CL_DrawableState newState)
|
|
{ return PR_TRUE; }
|
|
|
|
// Calls to indicate a new client or the relinquishing of the drawable
|
|
// by a client.
|
|
virtual void InitDrawable(CL_Drawable *pCLDrawable) {};
|
|
virtual void RelinquishDrawable(CL_Drawable *pCLDrawable) {};
|
|
|
|
// Get and set the origin of the drawable
|
|
void SetOrigin(int32 lOrgX, int32 lOrgY);
|
|
void GetOrigin(int32 *lOrgX, int32 *lOrgY);
|
|
|
|
// Set the drawable's clip. A value of NULL indicates that the
|
|
// clip should be restored to its initial value.
|
|
virtual void SetClip(FE_Region hClipRgn);
|
|
|
|
FE_Region GetClip() { return m_hClipRgn; }
|
|
|
|
// Call to copy pixels from the given drawable
|
|
void CopyPixels(CDrawable *pSrcDrawable, FE_Region hCopyRgn);
|
|
|
|
// Call to set the width and height of a drawable;
|
|
virtual void SetDimensions(int32 width, int32 height) {}
|
|
|
|
// Call to set the palette of drawable
|
|
virtual void SetPalette(HPALETTE hPal) {}
|
|
|
|
// Return the device context associated with the drawable
|
|
virtual HDC GetDrawableDC() {return NULL;}
|
|
virtual void ReleaseDrawableDC(HDC hdc) {;}
|
|
};
|
|
|
|
class COnscreenDrawable : public CDrawable {
|
|
protected:
|
|
HDC m_hDC;
|
|
public:
|
|
COnscreenDrawable(HDC hDC, CAbstractCX* parentContext);
|
|
~COnscreenDrawable() {}
|
|
|
|
// Return the device context associated with the drawable
|
|
virtual HDC GetDrawableDC() {return m_hDC;}
|
|
virtual void ReleaseDrawableDC(HDC hdc) {;}
|
|
};
|
|
|
|
class CPrinterDrawable : public CDrawable {
|
|
protected:
|
|
HDC m_hDC;
|
|
int32 m_lLeftMargin, m_lRightMargin, m_lTopMargin, m_lBottomMargin;
|
|
|
|
public:
|
|
CPrinterDrawable(HDC hDC, int32 lLeftMargin, int32 lRightMargin,
|
|
int32 lTopMargin, int32 lBottomMargin, CAbstractCX* parentContext);
|
|
~CPrinterDrawable() {}
|
|
|
|
virtual void SetClip(FE_Region hClipRgn);
|
|
|
|
// Return the device context associated with the drawable
|
|
virtual HDC GetDrawableDC() {return m_hDC;}
|
|
virtual void ReleaseDrawableDC(HDC hdc) {;}
|
|
};
|
|
|
|
class COffscreenDrawable : public CDrawable {
|
|
protected:
|
|
HBITMAP m_hSaveBitmap;
|
|
HPALETTE m_hSavePalette;
|
|
HDC m_hParentDC;
|
|
HPALETTE m_hParentPal;
|
|
|
|
// In this implementation, we only have a single offscreen drawable
|
|
static COffscreenDrawable *m_pOffscreenDrawable;
|
|
static CL_Drawable *m_pOwner;
|
|
static int32 m_lWidth, m_lHeight;
|
|
static HBITMAP m_hBitmap;
|
|
static HDC m_hDC;
|
|
static UINT m_uRefCnt;
|
|
static HPALETTE m_hSelectedPalette;
|
|
|
|
public:
|
|
COffscreenDrawable(HDC hParentDC, HPALETTE hPal, CAbstractCX* parentContext);
|
|
~COffscreenDrawable();
|
|
|
|
// Factory for creating offscreen drawables
|
|
static COffscreenDrawable *AllocateOffscreen(HDC hParentDC, HPALETTE hPal, CAbstractCX* parentContext);
|
|
|
|
virtual void InitDrawable(CL_Drawable *pCLDrawable);
|
|
virtual void RelinquishDrawable(CL_Drawable *pCLDrawable);
|
|
|
|
virtual PRBool LockDrawable(CL_Drawable *pCLDrawable,
|
|
CL_DrawableState newState);
|
|
virtual void SetDimensions(int32 width, int32 height);
|
|
|
|
virtual void SetPalette(HPALETTE hPal);
|
|
virtual void SetClip(FE_Region hClipRgn);
|
|
|
|
// Return the device context associated with the drawable
|
|
virtual HDC GetDrawableDC();
|
|
virtual void ReleaseDrawableDC(HDC hdc);
|
|
|
|
private:
|
|
void delete_offscreen();
|
|
};
|
|
|
|
#endif // LAYERS
|
|
#endif // _DRAWABLE_H_
|