mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 06:05:44 +00:00
c8e0ba6a08
drawing surface. WIP on making blender work with arbitrary pixel organizations.
382 lines
13 KiB
C++
382 lines
13 KiB
C++
/* -*- Mode: C++; tab-width: 2; 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 nsIDeviceContext_h___
|
|
#define nsIDeviceContext_h___
|
|
|
|
#include "nsISupports.h"
|
|
#include "nsCoord.h"
|
|
#include "nsRect.h"
|
|
#include "nsIWidget.h"
|
|
|
|
class nsIRenderingContext;
|
|
class nsIView;
|
|
class nsIFontMetrics;
|
|
class nsIWidget;
|
|
class nsIDeviceContextSpec;
|
|
|
|
struct nsFont;
|
|
struct nsColor;
|
|
|
|
//a cross platform way of specifying a native device context
|
|
typedef void * nsNativeDeviceContext;
|
|
|
|
#define NS_IDEVICE_CONTEXT_IID \
|
|
{ 0x5931c580, 0xb917, 0x11d1, \
|
|
{ 0xa8, 0x24, 0x00, 0x40, 0x95, 0x9a, 0x28, 0xc9 } }
|
|
|
|
//a cross platform way of specifying a native palette handle
|
|
typedef void * nsPalette;
|
|
|
|
//structure used to return information about a device's palette capabilities
|
|
struct nsPaletteInfo {
|
|
PRPackedBool isPaletteDevice;
|
|
PRUint8 sizePalette; // number of entries in the palette
|
|
PRUint8 numReserved; // number of reserved palette entries
|
|
nsPalette palette; // native palette handle
|
|
};
|
|
|
|
/**
|
|
*
|
|
*
|
|
*/
|
|
typedef enum {
|
|
// Colors
|
|
eSystemAttr_Color_WindowBackground,
|
|
eSystemAttr_Color_WindowForeground,
|
|
eSystemAttr_Color_WidgetBackground,
|
|
eSystemAttr_Color_WidgetForeground,
|
|
eSystemAttr_Color_WidgetSelectBackground,
|
|
eSystemAttr_Color_WidgetSelectForeground,
|
|
eSystemAttr_Color_Widget3DHighlight,
|
|
eSystemAttr_Color_Widget3DShadow,
|
|
eSystemAttr_Color_TextBackground,
|
|
eSystemAttr_Color_TextForeground,
|
|
eSystemAttr_Color_TextSelectBackground,
|
|
eSystemAttr_Color_TextSelectForeground,
|
|
// Size
|
|
eSystemAttr_Size_WindowTitleHeight,
|
|
eSystemAttr_Size_WindowBorderWidth,
|
|
eSystemAttr_Size_WindowBorderHeight,
|
|
eSystemAttr_Size_Widget3DBorder,
|
|
eSystemAttr_Size_ScrollbarHeight,
|
|
eSystemAttr_Size_ScrollbarWidth,
|
|
// Fonts
|
|
eSystemAttr_Font_Caption,
|
|
eSystemAttr_Font_Icon,
|
|
eSystemAttr_Font_Menu,
|
|
eSystemAttr_Font_MessageBox,
|
|
eSystemAttr_Font_SmallCaption,
|
|
eSystemAttr_Font_StatusBar,
|
|
eSystemAttr_Font_Tooltips,
|
|
eSystemAttr_Font_Widget
|
|
} nsSystemAttrID;
|
|
|
|
typedef union {
|
|
PRUint32 mSize;
|
|
nscolor * mColor;
|
|
nsFont * mFont;
|
|
} SystemAttrStruct;
|
|
|
|
/**
|
|
* Constants identifying pre-defined icons.
|
|
* @see #LoadIcon()
|
|
*/
|
|
#define NS_ICON_LOADING_IMAGE 0
|
|
#define NS_ICON_BROKEN_IMAGE 1
|
|
#define NS_NUMBER_OF_ICONS 2
|
|
|
|
// XXX This is gross, but don't include libimg.h, because it includes ni_pixmap.h
|
|
// which includes xp_core.h which includes windows.h
|
|
struct _NI_ColorSpace;
|
|
typedef _NI_ColorSpace NI_ColorSpace;
|
|
typedef NI_ColorSpace IL_ColorSpace;
|
|
|
|
class nsIDeviceContext : public nsISupports
|
|
{
|
|
public:
|
|
static const nsIID& IID() { static nsIID iid = NS_IDEVICE_CONTEXT_IID; return iid; }
|
|
|
|
/**
|
|
* Initialize the device context from a widget
|
|
* @param aWidget a native widget to initialize the device context from
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD Init(nsNativeWidget aWidget) = 0;
|
|
|
|
/**
|
|
* Create a rendering context and initialize it from an nsIView
|
|
* @param aView view to initialize context from
|
|
* @param aContext out parameter for new rendering context
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD CreateRenderingContext(nsIView *aView, nsIRenderingContext *&aContext) = 0;
|
|
|
|
/**
|
|
* Create a rendering context and initialize it from an nsIWidget
|
|
* @param aWidget widget to initialize context from
|
|
* @param aContext out parameter for new rendering context
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD CreateRenderingContext(nsIWidget *aWidget, nsIRenderingContext *&aContext) = 0;
|
|
|
|
/**
|
|
* Create a rendering context and initialize it. This API should *only* be called
|
|
* on device contexts whose SupportsNativeWidgets() method return PR_FALSE.
|
|
* @param aContext out parameter for new rendering context
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD CreateRenderingContext(nsIRenderingContext *&aContext) = 0;
|
|
|
|
/**
|
|
* Initialize a rendering context from a widget. This method is only for use
|
|
* when a rendering context was obtained directly from a factory rather than
|
|
* through one of the Create* methods above.
|
|
* @param aContext rendering context to initialize
|
|
* @param aWindow widget to initialize context from
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD InitRenderingContext(nsIRenderingContext *aContext, nsIWidget *aWindow) = 0;
|
|
|
|
/**
|
|
* Query the device to see if it supports native widgets. If not, then
|
|
* nsIWidget->Create() calls should be avoided.
|
|
* @param aSupportsWidgets out paramater. If PR_TRUE, then native widgets
|
|
* can be created.
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD SupportsNativeWidgets(PRBool &aSupportsWidgets) = 0;
|
|
|
|
/**
|
|
* Obtain the size of a device unit relative to a Twip. A twip is 1/20 of
|
|
* a point (which is 1/72 of an inch).
|
|
* @param aDevUnitsToTwips out parameter for conversion value
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetDevUnitsToTwips(float &aDevUnitsToTwips) const = 0;
|
|
|
|
/**
|
|
* Obtain the size of a Twip relative to a device unit.
|
|
* @param aTwipsToDevUnits out parameter for conversion value
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetTwipsToDevUnits(float &aTwipsToDevUnits) const = 0;
|
|
|
|
/**
|
|
* Set the scale factor to convert units used by the application
|
|
* to device units. Typically, an application will query the device
|
|
* for twips to device units scale and then set the scale
|
|
* to convert from whatever unit the application wants to use
|
|
* to device units. From that point on, all other parts of the
|
|
* app can use the Get* methods below to figure out how
|
|
* to convert device units <-> app units.
|
|
* @param aAppUnits scale value to convert from application defined
|
|
* units to device units.
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD SetAppUnitsToDevUnits(float aAppUnits) = 0;
|
|
|
|
/**
|
|
* Set the scale factor to convert device units to units
|
|
* used by the application. This should generally be
|
|
* 1.0f / the value passed into SetAppUnitsToDevUnits().
|
|
* @param aDevUnits scale value to convert from device units to
|
|
* application defined units
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD SetDevUnitsToAppUnits(float aDevUnits) = 0;
|
|
|
|
/**
|
|
* Get the scale factor to convert from application defined
|
|
* units to device units.
|
|
* @param aAppUnits out paramater for scale value
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetAppUnitsToDevUnits(float &aAppUnits) const = 0;
|
|
|
|
/**
|
|
* Get the scale factor to convert from device units to
|
|
* application defined units.
|
|
* @param aDevUnits out paramater for scale value
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetDevUnitsToAppUnits(float &aDevUnits) const = 0;
|
|
|
|
/**
|
|
* Get the value used to scale a "standard" pixel to a pixel
|
|
* of the same physical size for this device. a standard pixel
|
|
* is defined as a pixel on display 0. this is used to make
|
|
* sure that entities defined in pixel dimensions maintain a
|
|
* constant relative size when displayed from one output
|
|
* device to another.
|
|
* @param aScale out parameter for scale value
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetCanonicalPixelScale(float &aScale) const = 0;
|
|
|
|
/**
|
|
* Get the width of a vertical scroll bar and the height
|
|
* of a horizontal scrollbar in application units.
|
|
* @param aWidth out parameter for width
|
|
* @param aHeight out parameter for height
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetScrollBarDimensions(float &aWidth, float &aHeight) const = 0;
|
|
|
|
/**
|
|
* Get the width of a vertical scroll bar and the height
|
|
* of a horizontal scrollbar in application units.
|
|
* @param anID The snum of the type of information you want back
|
|
* @param aInfo out parameter for the system data
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetSystemAttribute(nsSystemAttrID anID, SystemAttrStruct * aInfo) const = 0;
|
|
|
|
/**
|
|
* Get the nsIFontMetrics that describe the properties of
|
|
* an nsFont.
|
|
* @param aFont font description to obtain metrics for
|
|
* @param aMetrics out parameter for font metrics
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetMetricsFor(const nsFont& aFont, nsIFontMetrics*& aMetrics) = 0;
|
|
|
|
//get and set the document zoom value used for display-time
|
|
//scaling. default is 1.0 (no zoom)
|
|
NS_IMETHOD SetZoom(float aZoom) = 0;
|
|
NS_IMETHOD GetZoom(float &aZoom) const = 0;
|
|
|
|
//get a low level drawing surface for rendering. the rendering context
|
|
//that is passed in is used to create the drawing surface if there isn't
|
|
//already one in the device context. the drawing surface is then cached
|
|
//in the device context for re-use.
|
|
NS_IMETHOD GetDrawingSurface(nsIRenderingContext &aContext, nsDrawingSurface &aSurface) = 0;
|
|
|
|
//functions for handling gamma correction of output device
|
|
NS_IMETHOD GetGamma(float &aGamms) = 0;
|
|
NS_IMETHOD SetGamma(float aGamma) = 0;
|
|
|
|
//XXX the return from this really needs to be ref counted somehow. MMP
|
|
NS_IMETHOD GetGammaTable(PRUint8 *&aGammaTable) = 0;
|
|
|
|
//load the specified icon. this is a blocking call that does not return
|
|
//until the icon is loaded.
|
|
//release the image when you're done
|
|
NS_IMETHOD LoadIconImage(PRInt32 aId, nsIImage*& aImage) = 0;
|
|
|
|
/**
|
|
* Check to see if a particular named font exists.
|
|
* @param aFontName character string of font face name
|
|
* @return NS_OK if font is available, else font is unavailable
|
|
*/
|
|
NS_IMETHOD CheckFontExistence(const nsString& aFaceName) = 0;
|
|
NS_IMETHOD FirstExistingFont(const nsFont& aFont, nsString& aFaceName) = 0;
|
|
|
|
NS_IMETHOD GetLocalFontName(const nsString& aFaceName, nsString& aLocalName,
|
|
PRBool& aAliased) = 0;
|
|
|
|
/**
|
|
* Attempt to free up resoruces by flushing out any fonts no longer
|
|
* referenced by anything other than the font cache itself.
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD FlushFontCache(void) = 0;
|
|
|
|
/**
|
|
* Return the bit depth of the device.
|
|
*/
|
|
NS_IMETHOD GetDepth(PRUint32& aDepth) = 0;
|
|
|
|
/**
|
|
* Return the image lib color space that's appropriate for this rendering
|
|
* context.
|
|
*
|
|
* You must call IL_ReleaseSystemSpace() when you're done using the color space.
|
|
*/
|
|
NS_IMETHOD GetILColorSpace(IL_ColorSpace*& aColorSpace) = 0;
|
|
|
|
/**
|
|
* Returns information about the device's palette capabilities.
|
|
*/
|
|
NS_IMETHOD GetPaletteInfo(nsPaletteInfo&) = 0;
|
|
|
|
/**
|
|
* Returns Platform specific pixel value for an RGB value
|
|
*/
|
|
NS_IMETHOD ConvertPixel(nscolor aColor, PRUint32 & aPixel) = 0;
|
|
|
|
/**
|
|
* Get the size of the displayable area of the output device
|
|
* in app units.
|
|
* @param aWidth out parameter for width
|
|
* @param aHeight out parameter for height
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetDeviceSurfaceDimensions(PRInt32 &aWidth, PRInt32 &aHeight) = 0;
|
|
|
|
/**
|
|
* Returns a new nsIDeviceContext suitable for the device context
|
|
* specification passed in.
|
|
* @param aDevice a device context specification. this is a platform
|
|
* specific structure that only a platform specific device
|
|
* context can interpret.
|
|
* @param aContext out parameter for new device context. nsnull on
|
|
* failure to create new device context.
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD GetDeviceContextFor(nsIDeviceContextSpec *aDevice,
|
|
nsIDeviceContext *&aContext) = 0;
|
|
|
|
//XXX need to work out re-entrancy issues for these APIs... MMP
|
|
/**
|
|
* Inform the output device that output of a document is beginning
|
|
* Used for print related device contexts. Must be matched 1:1 with
|
|
* EndDocument().
|
|
* XXX needs to take parameters so that feedback can be given to the
|
|
* app regarding pagination progress and aborting print operations?
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD BeginDocument(void) = 0;
|
|
|
|
/**
|
|
* Inform the output device that output of a document is ending.
|
|
* Used for print related device contexts. Must be matched 1:1 with
|
|
* BeginDocument()
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD EndDocument(void) = 0;
|
|
|
|
/**
|
|
* Inform the output device that output of a page is beginning
|
|
* Used for print related device contexts. Must be matched 1:1 with
|
|
* EndPage() and within a BeginDocument()/EndDocument() pair.
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD BeginPage(void) = 0;
|
|
|
|
/**
|
|
* Inform the output device that output of a page is ending
|
|
* Used for print related device contexts. Must be matched 1:1 with
|
|
* BeginPage() and within a BeginDocument()/EndDocument() pair.
|
|
* @return error status
|
|
*/
|
|
NS_IMETHOD EndPage(void) = 0;
|
|
};
|
|
|
|
#endif /* nsIDeviceContext_h___ */
|