{
Miranda IM: the free IM client for Microsoft* Windows*

Copyright 2000-2008 Miranda ICQ/IM project, 
all portions of this codebase are copyrighted to the people 
listed in contributors.txt.

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 2
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, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
}

{$IFNDEF M_SKE}
{$DEFINE M_SKE}

const
//*defaults*/
//  DEFAULT_FIT_MODE   = FM_STRETCH;
//  DEFAULT_STYLE      = ST_BRUSH  ;
//  DEFAULT_BKCOLOUR    GetSysColor(COLOR_3DFACE);
//  DEFAULT_SELBKCOLOUR GetSysColor(COLOR_HIGHLIGHT);

  SIZING_MARGIN = 3;

//* Fit mode */
  FM_STRETCH   = 0;
  FM_TILE_HORZ = 1;
  FM_TILE_VERT = 2;
  FM_TILE_BOTH = 3;

//*Object types*/
  OT_ANY         = 0;
  OT_GLYPHOBJECT = 1;
  OT_FONTOBJECT  = 2;

//*STYLE INDEXEX*/
  ST_SKIP     = 0;
  ST_PARENT   = 1;
  ST_BRUSH    = 2;
  ST_IMAGE    = 3;
  ST_SOLARIZE = 4;  //Not used yet.
  ST_FRAGMENT = 5;
  ST_GRADIENT = 6;

//formats:
  ADT_TOP     = $00000000;
  ADT_LEFT    = $00000000;
  ADT_HCENTER = $00000001;
  ADT_RIGHT   = $00000002;
  ADT_VCENTER = $00000004;
  ADT_BOTTOM  = $00000008;
//  ADT_ECLIPSE = 64;


//*SERVICES*/

//toggle the 'hide offline contacts' flag and call CLUI   
//wParam=0
//lParam=0
  MS_CLIST_TOGGLEHIDEOFFLINE:PAnsiChar = 'CList/ToggleHideOffline';

  MS_CLIST_TOGGLEGROUPS:PAnsiChar = 'CList/ToggleGroups';

  MS_CLIST_TOGGLESOUNDS:PAnsiChar = 'CList/ToggleSounds';

// Add new object to skin object list.
// wParam = pointer to SKINOBJECTDESCRIPTOR structure
// lParam = 0 ( used for internal purposes: pointer to skin object list)
  MS_SKIN_REGISTEROBJECT:PAnsiChar = 'ModernList/RegisterObject';

// Add new object to skin object list.
// wParam = pointer to DEF_SKIN_OBJECT_PARAMS structure
// lParam = 0 ( used for internal purposes: pointer to skin object list)
  MS_SKIN_REGISTERDEFOBJECT:PAnsiChar = 'ModernList/RegisterDefObject';

type
  DEF_SKIN_OBJECT_PARAMS = record
    szObjectID:PAnsiChar;
    defStyle:byte;
    defColor:dword;
    //  Skin: PSKINOBJECTSLIST;
  end;

const
// Request painting glyph object 
// wParam = pointer to SKINDRAWREQUEST structure
// lParam = 0
  MS_SKIN_DRAWGLYPH:PAnsiChar = 'ModernList/DrawGlyph';


//* EVENTS */
  ME_SKIN_SERVICESCREATED:PAnsiChar = 'ModernList/ServicesCreated';

//* DRAWGLYPH Request structure */
type
  PSKINDRAWREQUEST = ^TSKINDRAWREQUEST;
  TSKINDRAWREQUEST = record
    szObjectID:array [0..254] of AnsiChar; // Unic Object ID (path) to paint
    rcDestRect:TRECT;                      // Rectangle to fit
    rcClipRect:TRECT;                      // Rectangle to paint in.
    hDC:HDC;                               // Handler to device context to paint in. 
  end;

//* SKINOBJECTDESCRIPTOR opbject descriptor structure */
type
  PSKINOBJECTDESCRIPTOR = ^TSKINOBJECTDESCRIPTOR;
  TSKINOBJECTDESCRIPTOR = record
    bType:byte;           // One of OT_* values.
    szObjectID:PAnsiChar; // Unic Object ID (path) [255] max
    Data:pointer;         // Pointer to GLYPHOBJECT strycture if bType==OT_GLYPHOBJECT
  end;

//* SKINOBJECTDESCRIPTOR opbject descriptor structure */
type
  PGLYPHOBJECT = ^TGLYPHOBJECT;
  TGLYPHOBJECT = record
    Style      :byte;        // One of ST_* values 
    hGlyph     :HBITMAP;     // Bitmap handler (for internal use only)
    dwTop,
    dwLeft,
    dwBottom,
    dwRight    :dword;       // Margins 
    szFileName :PAnsiChar;   // FileName of image
    dwColor    :dword;       // Fill color
    dwAlpha    :byte;        // Constant alpha-transparency level
    FitMode    :byte;        // One of FM_* values
    clipArea   :TPOINT;      // Object image rect on full image
    szclipArea :TSIZE;       // Object image rect on full image
    plTextList :PSortedList; // List of GLYPHTEXT
    bmWidth    :long;
    bmHeight   :long;
    bmBitsPixel:byte;
  end;

//* SKINTEXTDESCRIPTOR opbject descriptor structure */
type
  PGLYPHTEXT = ^TGLYPHTEXT;
  TGLYPHTEXT = record
    szGlyphTextID:PAnsiChar;
    stText       :TChar;
    stValueText  :TChar;
    dwFlags      :dword;
    dwColor      :dword;  // Color (InvAA)(RR)(GG)(BB)
    dwShadow     :dword;  //ToDo: Color2/Shaddow
    iLeft,iTop,iRight,iBottom:int;
    RelativeFlags:byte;
    szFontID     :PAnsiChar;
    hFont        :HFONT;
    szObjectName :PAnsiChar;
  end;

//* SKINTEXTDESCRIPTOR opbject descriptor structure */
type
  PSKINFONT = ^TSKINFONT;
  TSKINFONT = record
    szFontID:PAnsiChar;
    hFont   :HFONT;
  end;

//////////////////////////////////////////////
//                                          //
//  New Painting sequence servises          //
//                                          //
//////////////////////////////////////////////

type
  sPaintRequest = record
    dStructSize :dword;                 // size of structure
    hWnd        :HWND;                  // called by window
    hDC         :HDC;                   // context to draw on
    rcUpdate    :TRECT;                 // rectangle to be painted in (relative to Top-Left corner of Main window)
    dwFlags     :dword;                 // drawing flags
    CallbackData:pointer;               // Data for passing to callback procedure
    Reserved    :array [0..15] of byte; // reserved for farther usage;
  end;

const
// Request to register sub for callback painting frame area
// wParam = hWnd of called frame
// lParam = pointer to tPaintCallBackProc    (or NULL to remove)
// return 1 - succes, 0 - failure
  MS_SKINENG_REGISTERPAINTSUB:PAnsiChar = 'SkinEngine/ske_Service_RegisterFramePaintCallbackProcedure';

// Request to repaint frame or change/drop callback data immeadeately
// wParam = hWnd of called frame
// lParam = pointer to sPaintRequest (or NULL to redraw all)
  MS_SKINENG_UPTATEFRAMEIMAGE:PAnsiChar = 'SkinEngine/ske_Service_UpdateFrameImage';

// Request to repaint frame or change/drop callback data
// wParam = hWnd of called frame
// lParam = pointer to sPaintRequest (or NULL to redraw all)
// return 2 - already queued, data updated, 1-have been queued, 0 - failure
  MS_SKINENG_INVALIDATEFRAMEIMAGE:PAnsiChar = 'SkinEngine/ske_Service_InvalidateFrameImage';

// Callback proc type
type
  tPaintCallbackProc = function(hWnd:HWND; hDC:HDC; rcPaint:PRECT; rgnUpdate:HRGN;
       dFlags:dword; CallBackData:pointer):int;

const
// 
// Paints text with correct alpha channel
// wParam - pointer to AlphaTextOutParams
  MS_SKINENG_ALPHATEXTOUT:PAnsiChar = 'SkinEngine/ske_AlphaTextOut';

type
  TAlphaTextOutParams = record
    HDC      :HDC;
    lpString :TChar;
    nCount   :int;
    lpRect   :PRECT;
    forma    :uint;
    ARGBcolor:dword;
    reserv   :array [0..15] of byte;
  end;

type
  ImageListFixParam = record
    himl :THANDLE; //HIMAGELIST;
    index:int;
    hicon:HICON;
  end;

type
  DrawIconFixParam = record
    hdc               :HDC;
    xLeft             :int;
    yTop              :int;
    hIcon             :HICON;
    cxWidth           :int;
    cyWidth           :int;
    istepIfAniCur     :uint;
    hbrFlickerFreeDraw:HBRUSH;
    diFlags           :uint;
  end;

const
//wParam - pointer to DrawIconFixParam
  MS_SKINENG_DRAWICONEXFIX:PAnsiChar = 'SkinEngine/DrawIconEx_Fix';

const
//  Register of plugin's user
//
//  wParam = (WPARAM)szSetting - string that describes a user
//           format: Category/ModuleName,
//           eg: "Contact list background/CLUI",
//               "Status bar background/StatusBar"
//  lParam = (LPARAM)dwFlags
//
  MS_BACKGROUNDCONFIG_REGISTER:PAnsiChar = 'ModernBkgrCfg/Register';

//
//  Notification about changed background
//  wParam = ModuleName
//  lParam = 0
  ME_BACKGROUNDCONFIG_CHANGED:PAnsiChar = 'ModernBkgrCfg/Changed';

{$ENDIF}