// Inject.idl : IDL source for Inject.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (Inject.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
import "decal.idl";
import "unknwn.idl";

interface IBarManager;
interface ILayerSite;
interface IIconCache;
interface IImageCache;
interface IFontCache;
interface ISimpleBar;
interface ICanvas;
interface IView;
interface ILayer;
interface IPanelSink;
interface IInputBuffer;

struct ClipParams
{
	RECT window;
	POINT org;
	VARIANT_BOOL visible;
};

enum eAlphaBlendOptions
{
	eAlphaBlendSoftware = 0x01,
	eAlphaBlendGDIPlus = 0x02
};

enum eRenderOptions
{
	eRenderClipped = 0x01,
	eRenderNext = 0x02,
	eRenderTransparent = 0x08,
	eRenderReformatNext = 0x20
};

enum eViewFlags
{
	eTransparent = 0x01,
};

enum eFontOptions
{
	eFontBold = 0x01,
	eFontItalic = 0x02,
	eFontUnderline = 0x04
};

enum eFontJustify
{
	eFontLeft,
	eFontRight,
	eFontCenter
};

enum eDrawTextExFlags
{
	eAA				= 0x1,
	eOutlined		= 0x2,
};

enum eDefaultControlType
{
	eCtlButton,
	eCtlPager
};

enum ePositionType
{
	ePositionByIndex,
	ePositionByID
};

enum eMinMaxState
{
	eStateMax = 0,
	eStateMin = 1
};

enum eCombatState
{
	ePeace		= 1,
	eMelee		= 2,
	eMissile	= 3,
	eMagic		= 4
};

struct LayerParams
{
	long ID;
	RECT pos;
	long render;
};

struct ViewParams
{
	long icon;
	long iconLibrary;
	BSTR label;
	long left;
	long top;
	long width;
	long height;
	long alpha;
	long state;
};

struct MouseState
{
	ILayer *over;
	POINT screen,
		client;
	VARIANT_BOOL ctrl;
	VARIANT_BOOL shift;
};

struct KeyState
{
	short vkey;
	VARIANT_BOOL ctrl;
	VARIANT_BOOL shift;
};

enum eMouseInput
{
	eMouseLeftClick,
	eMouseRightClick,
	eMouseLeftDoubleClick,
	eMouseRightDoubleClick
};

enum eInputStatus
{
	eInputIdle,
	eInputWaiting,
	eInputRunning,
	eInputPaused
};

enum eManagerSinkCaps
{
   eManagerSinkCapWindowMessage = 0x01,
   eManagerSinkCapPlugin = 0x02,
   eManagerSinkCapRender = 0x04,
   eManagerSinkCapRender3D = 0x08,
};

	[
		object,
		uuid(702D3901-C13A-448e-8871-ECDC8BC8D079),
		helpstring("Interface passed to plugins for access to global services."),
		pointer_default(unique)
	]
	interface IPluginSite : IUnknown
	{
		[helpstring("Unloads a plugin by ID - used by plugins that want to unload themselves")] HRESULT UnloadPlugin(long nID);
		[helpstring("The DirectDraw object used by AC")] HRESULT GetDirectDraw(REFIID iid, [iid_is(iid)] void **ppvItf);
		[helpstring("The current surface used for 3d drawing - the offscreen buff in windowed mode or the backbuffer in fullscreen mode")] HRESULT GetPrimarySurface([out, retval] ICanvas **ppPrimary);
		[helpstring("The Direct3DDevice used by AC")] HRESULT Get3DDevice(REFIID iid, [iid_is(iid)] void **ppvItf);
		[helpstring("Loads a bitmap into a surface from a file. Do not use of measure the bitmap until in a rendering pass.")] HRESULT LoadBitmapFile(BSTR strFilename, [out, retval] IImageCache **ppImage);
		[helpstring("Returns an icon cache for a particular size")] HRESULT GetIconCache(LPSIZE psz, [out, retval] IIconCache **ppCache);
		[helpstring("Loads a bitmap into a surface directly from portal.dat. Do not use of measure the bitmap until in a rendering pass.")] HRESULT LoadBitmapPortal(long nFile, IImageCache **);
		[helpstring("Create a cached font for drawing and measuring text")] HRESULT CreateFont(BSTR szFaceName, long nHeight, long dwFlags, [out, retval] IFontCache **ppFont);
		[helpstring("Returns the current resolution, in windowed mode it is the client area")] HRESULT GetScreenSize(LPSIZE sz);
		[helpstring("Creates an offscreen buffer for drawing. Drawing is not guaranteed to be successful outside of the rendering pass.")] HRESULT CreateCanvas(LPSIZE psz, [out, retval] ICanvas **ppCanvas);
		[helpstring("Creates a new view (icon and panel surface) using the control as the panel root")] HRESULT CreateView(struct ViewParams *pParams, ILayer *pLayer, [out, retval] IView **ppView);
		[helpstring("Creates a new view from a view schema, if the text is an XML document (beginning with <?xml version=\"1.0\"?>) it is loaded directly, otherwise it is interpretted as a moniker (file or URL source).")] HRESULT LoadView(BSTR strSchema, [out, retval] IView **ppView);
		[helpstring("method CreateBrushImage")] HRESULT CreateBrushImage(long nColor, [out, retval] IImageCache **ppImg);
		[helpstring("method LoadImageSchema")] HRESULT LoadImageSchema(IUnknown *pSchema, [out, retval] IImageCache **ppImg);
		[helpstring("method CreateFontSchema")] HRESULT CreateFontSchema(long nDefHeight, long nDefOptions, IUnknown *pSchema, [out, retval] IFontCache **ppCache);
		[helpstring("method LoadResourceModule")] HRESULT LoadResourceModule(BSTR strLibrary, [out, retval] long *pnModule);
		[propget, helpstring("property ResourcePath")] HRESULT ResourcePath([out, retval] BSTR *pVal);
		[propget, helpstring("property Plugin")] HRESULT Plugin(BSTR strProgID, [out, retval] LPDISPATCH *pVal);
		[propget, helpstring("property NetworkFilter")] HRESULT NetworkFilter(BSTR strProgID, [out, retval] LPDISPATCH *pVal);
		[helpstring("method LoadViewObject")] HRESULT LoadViewObject(IUnknown *pSchema, [out, retval] IView **ppView);
		[helpstring("method CreateInputBuffer")] HRESULT CreateInputBuffer([out, retval] IInputBuffer **ppInput);
		[propget, helpstring("property HWND")] HRESULT HWND([out, retval] long *pVal);
		[propget, helpstring("property Focus")] HRESULT Focus([out, retval] VARIANT_BOOL *pVal);
		[propget, helpstring("property OldWndProc")] HRESULT OldWndProc([out, retval] long *pOldWndProc);
		
		[propput, helpstring("property Current Selection")] HRESULT CurrentSelection([in] long nID);
		[propget, helpstring("property Current Selection")] HRESULT CurrentSelection([out, retval] long *nID);
		
		[propput, helpstring("property Previous Selection")] HRESULT PreviousSelection([in] long nID);
		[propget, helpstring("property Previous Selection")] HRESULT PreviousSelection([out, retval] long *nID);
		
		[helpstring("Writes text to AC's Chat Window")] HRESULT WriteToChatWindow(BSTR szText, [defaultvalue(0)] long lColor);
		[helpstring("Sets the Current Mouse Position")] HRESULT SetCursorPosition(long x, long y);
		[helpstring("Gets a key's binding from the current keymap")] HRESULT QueryKeyboardMap([in] BSTR bstrName, [out, retval] long *pAsciiVal);
		[helpstring("Gets known MemLocs from the xml.")] HRESULT QueryMemLoc([in] BSTR bstrName, [out, retval] long *pVal);

		[helpstring("Writes raw text to AC's Chat Window (Doesn't include a newline)")] HRESULT RawWriteToChatWindow(BSTR szText, [defaultvalue(0)] long lColor);
	
		[helpstring("Casts a specific Spell on the Object specified")] HRESULT CastSpell(long lSpellID, long lObjectID);

		[helpstring("Moves items within your inventory")] HRESULT MoveItem(long lObjectID, long lPackID, long lSlot, long lStack);

		[helpstring("Selects an item")] HRESULT SelectItem(long lObjectID);

		[helpstring("Uses an item")] HRESULT UseItem(long lObjectID, long lUseOnSelectedItem);

		[propget, helpstring("property CombatState")] HRESULT CombatState([out, retval] long *pVal);
		[propget, helpstring("property ChatState")] HRESULT ChatState([out, retval] VARIANT_BOOL *pVal);
		[helpstring("method UseItemEx")] HRESULT UseItemEx(long Use, long UseOn);

		[helpstring("Decal itself")] HRESULT get_Decal([out, retval] IDecal **pVal);
		[helpstring("Gets the vital stats of a member of your fellowship")] HRESULT GetFellowStats(long charID);
		[propget, helpstring("property Hooks")] HRESULT Hooks([out, retval] IACHooks **pVal);
		[helpstring("Force redraw of the Decal bar")] HRESULT RedrawBar();
		
		[propget, helpstring("Fetch the font set in DenAgent")] HRESULT FontName([out, retval] BSTR *pFontName);
	};

	[
		object,
		uuid(BA3E677F-8E44-4829-982E-58BBBC5C5F9B),
		helpstring("IPlugin Interface - All plugin components are required to implement this interface"),
		pointer_default(unique)
	]
	interface IPlugin : IUnknown
	{
		[helpstring("Create all objects and views within your plugin. The assigned ID can be used for self termiantion and the plugin site should be stored.")] HRESULT Initialize(IPluginSite *pSite, long nID);
		[helpstring("Release all your objects including the stored IPluginSite")] HRESULT Terminate();
		[propget, helpstring("Return a short text string describing your plugin.")] HRESULT FriendlyName([out, retval] BSTR *pVal);
	};

	[
		object,
		uuid(D216BA6C-D328-4765-B40A-9BC57C96F75E),
		helpstring("IPluginSink Interface"),
		pointer_default(unique)
	]
	interface IPluginSink : IUnknown
	{
		[helpstring("method ChatText")] HRESULT ChatText(BSTR bstrMsg, [out, retval] VARIANT_BOOL *pbEat);
		[helpstring("method ChatMessage")] HRESULT ChatMessage(BSTR bstrMsg, long *pColor, [out, retval] VARIANT_BOOL *pbEat);
	};

	[
		object,
		uuid(65C6CE3D-B66B-4B64-8EA3-18AB2328484E),
		helpstring("IRenderSink Interface"),
		pointer_default(unique)
	]
	interface IRenderSink : IUnknown
	{
		[helpstring("method CustomDraw")] HRESULT CustomDraw(ICanvas* pCanvas);
	};

	[
		object,
		uuid(E4FBF228-D2AA-4298-96EC-6D89A1960731),
		helpstring("IRender3DSink Interface"),
		pointer_default(unique)
	]
	interface IRender3DSink : IUnknown
	{
		[helpstring("method PreBeginScene")] HRESULT PreBeginScene(IUnknown* pD3D);
		[helpstring("method PostBeginScene")] HRESULT PostBeginScene(IUnknown* pD3D);
		[helpstring("method PreEndScene")] HRESULT PreEndScene(IUnknown* pD3D);
		[helpstring("method PostEndScene")] HRESULT PostEndScene(IUnknown* pD3D);
	};

	[
		object,
		uuid(996B377C-1953-4db1-AAC1-157F72592D3E),
		dual,
		helpstring("Base interface for all controls."),
		pointer_default(unique)
	]
	interface IControl : IDispatch
	{
		[id(1), helpstring("Remove this control from the hierarchy.")] HRESULT DestroyChild(long nIndex, [defaultvalue(ePositionByIndex)] enum ePositionType posType);
		[id(2), propget, helpstring("Returns the numerical ID used by this control for events.")] HRESULT ID([out, retval] long *pVal);
		[id(3), propget, helpstring("The number of direct children.")] HRESULT ChildCount([out, retval] long *pVal);
		[id(4), propget, helpstring("Select a child by ID (ePositionByID) or index (ePositionByIndex).")] HRESULT Child(long nIndex, [defaultvalue(ePositionByIndex)] enum ePositionType posType, [out, retval] IControl* *pVal);
		
		//[id(5), propget, helpstring("property Position")] HRESULT Position([out, retval] RECT *pVal);
		//[id(5), propput, helpstring("property Position")] HRESULT Position([in] RECT *newVal);

		};

	[
		uuid(2FEBCBC3-488C-444f-AD08-5D3097D2D1ED),
		helpstring("Base events interface for all controls, copy these member(s) into the specific control interface.")
	]
	dispinterface IControlEvents
	{
	properties:
	methods:
		[id(1), helpstring("This control is about to be destroyed, release any references to this object.")] void Destroy(long nID);
	};

	[
		object,
		uuid(0D63504F-DEEF-4a2d-9742-28DD1BADDA7C),
		helpstring("Base interface for Layers, all control must implement this interface."),
		pointer_default(unique)
	]
	interface ILayer : IUnknown
	{
		[helpstring("Initialize your layer and you must store the ILayerSite.")] HRESULT LayerCreate(ILayerSite *pSite);
		[helpstring("Release all objects including the ILayerSite")] HRESULT LayerDestroy();
		[propget, helpstring("property Position")] HRESULT Position([out, retval] RECT *pVal);
		[propput, helpstring("property Position")] HRESULT Position([in, out] RECT *newVal);
		[helpstring("Invalidate the layer through ILayerSite")] HRESULT Invalidate();
	};

	[
		object,
		uuid(D1C71B85-62C2-42a3-AE2E-4BF5A6BE1784),
		helpstring("Layers that perform drawing should implement this interface."),
		pointer_default(unique)
	]
	interface ILayerRender : IUnknown
	{
		[helpstring("Sent to every layer before the drawing cycle. It can use this opportunity to invalidate.")] HRESULT PreRender();
		[helpstring("Draw your layer into the provided canvas.")] HRESULT Render(ICanvas *pDest);
		[helpstring("Perform any formatting before drawing.")] HRESULT Reformat();
		[helpstring("Use either ICanvas::OffsetOrg or ICanvas::SetClipRect to adjust the clipping area before clipped child layers draw. The visibility return value from those commands should be returned from this function.")] HRESULT AdjustRenderArea(ICanvas *pDest, [out, retval] VARIANT_BOOL *pbVisible);
		[helpstring("For non-square layers - do a fine level of hit testing.")] HRESULT HitTest(LPPOINT pt, [out, retval] VARIANT_BOOL *pbHit);
	};

	[
		object,
		uuid(5B7E9D99-BB3A-475D-842D-43EBEA8284EA),
		helpstring("Base windowing interface. Through here, a layer can manipualte itself and it's children."),
		pointer_default(unique)
	]
	interface ILayerSite : IUnknown
	{
		[helpstring("Destroy this layer, all of it's children and release the controls.")] HRESULT Destroy();
		[helpstring("Append a child layer to the list and create an associated Layer Site.")] HRESULT CreateChild(struct LayerParams *params, ILayer *pSink);
		[helpstring("Returns a specific interface from the layer sink.")] HRESULT GetSink(REFIID iid, [iid_is(iid)] void **ppvItf);
		[helpstring("Redraw this layer for the next render pass. If the layer is transparent, the parent will be invalidated.")] HRESULT Invalidate();
		[propget, helpstring("Returns the default PluginSite - this is used for loading bitmaps and fonts.")] HRESULT PluginSite([out, retval] IPluginSite **ppSite);
		[helpstring("Marks this layer for formatting, this function will also Invalidate.")] HRESULT Reformat();
		[helpstring("Walks up the parent list until it find a parent that implements a particular interface.")] HRESULT GetParentSink(REFIID iid, [iid_is(iid)] void **ppvItf);
		[propget, helpstring("The layer render area, if clipped it is relative parent coordinates, if unclipped it's in screen coordinates.")] HRESULT Position([out, retval] LPRECT pVal);
		[propput, helpstring("The layer render area, if clipped it is relative parent coordinates, if unclipped it's in screen coordinates.")] HRESULT Position([in] LPRECT newVal);
		[propget, helpstring("The layer ID assigned at layer creation - this is used in callbacks.")] HRESULT ID([out, retval] long *pVal);
		[propget, helpstring("The number of direct child layers (clipped and unclipped).")] HRESULT ChildCount([out, retval] long *pVal);
		[propget, helpstring("Returns a direct child by ID or by index.")] HRESULT Child(long nIndex, [defaultvalue(ePositionByIndex)] enum ePositionType posType, [out, retval] ILayerSite* *pVal);
		[helpstring("Captures keyboard input from AC until an event happens. The layer must implement ILayerKeyboard to receive these events.")] HRESULT CaptureKeyboard();
		[helpstring("Determines if a layer is either equal or a descendant of the current layer. If bTextUnclipped is false, the method will only test clipped layers.")] HRESULT IsChild(ILayerSite *pSite, [defaultvalue(0)] VARIANT_BOOL bTestUnclipped, [out, retval] VARIANT_BOOL *pbIsChild);
		[propput, helpstring("Sets the layer to receive notification when an action that cancels popups occurs. Layers that self-terminate popup mode should set this to False when complete. The layer must implement ILayerPopup to receive notifications.")] HRESULT Popup([in] VARIANT_BOOL newVal);
		[propget, helpstring("Returns the position of this layer in screen coordinates.")] HRESULT ScreenPosition([out, retval] LPRECT pVal);
		[helpstring("Begins a timer with a particular ID (first notification is in nInterval ms). The layer must implement ILayerTimer to receive these notifications.")] HRESULT StartTimer(long nID, long nInterval);
		[helpstring("Kill this timer.")] HRESULT EndTimer(long nID);
		[propget, helpstring("property Transparent")] HRESULT Transparent([out, retval] VARIANT_BOOL *pVal);
		[propput, helpstring("property Transparent")] HRESULT Transparent([in] VARIANT_BOOL newVal);
		[propput, helpstring("property Alpha")] HRESULT Alpha(long Alpha);
		[helpstring("Moves the view to the front of the list")] HRESULT moveToFront();
	};

	[
		object,
		uuid(E4CCDC92-8658-4caa-8955-FB891D5BDCF7),
		helpstring("Internal interface for accessing the switch-bar at the top of the screen."),
		pointer_default(unique)
	]
	interface IBarManager : IUnknown
	{
		[helpstring("Appends a bar on the bar maanger.")] HRESULT AddBar(long nViewID, struct ViewParams *pParams);
		[helpstring("Deletes a bar from the manager.")] HRESULT RemoveBar(long nViewID);
		[propget, helpstring("The properties of a particular bar.")] HRESULT Bar(long nViewID, [out, retval] struct ViewParams *pVal);
		[propput, helpstring("The properties of a particular bar.")] HRESULT Bar(long nViewID, [in] struct ViewParams *newVal);
		[helpstring("Force redraw of the Decal bar.")] HRESULT Reformat() ;
	};

	[
		object,
		uuid(DEDCD5AA-F6CA-4DA5-A657-E82F126ABBCD),
		helpstring("Icon cache, this object is a tileset for icon images"),
		pointer_default(unique)
	]
	interface IIconCache : IUnknown
	{
		[helpstring("Renders an icon to a canvas. This function is only guarnateed to work in the rendering cycle.")] HRESULT DrawIcon(LPPOINT ppt, long nFile, long nModule, ICanvas *pTarget);
		[helpstring("Renders an icon to a canvas, Replacing any white pixels with the specified lColor. This function is only guarnateed to work in the rendering cycle.")] HRESULT DrawIconEx(LPPOINT ppt, long nFile, long nModule, ICanvas *pTarget, long lColor);
	};

	[
		object,
		uuid(F88548BC-D11E-4ac2-9A27-3607004D359F),
		dual,
		helpstring("Stores a bitmap loaded from a variety of sources"),
		pointer_default(unique)
	]
	interface IImageCacheDisp : IDispatch
	{
	};

	[
		object,
		uuid(BE566CEC-6881-481C-A146-9F5A32576BE6),
		helpstring("Stores a bitmap loaded from a variety of sources"),
		pointer_default(unique)
	]
	interface IImageCache : IImageCacheDisp
	{
		[helpstring("Uses the image to fill an area on the canvas. The origin is the offset of the image at the top/left corner of the fill area.")] HRESULT PatBlt(ICanvas *pDest, LPRECT prcDest, LPPOINT ptOrigin);
		[helpstring("Stretches an image to a particular width by drawing the head and tail, then pattern filling the middle area. nStartStretch and nEndStretch indicate the area to replicate.")] HRESULT StretchBlt(ICanvas *pDest, LPPOINT pptDest, long nWidth, long nStartStretch, long nEndStretch);
		[helpstring("Copies a portion of an image to a canvas.")] HRESULT Blt(LPRECT rcSrc, ICanvas *pDest, LPPOINT pptDest);
		[propget, helpstring("Returns the dimension of the currently loaded image.")] HRESULT Size([out, retval] SIZE *pVal);
		[helpstring("Copies a portion of an image to a canvas and stretches it.")] HRESULT StretchBltArea(LPRECT prcSrc, ICanvas *pDest, LPRECT prcDest);	
	};

	[
		object,
		uuid(9394E96D-2B29-4c29-AF3E-DB5C476122DB),
		dual,
		helpstring("IFontCache Interface"),
		pointer_default(unique)
	]
	interface IFontCacheDisp : IDispatch
	{
	};

	[
		object,
		uuid(12ECCB0F-36A6-451C-B086-1306B74AAEC2),
		helpstring("IFontCache Interface"),
		pointer_default(unique)
	]
	interface IFontCache : IFontCacheDisp
	{
		[helpstring("Renders text to a canvas. Only guaranteed to work within the render cycle.")] HRESULT DrawText( LPPOINT pt, BSTR szText, long clr, ICanvas *pTarget );
		[helpstring("Returns the width and height of a string of text.")] HRESULT MeasureText(BSTR szText, [out, retval] LPSIZE pszExt);
		[helpstring("method HitTest")] HRESULT HitTest(BSTR szText, long nPos, [out, retval] long *nIndex);
		[helpstring("Renders text to a canvas. Only guaranteed to work within the render cycle.")] HRESULT DrawTextEx( LPPOINT pt, BSTR szText, long clr1, long clr2, long flags, ICanvas *pTarget );
	};

	[
		object,
		uuid(4A2D87CD-BFB4-4723-B959-FFF3FDD49278),
		helpstring("ISimpleBar Interface"),
		pointer_default(unique)
	]
	interface ISimpleBar : IUnknown
	{
		[propget, helpstring("The horizontal area required by this tab.")] HRESULT RenderWidth([out, retval] long *nWidth);
		[propget, helpstring("The text and icon.")] HRESULT Params([out, retval] struct ViewParams *pVal);
		[propput, helpstring("The text and icon.")] HRESULT Params([in] struct ViewParams *newVal);
	};

	[
		object,
		uuid(5014E0B2-9156-412c-946D-9D4BAA9F4C51),
		helpstring("ILayerMouse Interface"),
		pointer_default(unique)
	]
	interface ILayerMouse : IUnknown
	{
		[helpstring("The mouse has entered the control")] HRESULT MouseEnter(struct MouseState *pMouse);
		[helpstring("The mouse has left the control")] HRESULT MouseExit(struct MouseState *pMouse);
		[helpstring("The user pressed the mouse button within the control. This control will have capture until the button is released.")] HRESULT MouseDown(struct MouseState *pMouse);
		[helpstring("The user released the mouse button. Capture is also released.")] HRESULT MouseUp(struct MouseState *pMouse);
		[helpstring("The mouse moved within the area of the layer.")] HRESULT MouseMove(struct MouseState *pMouse);
		[helpstring("The user double clicked inside the layer.")] HRESULT MouseDblClk(struct MouseState *pMouse);
		[helpstring("Generic Mouse Message, parameters are uninterpretted.")] HRESULT MouseEvent(long nMsg, long wParam, long lParam);
	};

	[
		object,
		uuid(829E0FB2-D0B5-4814-BCF9-6ECFA06C9AED),
		helpstring("ILayerSchema Interface"),
		pointer_default(unique)
	]
	interface ILayerSchema : IUnknown
	{
		[helpstring("Load schema from an XML DOM source. Query IXMLDOMElement from the IUnknown pointer.")] HRESULT SchemaLoad(IView *pView, IUnknown *pXMLSchema);
	};

	[
		object,
		uuid(0F5765A4-9F83-4077-8884-6CBDDCE348F7),
		dual,
		helpstring("IButton Interface"),
		pointer_default(unique)
	]
	interface IButton : IControl
	{
		[id(101), helpstring("Set the pressed and released images.")] HRESULT SetImages(long nModule, long nReleased, long nPressed);
		[id(102), propget, helpstring("The background color for this button - usually black (#000000).")] HRESULT Matte([out, retval] long *pVal);
		[id(102), propput, helpstring("The background color for this button - usually black (#000000).")] HRESULT Matte([in] long newVal);
	};

	[
		uuid(F029D3A1-29AF-45ef-927E-729FEDD87403),
		helpstring("ICommandEvents Interface")
	]
	dispinterface ICommandEvents
	{
	properties:
	methods:
		[id(1), helpstring("method Destroy")] void Destroy(long nID);
		[id(2), helpstring("method CommandHit")] void Hit(long nID);
		[id(3), helpstring("method CommandUnhit")] void Unhit(long nID);
		[id(4), helpstring("method CommandAccepted")] void Accepted(long nID);
		[id(5), helpstring("method CommandCanceled")] void Canceled(long nID);
	};

	[
		object,
		uuid(BD9FC464-C0D8-4823-8255-E818F8836B08),
		helpstring("IPager Interface"),
		pointer_default(unique)
	]
	interface IPager : IControl
	{
		[helpstring("method FinishCommand")] HRESULT FinishCommand();
		[helpstring("method ScrollTo")] HRESULT ScrollTo(LPPOINT ppt);
		[propget, helpstring("property Command")] HRESULT Command([out, retval] long *pVal);
		[propput, helpstring("property Command")] HRESULT Command([in] long newVal);
		[propget, helpstring("property Offset")] HRESULT Offset([out, retval] LPPOINT pVal);
		[propput, helpstring("property Offset")] HRESULT Offset([in] LPPOINT newVal);
		[helpstring("method CreateClient")] HRESULT CreateClient(ILayer *pLayer);
	};

	[
		uuid(7499EB61-6992-4e21-8A55-CF44D44C0A07),
		helpstring("IPagerEvents Interface")
	]
	dispinterface IPagerEvents
	{
	properties:
	methods:
		[id(1), helpstring("method Destroy")] void Destroy(long nID);
		[id(6), helpstring("method PagerUpdatePosition")] void Change(long nID, long nCommand, long nX, long nY);
		[id(7), helpstring("method PagerGetNextPosition")] VARIANT_BOOL GetNextPosition(long nID, long nCommand, [in, out] long *nX, [in, out] long *nY);
	};

	[
		object,
		uuid(2B52B5CB-9E10-4238-8F62-A501406E3EAB),
		helpstring("IPanel Interface"),
		pointer_default(unique)
	]
	interface IPanel : IUnknown
	{
		[helpstring("method AddView")] HRESULT AddView(long nViewID, ILayer *pLayer);
		[helpstring("method ActivateView")] HRESULT ActivateView(long nViewID, struct ViewParams *pParams, long *pVal);
		[helpstring("method RemoveView")] HRESULT RemoveView(long nViewID);
		[propget, helpstring("property ActiveView")] HRESULT ActiveView([out, retval] long *pVal);
		[helpstring("method LoadView")] HRESULT LoadView(long nViewID, IView *pView, IUnknown *pSchema);
		[helpstring("method Deactivate")] HRESULT Deactivate();
		[propputref, helpstring("property Sink")] HRESULT Sink([in] IPanelSink* newVal);
		[helpstring("method LoadViewEx")] HRESULT LoadViewEx(long nViewID, IView *pView, IUnknown *pSchema, long lViewFlags);
		[propget, helpstring("property Transparent")] HRESULT Transparent([out, retval] VARIANT_BOOL* pVal);
		[propput, helpstring("property Transparent")] HRESULT Transparent([in] VARIANT_BOOL newVal);
		[propput, helpstring("property Params")] HRESULT Params([in] struct ViewParams *newVal);
	};

	[
		object,
		uuid(85D70924-917D-41bb-995D-C40E6AB21C71),
		helpstring("IPanelSink Interface"),
		pointer_default(unique)
	]
	interface IPanelSink : IUnknown
	{
		[helpstring("method PanelDeactivate")] HRESULT PanelDeactivate( long nViewID );
	};

	[
		object,
		uuid(9241862D-BA71-4317-8166-3A3E61CE3E5F),
		helpstring("ICanvas Interface"),
		pointer_default(unique)
	]
	interface ICanvas : IUnknown
	{
		[helpstring("method PushClipRect")] HRESULT PushClipRect(LPRECT prc, [out, retval] VARIANT_BOOL *pbVisible);
		[helpstring("method PopClipRect")] HRESULT PopClipRect();
		[helpstring("method GetDC")] HRESULT GetDC([out,retval] HDC *pdc);
		[helpstring("method ReleaseDC")] HRESULT ReleaseDC();
		[helpstring("method GetSurface")] HRESULT GetSurface(REFIID iid, [out, retval, iid_is(iid)] void **ppvItf);
		[helpstring("method Fill")] HRESULT Fill(LPRECT prc, long nRGB);
		[helpstring("method Frame")] HRESULT Frame(LPRECT prc, long nRGB);
		[helpstring("method GetClipParams")] HRESULT GetClipParams([out, retval] struct ClipParams *pParams);
		[propget, helpstring("property WasLost")] HRESULT WasLost([out, retval] VARIANT_BOOL *pVal);
		[propget, helpstring("property Size")] HRESULT Size([out, retval] LPSIZE pVal);
		[propput, helpstring("property Size")] HRESULT Size([in] LPSIZE newVal);
		[helpstring("method Blt")] HRESULT Blt(LPRECT prcSrc, ICanvas *pSrc, LPPOINT pptDest);
		[helpstring("method HitTest")] HRESULT HitTest(LPPOINT ppt, [out, retval] VARIANT_BOOL *pbHit);
		[helpstring("method ToClient")] HRESULT ToClient([in, out] LPPOINT pt);
		[helpstring("method ToScreen")] HRESULT ToScreen([in, out] LPPOINT ppt);
		[helpstring("method OffsetOrg")] HRESULT OffsetOrg(LPPOINT ppt, [out, retval] VARIANT_BOOL *pbVisible);
		[helpstring("method SetClipRect")] HRESULT SetClipRect(LPRECT prcClip, [out, retval] VARIANT_BOOL *pbVisible);
		[propput, helpstring("method Alpha")] HRESULT Alpha(long Alpha);
		[helpstring("method DownMixRGB")] HRESULT DownMixRGB(WORD wRed, WORD wGreen, WORD wBlue, [out, retval] WORD *wDMRGB);
		[helpstring("method GetDCLong")] HRESULT GetDCLong([out, retval] long *DC);
		[helpstring("method SetTransparentColor")] HRESULT SetTransparentColor([in] long TransColor);
		[helpstring("method StretchBlt")] HRESULT StretchBlt(LPRECT prcSrc, ICanvas *pSrc, LPRECT prcDest);
	};

	[
		object,
		uuid(F3B54A0C-61B9-4B7A-9FD8-82B0477FB7D9),
		dual,
		helpstring("IView Interface"),
		pointer_default(unique)
	]
	interface IViewDisp : IDispatch
	{
		[propget, helpstring("property Control")] HRESULT Control(BSTR strName, [out, retval] IControl * *pVal);
		[propputref, helpstring("property Control")] HRESULT Control(BSTR strName, [in] IControl * newVal);
		[propget, helpstring("property Title")] HRESULT Title([out, retval] BSTR *pVal);
		[propput, helpstring("property Title")] HRESULT Title([in] BSTR newVal);
		[helpstring("property Alert")] HRESULT Alert();
		[helpstring("method SetIcon")] HRESULT SetIcon(long icon, [optional] VARIANT iconlibrary);
		[helpstring("method Activate")] HRESULT Activate();
		[helpstring("method Deactivate")] HRESULT Deactivate();
		[propput, helpstring("property Position")] HRESULT Position([in, out] RECT *newVal);
		[propget, helpstring("property Position")] HRESULT Position([out, retval] RECT *pVal);
	};

	[
		object,
		uuid(A2AE18B7-85C9-451c-8CC3-D0FFE6B86EEB),
		helpstring("IView Interface"),
		pointer_default(unique)
	]
	interface IView : IViewDisp
	{
		[helpstring("method LoadControl")] HRESULT LoadControl(ILayerSite *pParent, long nID, IUnknown *pXMLSource, [out, retval] long *pAssignedID);
		[helpstring("method LoadSchema")] HRESULT LoadSchema(BSTR strXMLSchema);
		[propput, helpstring("property Alpha")] HRESULT Alpha(long Alpha);
		[propget, helpstring("property Activated")] HRESULT Activated([out, retval] VARIANT_BOOL* pVal);
		[propput, helpstring("property Activated")] HRESULT Activated([in] VARIANT_BOOL newVal);
		[propget, helpstring("property Transparent")] HRESULT Transparent([out, retval] VARIANT_BOOL* pVal);
		[propput, helpstring("property Transparent")] HRESULT Transparent([in] VARIANT_BOOL newVal);
		[propget, helpstring("property Alpha")] HRESULT Alpha([out, retval] long *pVal);
	};

	[
		uuid(4B7B19D5-61A2-4ab0-8B1B-381A303A937F),
		helpstring("IViewEvents Interface")
	]
	dispinterface IViewEvents
	{
	properties:
	methods:
		[id(8), helpstring("method ViewActivate")] void Activate();
		[id(9), helpstring("method ViewDeactivate")] void Deactivate();
		[id(13), helpstring("method ViewSize")] VARIANT_BOOL Size();
		[id(14), helpstring("method ViewSizing")] void Sizing([in] /*IView *pView*/ /*struct ViewParams *pViewParams RECT *pRect*/ long left, long top, long width, long height);
	};

	[
		object,
		uuid(D3006096-B293-47f5-9377-C12DEF5C1D34),
		helpstring("IRootLayer Interface"),
		pointer_default(unique)
	]
	interface IRootLayer : IUnknown
	{
		[helpstring("method CreateView")] HRESULT CreateView(struct ViewParams *pParams, ILayer *pLayer, [out, retval] IView **ppView);
		[helpstring("method SelectBar")] HRESULT SelectBar(long nID);
		[helpstring("method LoadView")] HRESULT LoadView(BSTR strXML, [out, retval] IView **ppView);
		[helpstring("method LoadViewObject")] HRESULT LoadViewObject(IUnknown *pSchema, [out, retval] IView **ppView);
	};

	[
		object,
		uuid(7500929F-4251-4373-B978-286A8A8BECED),
		helpstring("ILayerKeyboard Interface"),
		pointer_default(unique)
	]
	interface ILayerKeyboard : IUnknown
	{
		[helpstring("method KeyboardChar")] HRESULT KeyboardChar(struct KeyState *pKS);
		[helpstring("method KeyboardEndCapture")] HRESULT KeyboardEndCapture(VARIANT_BOOL bCancel);
		[helpstring("method KeyboardEvent")] HRESULT KeyboardEvent(long nMsg, long wParam, long lParam);
	};

	[
		object,
		uuid(22072A97-E5E6-4d91-A344-807235BFA5D8),
		helpstring("ILayerPopup Interface"),
		pointer_default(unique)
	]
	interface ILayerPopup : IUnknown
	{
		[helpstring("method PopupCancel")] HRESULT PopupCancel(struct MouseState *pMouse, [out, retval] VARIANT_BOOL *pbContinue);
	};

	[
		object,
		uuid(5D6B8A1B-321A-479f-9347-55725BDA3DA9),
		helpstring("ILayerTimer Interface"),
		pointer_default(unique)
	]
	interface ILayerTimer : IUnknown
	{
		[helpstring("method TimerTimeout")] HRESULT TimerTimeout(long nID, long nInterval, long nReps, [out, retval] VARIANT_BOOL *pbContinue);
	};

	[
		object,
		uuid(EDB7EE44-2368-4382-97A4-D4F55C63D818),
		helpstring("IDecalTimer Interface"),
		pointer_default(unique)
	]
	interface IDecalTimer : IUnknown
	{
		[helpstring("method TimerTimeout")] HRESULT TimerTimeout(long nID, long nInterval, long nReps, [out, retval] VARIANT_BOOL *pbContinue);
	};

	[
		object,
		uuid(A68BE455-C241-49c5-9F8A-070E4CBE430F),
		helpstring("IWindowsMessageSink Interface"),
		pointer_default(unique)
	]
	interface IWindowsMessageSink : IUnknown
	{
		[helpstring("method WindowsMessage")] HRESULT WindowMessage(long hWnd, short uMsg, long wParam, long lParam, [out, retval] VARIANT_BOOL *pbEat);
		[helpstring("method WindowsMessageEnd")] HRESULT WindowMessageEnd();
	};

	[
		object,
		uuid(50CDFD25-4F3B-4412-96BE-947A6C7B93A2),
	
		helpstring("IBrushImage Interface"),
		pointer_default(unique)
	]
	interface IBrushImage : IUnknown
	{
		[propget, helpstring("property Color")] HRESULT Color([out, retval] long *pVal);
		[propput, helpstring("property Color")] HRESULT Color([in] long newVal);
	};

	[
		object,
		uuid(634D74B8-AFED-4710-82C9-B530326E1AFA),
		dual,
		helpstring("IInputBuffer Interface"),
		pointer_default(unique)
	]
	interface IInputBuffer : IDispatch
	{
		[id(1), helpstring("method Clear")] HRESULT Clear();
		[id(2), helpstring("method Input")] HRESULT TypeText(BSTR strText);
		[id(3), helpstring("method Delay")] HRESULT Delay(long nMilliseconds, [defaultvalue( 0 )] VARIANT_BOOL bAllowInput );
		[id(4), helpstring("method MouseClick")] HRESULT MouseClick(long nX, long nY, enum eMouseInput eAction);
		[propget, id(5), helpstring("property Status")] HRESULT Status([out, retval] enum eInputStatus *pVal);
		[id(6), helpstring("method Run")] HRESULT Run();
	};

	[
		uuid(BD33BADC-F909-4eb6-AD15-B1569B58898B),
		helpstring("IInputEvents event interface")
	]
	dispinterface IInputEvents
	{
	properties:
	methods:
		[id(10), helpstring("method Begin")] HRESULT Begin();
		[id(11), helpstring("method End")] HRESULT End();
		[id(12), helpstring("method Pause")] HRESULT Pause();
	};

	[
		object,
		uuid(E288C465-2DD6-4fcd-95E2-5BBC1A1D2D32),
		dual,
		helpstring("IInputNotify Interface"),
		pointer_default(unique)
	]
	interface IInputNotify : IDispatch
	{
		[id(1), helpstring("method NotifyBegin")] HRESULT NotifyBegin();
		[id(2), helpstring("method NotifyEnd")] HRESULT NotifyEnd();
		[id(3), helpstring("method SetMousePos")] HRESULT SetMousePos(long nX, long nY);
		[id(4), helpstring("method NotifyPause")] HRESULT NotifyPause();
	};
	[
		object,
		uuid(47761792-2520-4802-8548-5CA580697614),
		helpstring("IInjectService Interface"),
		pointer_default(unique)
	]
	interface IInjectService : IUnknown
	{
		[propget, id(1), helpstring("property Site")] HRESULT Site([out, retval] IPluginSite **pVal);
		[helpstring("method InitPlugin")] HRESULT InitPlugin(IUnknown *pUnk);
	};

	[
		object,
		uuid(93D72C31-CBC3-4471-AE4B-395FBB4D3B45),
		helpstring("IPluginAdapterV1 Interface"),
		pointer_default(unique)
	]
	interface IPluginAdapterV1 : IUnknown
	{
	};
	
[
	uuid(3559E08B-827E-4DFE-9D33-3567246849CC),
	version(1.0),
	helpstring("Decal Plugins Type Library")
]
library DecalPlugins
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");

	interface IPlugin;
	interface IPluginSink;
	interface IRenderSink;
	interface IRender3DSink;

	interface ILayerSite;
	interface IControl;

	interface ILayer;
	interface ILayerRender;
	interface ILayerMouse;
	interface ILayerKeyboard;
	interface ILayerPopup;
	interface ILayerSchema;
	interface ILayerTimer;

	interface IControlEvents;

	interface IIconCache;
	interface IImageCache;
	interface IFontCache;

	interface IBarManager;
	interface ISimpleBar;
	interface IRootLayer;
	interface IPanelSink;
	interface IInputNotify;

	interface IWindowsMessageSink;

	dispinterface IControlEvents;
	dispinterface ICommandEvents;
	dispinterface IPagerEvents;
	dispinterface IViewEvents;
	dispinterface IInputEvents;

	interface IFontCacheDisp;
	interface IImageCacheDisp;
	interface IViewDisp;

	[
		uuid(91892F16-31A3-4E23-9CFD-89A5A5174A59),
		helpstring("Canvas Class"),
		noncreatable
	]
	coclass Canvas
	{
		[default] interface ICanvas;
	};

	[
		uuid(B2FBD583-B64C-4dfc-BAAA-34B8C21482F8),
		helpstring("PluginSite Class"),
		noncreatable
	]
	coclass PluginSite
	{
		[default] interface IPluginSite;
	};

	[
		uuid(6FEA2219-7438-4f76-8165-C47AA060D811),
		helpstring("Layer Class"),
		noncreatable
	]
	coclass Layer
	{
		[default] interface ILayerSite;
	};

	[
		uuid(19BF46E4-5CB8-4CFC-A17A-8E6673E60ABF),
		helpstring("View Class"),
		noncreatable
	]
	coclass View
	{
		[default] interface IViewDisp;
		[default, source] interface IViewEvents;
	};

	[
		uuid(C22BF2FC-F144-4d17-9C12-A344F980BB17),
		helpstring("Button Class")
	]
	coclass Button
	{
		[default] interface IButton;
		[default, source] interface ICommandEvents;
	};

	[
		uuid(C79E2F76-06F8-4cd0-A613-4829237D297D),
		helpstring("Pager Class")
	]
	coclass Pager
	{
		[default] interface IControl;
		[default, source] interface IPagerEvents;
	};

	[
		uuid(918C0333-5714-4C8D-A95C-2C137B76D364),
		noncreatable,
		helpstring("SolidImage Class")
	]
	coclass BrushImage
	{
		[default] interface IBrushImage;
		interface IImageCache;
	};

	[
		uuid(2F91FC21-4D89-4B64-94AE-A124D54563AE),
		helpstring("InputBuffer Class"),
		noncreatable
	]
	coclass InputBuffer
	{
		[default] interface IInputBuffer;
		[default, source] interface IInputEvents;
	};

	[
		uuid(FEFE5CAB-10E4-404F-AD4D-184BCB506099),
		helpstring("DecalPlugins Inject Service Gateway")
	]
	coclass InjectService
	{
		[default] interface IInjectService;
	};

	[
		uuid(3D837F6E-B5CA-4604-885F-7AB45FCFA62A),
		helpstring("Version 1 Plugin Surrogate")
	]
	coclass PluginAdapterV1
	{
		[default] interface IPluginAdapterV1;
	};
};
