From f673f034c2fef25e932a12fbd5e2772f90c75e6d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 17 Jun 2012 12:44:02 +0000 Subject: Clist_mw & Clist_modern renamed git-svn-id: http://svn.miranda-ng.org/main/trunk@455 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Clist_modern/m_api/m_skin_eng.h | 434 +++++++++++++++++++++++++ plugins/Clist_modern/m_api/m_skinbutton.h | 30 ++ plugins/Clist_modern/m_api/m_skinned_profile.h | 44 +++ plugins/Clist_modern/m_api/m_xpTheme.h | 35 ++ 4 files changed, 543 insertions(+) create mode 100644 plugins/Clist_modern/m_api/m_skin_eng.h create mode 100644 plugins/Clist_modern/m_api/m_skinbutton.h create mode 100644 plugins/Clist_modern/m_api/m_skinned_profile.h create mode 100644 plugins/Clist_modern/m_api/m_xpTheme.h (limited to 'plugins/Clist_modern/m_api') diff --git a/plugins/Clist_modern/m_api/m_skin_eng.h b/plugins/Clist_modern/m_api/m_skin_eng.h new file mode 100644 index 0000000000..78de34e2bb --- /dev/null +++ b/plugins/Clist_modern/m_api/m_skin_eng.h @@ -0,0 +1,434 @@ +/* + +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_H_INC +#define M_ske_H_INC + +#include "newpluginapi.h" +#include "m_clui.h" +#include "../hdr/modern_commonheaders.h" + + +/*defaults*/ +#define DEFAULT_FIT_MODE FM_STRETCH +#define DEFAULT_STYLE ST_BRUSH +#define DEFAULT_BKCOLOUR GetSysColor(COLOR_3DFACE) +#define DEFAULT_SELBKCOLOUR GetSysColor(COLOR_HIGHLIGHT) +#define SIZING_MARGIN 3 + +/* Fit mode */ +#define FM_STRETCH 0 +#define FM_TILE_HORZ 1 +#define FM_TILE_VERT 2 +#define FM_TILE_BOTH 3 + +/*Object types*/ +#define OT_ANY 0 +#define OT_GLYPHOBJECT 1 +#define OT_FONTOBJECT 2 + +/*STYLE INDEXEX*/ +#define ST_SKIP 0 +#define ST_PARENT 1 +#define ST_BRUSH 2 +#define ST_IMAGE 3 +#define ST_SOLARIZE 4 //Not used yet. +#define ST_FRAGMENT 5 +#define ST_GRADIENT 6 + +//formats: +#define ADT_TOP 0x00000000 +#define ADT_LEFT 0x00000000 +#define ADT_HCENTER 0x00000001 +#define ADT_RIGHT 0x00000002 +#define ADT_VCENTER 0x00000004 +#define ADT_BOTTOM 0x00000008 +//#define ADT_ECLIPSE 64 + + +/*SERVICES*/ + +//toggle the 'hide offline contacts' flag and call CLUI +//wParam=0 +//lParam=0 +#define MS_CLIST_TOGGLEHIDEOFFLINE "CList/ToggleHideOffline" + +#define MS_CLIST_TOGGLEGROUPS "CList/ToggleGroups" + +#define MS_CLIST_TOGGLESOUNDS "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) +#define MS_SKIN_REGISTEROBJECT "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) +#define MS_SKIN_REGISTERDEFOBJECT "ModernList/RegisterDefObject" + +typedef struct s_DEF_SKIN_OBJECT_PARAMS +{ + char * szObjectID; + BYTE defStyle; + DWORD defColor; + // SKINOBJECTSLIST * Skin; +} DEF_SKIN_OBJECT_PARAMS; + + +// Request painting glyph object +// wParam = pointer to SKINDRAWREQUEST structure +// lParam = 0 +#define MS_SKIN_DRAWGLYPH "ModernList/DrawGlyph" + + + +/* EVENTS */ +#define ME_SKIN_SERVICESCREATED "ModernList/ServicesCreated" + +/* DRAWGLYPH Request structure */ +typedef struct s_SKINDRAWREQUEST +{ + char szObjectID[255]; // Unic Object ID (path) to paint + RECT rcDestRect; // Rectangle to fit + RECT rcClipRect; // Rectangle to paint in. + HDC hDC; // Handler to device context to paint in. +} SKINDRAWREQUEST,*LPSKINDRAWREQUEST; + +/* SKINOBJECTDESCRIPTOR opbject descriptor structure */ +typedef struct tagSKINOBJECTDESCRIPTOR +{ + BYTE bType; // One of OT_* values. + char* szObjectID; // Unic Object ID (path) [255] max + LPVOID Data; // Pointer to GLYPHOBJECT strycture if bType==OT_GLYPHOBJECT +} SKINOBJECTDESCRIPTOR, *LPSKINOBJECTDESCRIPTOR; + +/* SKINOBJECTDESCRIPTOR opbject descriptor structure */ +typedef struct s_GLYPHOBJECT +{ + BYTE Style; // One of ST_* values + HBITMAP hGlyph; // Bitmap handler (for internal use only) + DWORD dwTop, dwLeft, dwBottom, dwRight; // Margins + char* szFileName; // FileName of image + DWORD dwColor; // Fill color + BYTE dwAlpha; // Constant alpha-transparency level + BYTE FitMode; // One of FM_* values + POINT clipArea; // Object image rect on full image + SIZE szclipArea; // Object image rect on full image + SortedList * plTextList; // List of GLYPHTEXT + LONG bmWidth; + LONG bmHeight; + BYTE bmBitsPixel; +} GLYPHOBJECT,*LPGLYPHOBJECT; + +/* SKINTEXTDESCRIPTOR opbject descriptor structure */ +typedef struct s_GLYPHTEXT +{ + char * szGlyphTextID; + TCHAR * stText; + TCHAR * stValueText; + DWORD dwFlags; + DWORD dwColor; // Color (InvAA)(RR)(GG)(BB) + DWORD dwShadow; //ToDo: Color2/Shaddow + int iLeft,iTop,iRight,iBottom; + BYTE RelativeFlags; + char * szFontID; + HFONT hFont; + char * szObjectName; +}GLYPHTEXT,*LPGLYPHTEXT; + +/* SKINTEXTDESCRIPTOR opbject descriptor structure */ +typedef struct s_SKINFONT +{ + char * szFontID; + HFONT hFont; +}SKINFONT, *LPSKINFONT; + +/* HELPER FUNCTIONS */ + +//Paint ObjectID as parent background for frame hwndIn +int __inline SkinDrawWindowBack(HWND hwndIn, HDC hdc, RECT * rcClip, char * objectID); +//Paint ObjectID +int __inline SkinDrawGlyph(HDC hdc, RECT * rcSize, RECT * rcClip, char * objectID); +//Register object with predefined style +int __inline CreateGlyphedObjectDefStyle(char * ObjID,BYTE defStyle); +int __inline CreateGlyphedObjectDefColor(char * ObjID,DWORD defColor); +//Register default object +int __inline CreateGlyphedObject(char * ObjID); + + + +//// Creating and registering objects +//int __inline CreateGlyphedObject(char * ObjID) +//{ +// DEF_SKIN_OBJECT_PARAMS prm={0}; +// prm.defColor=DEFAULT_BKCOLOUR; +// prm.defStyle=DEFAULT_STYLE; +// prm.szObjectID=ObjID; +// return CallService(MS_SKIN_REGISTERDEFOBJECT,(WPARAM)&prm,0); +//} +static BOOL __inline ScreenToClientRect(HWND hWnd, LPRECT lpRect) +{ + BOOL ret; + + POINT pt; + + pt.x = lpRect->left; + pt.y = lpRect->top; + + ret = ScreenToClient(hWnd, &pt); + + if (!ret) return ret; + + lpRect->left = pt.x; + lpRect->top = pt.y; + + + pt.x = lpRect->right; + pt.y = lpRect->bottom; + + ret = ScreenToClient(hWnd, &pt); + + lpRect->right = pt.x; + lpRect->bottom = pt.y; + + return ret; +} + +//int __inline CreateGlyphedObjectDefStyle(char * ObjID,BYTE defStyle) +//{ +// DEF_SKIN_OBJECT_PARAMS prm={0}; +// prm.defColor=DEFAULT_BKCOLOUR; +// prm.defStyle=defStyle; +// prm.szObjectID=ObjID; +// return CallService(MS_SKIN_REGISTERDEFOBJECT,(WPARAM)&prm,0); +//} +//int __inline CreateGlyphedObjectDefColor(char * ObjID,DWORD defColor) +//{ +// DEF_SKIN_OBJECT_PARAMS prm={0}; +// prm.defColor=defColor; +// prm.defStyle=ST_BRUSH; +// prm.szObjectID=ObjID; +// return CallService(MS_SKIN_REGISTERDEFOBJECT,(WPARAM)&prm,0); +//} +INT_PTR ske_Service_DrawGlyph(WPARAM wParam,LPARAM lParam); +int __inline SkinDrawGlyph(HDC hdc, RECT * rcSize, RECT * rcClip, char * objectID) +{ + SKINDRAWREQUEST rq; + if (!objectID) return 0; + rq.hDC=hdc; + rq.rcDestRect=*rcSize; + rq.rcClipRect=*rcClip; + strncpy(rq.szObjectID,objectID,SIZEOF(rq.szObjectID)); + return ske_Service_DrawGlyph((WPARAM)&rq,0); + //return CallService(MS_SKIN_DRAWGLYPH,(WPARAM)&rq,0); +} +//#include "../hdr/modern_skin_selector.h" + +////////////////////////////////////////////// +// // +// New Painting sequence servises // +// // +////////////////////////////////////////////// + +typedef struct sPAINT_REQUEST +{ + DWORD dStructSize; //size of structure + HWND hWnd; //called by window + HDC hDC; //context to draw on + RECT rcUpdate; //rectangle to be painted in (relative to Top-Left corner of Main window) + DWORD dwFlags; //drawing flags + void * CallbackData; //Data for passing to callback procedure + char Reserved[16]; //reserved for farther usage; +} sPaintRequest; + +// 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 +#define MS_SKINENG_REGISTERPAINTSUB "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) +#define MS_SKINENG_UPTATEFRAMEIMAGE "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 +#define MS_SKINENG_INVALIDATEFRAMEIMAGE "SkinEngine/ske_Service_InvalidateFrameImage" + +// Callback proc type +typedef int (/*__stdcall*/ *tPaintCallbackProc)(HWND hWnd, HDC hDC, RECT * rcPaint, HRGN rgnUpdate, DWORD dFlags, void * CallBackData); +//tPaintCallbackProc PaintCallbackProc; + +// HELPER TO UPDATEIMAGEFRAME + +int __inline SkinEngUpdateImageFrame(HWND hwnd, RECT * rcUpdate, DWORD dwFlags, void * CallBackData) +{ + sPaintRequest sr={0}; + sr.dStructSize=sizeof(sPaintRequest); + sr.hWnd=hwnd; + if (rcUpdate) + sr.rcUpdate=*rcUpdate; + sr.dwFlags=dwFlags; + sr.CallbackData=CallBackData; + return CallService(MS_SKINENG_UPTATEFRAMEIMAGE,(WPARAM)hwnd,(LPARAM)&sr); +} + +int __inline SkinEngInvalidateImageFrame(HWND hwnd, CONST RECT * rcUpdate, DWORD dwFlags, void * CallBackData) +{ + sPaintRequest sr={0}; + if (hwnd && (!g_CluiData.fLayered)) return InvalidateRect(hwnd,rcUpdate,dwFlags); + sr.dStructSize=sizeof(sPaintRequest); + sr.hWnd=hwnd; + if (rcUpdate) + sr.rcUpdate=*rcUpdate; + sr.dwFlags=dwFlags; + sr.CallbackData=CallBackData; + return CallService(MS_SKINENG_INVALIDATEFRAMEIMAGE,(WPARAM)hwnd,(LPARAM)&sr); +} + + +int __inline SkinInvalidateFrame(HWND hWnd, CONST RECT* lpRect) +{ + return SkinEngInvalidateImageFrame(hWnd,lpRect,0,0); +} +// Alpha channel GDI replacements/helpers + +// +// Paints text with correct alpha channel +// wParam - pointer to AlphaTextOutParams +#define MS_SKINENG_ALPHATEXTOUT "SkinEngine/ske_AlphaTextOut" +typedef struct _AlphaTextOutParams +{ + HDC hDC; + LPCTSTR lpString; + int nCount; + RECT * lpRect; + UINT format; + DWORD ARGBcolor; + char reserv[16]; +}AlphaTextOutParams; + +int __inline AlphaText(HDC hDC, LPCTSTR lpString, int nCount, RECT * lpRect, UINT format, DWORD ARGBcolor) +{ + AlphaTextOutParams ap={0}; + ap.hDC=hDC; + ap.lpString=lpString; + ap.nCount=nCount; + ap.lpRect=lpRect; + ap.format=format; + ap.ARGBcolor=ARGBcolor; + return CallService(MS_SKINENG_ALPHATEXTOUT,(WPARAM)&ap,0); +} + +//////////////////////////////////////////////////////////////////////////////// +// Paints text with correct alpha channel and effect, alternative to DrawText +// wParam - pointer to DrawTextWithEffectParam + +typedef struct MODERNFONTEFFECT_tag +{ + BYTE effectIndex; + DWORD baseColour; // ARGB + DWORD secondaryColour; // ARGB +} +MODERNFONTEFFECT; + +typedef struct DrawTextWithEffectParam_tag +{ + int cbSize; + HDC hdc; // handle to DC + LPCTSTR lpchText; // text to draw + int cchText; // length of text to draw + LPRECT lprc; // rectangle coordinates + UINT dwDTFormat; // formatting options + MODERNFONTEFFECT * pEffect; // effect to be drawn on +} DrawTextWithEffectParam; + +#define MS_DRAW_TEXT_WITH_EFFECTA "Modern/SkinEngine/DrawTextWithEffectA" +#define MS_DRAW_TEXT_WITH_EFFECTW "Modern/SkinEngine/DrawTextWithEffectW" + +#ifdef UNICODE + #define MS_DRAW_TEXT_WITH_EFFECT MS_DRAW_TEXT_WITH_EFFECTW +#else + #define MS_DRAW_TEXT_WITH_EFFECT MS_DRAW_TEXT_WITH_EFFECTA +#endif + +// Helper +int __inline DrawTextWithEffect( HDC hdc, LPCTSTR lpchText, int cchText, RECT * lprc, UINT dwDTFormat, MODERNFONTEFFECT * pEffect ) +{ + DrawTextWithEffectParam params; + static BYTE bIfServiceExists = ServiceExists( MS_DRAW_TEXT_WITH_EFFECT ) ? 1 : 0; + if ( bIfServiceExists == 0 ) return DrawText ( hdc, lpchText, cchText, lprc, dwDTFormat ); + + // else + params.cbSize = sizeof( DrawTextWithEffectParam ); + params.hdc = hdc; + params.lpchText = lpchText; + params.cchText = cchText; + params.lprc = lprc; + params.dwDTFormat = dwDTFormat; + params.pEffect = pEffect; + return CallService( MS_DRAW_TEXT_WITH_EFFECT, (WPARAM)¶ms, 0 ); +} + + +typedef struct _ImageListFixParam +{ + HIMAGELIST himl; + int index; + HICON hicon; +}ImageListFixParam; + +typedef struct _DrawIconFixParam +{ + HDC hdc; + int xLeft; + int yTop; + HICON hIcon; + int cxWidth; + int cyWidth; + UINT istepIfAniCur; + HBRUSH hbrFlickerFreeDraw; + UINT diFlags; +} DrawIconFixParam; +//wParam - pointer to DrawIconFixParam +#define MS_SKINENG_DRAWICONEXFIX "SkinEngine/DrawIconEx_Fix" + +int __inline mod_DrawIconEx_helper(HDC hdc,int xLeft,int yTop,HICON hIcon,int cxWidth,int cyWidth, UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags) +{ + DrawIconFixParam p={0}; + p.hdc=hdc; + p.xLeft=xLeft; + p.yTop=yTop; + p.hIcon=hIcon; + p.cxWidth=cxWidth; + p.cyWidth=cyWidth; + p.istepIfAniCur=istepIfAniCur; + p.hbrFlickerFreeDraw=hbrFlickerFreeDraw; + p.diFlags=diFlags; + return CallService(MS_SKINENG_DRAWICONEXFIX,(WPARAM)&p,0); +} +#endif diff --git a/plugins/Clist_modern/m_api/m_skinbutton.h b/plugins/Clist_modern/m_api/m_skinbutton.h new file mode 100644 index 0000000000..86634cb566 --- /dev/null +++ b/plugins/Clist_modern/m_api/m_skinbutton.h @@ -0,0 +1,30 @@ +#include "m_button.h" + +#define BUTTONSETID WM_USER+55 +#define BUTTONDRAWINPARENT WM_USER+56 +#define BUTTONSETMARGINS WM_USER+57 +#define BUTTONSETSENDONDOWN WM_USER+58 + +#define MBM_UPDATETRANSPARENTFLAG WM_USER+52 +#define MBM_SETICOLIBHANDLE WM_USER+53 +#define MBM_REFRESHICOLIBICON WM_USER+54 + +#define SBF_ALIGN_TL_RIGHT 1 +#define SBF_ALIGN_TL_HCENTER 2 +#define SBF_ALIGN_TL_BOTTOM 4 +#define SBF_ALIGN_TL_VCENTER 8 + +#define SBF_ALIGN_BR_RIGHT 16 +#define SBF_ALIGN_BR_HCENTER 32 +#define SBF_ALIGN_BR_BOTTOM 64 +#define SBF_ALIGN_BR_VCENTER 128 + +#define SBF_CALL_ON_PRESS 256 + +// Params for draw flag at Repos function +#define SBRF_DO_NOT_DRAW 0 +#define SBRF_DO_REDRAW_ALL 1 +#define SBRF_DO_ALT_DRAW 2 +#define SBRF_REDRAW ( SBRF_DO_REDRAW_ALL|SBRF_DO_ALT_DRAW ) + +#define BUTTONNEEDREDRAW 1256 \ No newline at end of file diff --git a/plugins/Clist_modern/m_api/m_skinned_profile.h b/plugins/Clist_modern/m_api/m_skinned_profile.h new file mode 100644 index 0000000000..0b0932bac6 --- /dev/null +++ b/plugins/Clist_modern/m_api/m_skinned_profile.h @@ -0,0 +1,44 @@ +#ifdef m_skinned_profile_h__ +#define m_skinned_profile_h__ + +#define MS_SKINPROFILE_GET_INTERFACE + +#ifdef _cplusplus +extern "C" { +#endif //_cplusplus + +struct SKIN_PROFILE_INTERFACE +{ + DWORD cbSize; + + int (*pfnGetByte) ( HANDLE, const char *, const char *, int, const char *szFile, const int nLine); + int (*pfnGetWord) ( HANDLE, const char *, const char *, int, const char *szFile, const int nLine); + int (*pfnGetDword)( HANDLE, const char *, const char *, int, const char *szFile, const int nLine); + +}; + +#ifdef SPI_DECLARE_INTERFACE_INIT +#include +__forceinline int mir_getSPI( struct SKIN_PROFILE_INTERFACE * pspi) +{ + if ( !ServiceExists( MS_SKINPROFILE_GET_INTERFACE ) ) + { + pspi->pfnGetByte = DBGetContactSettingByte_Helper; + pspi->pfnGetWord = DBGetContactSettingWord_Helper; + pspi->pfnGetDword = DBGetContactSettingDword_Helper; + return 0; + } + else + { + pspi->cbSize = sizeof( struct SKIN_PROFILE_INTERFACE ); + return CallService( MS_SKINPROFILE_GET_INTERFACE, 0, (LPARAM) pspi ); + } +} +#endif + +#ifdef _cplusplus +}; +#endif //_cplusplus + + +#endif // m_skinned_profile_h__ \ No newline at end of file diff --git a/plugins/Clist_modern/m_api/m_xpTheme.h b/plugins/Clist_modern/m_api/m_xpTheme.h new file mode 100644 index 0000000000..63f1b0a5d3 --- /dev/null +++ b/plugins/Clist_modern/m_api/m_xpTheme.h @@ -0,0 +1,35 @@ +/* Wrapper for XP theme */ +typedef void * XPTHANDLE; +typedef HANDLE HTHEME; + +XPTHANDLE xpt_AddThemeHandle(HWND hwnd, LPCWSTR className); +void xpt_FreeThemeHandle(XPTHANDLE xptHandle); +void xpt_FreeThemeForWindow(HWND hwnd); +BOOL xpt_IsValidHandle(XPTHANDLE xptHandle); +HRESULT xpt_DrawThemeBackground(XPTHANDLE xptHandle, HDC hdc, int type, int state, const RECT * sizeRect, const RECT * clipRect); +HRESULT xpt_DrawThemeParentBackground(HWND hWnd, HDC hdc, const RECT * sizeRect); +HRESULT xpt_DrawThemeText(XPTHANDLE xptHandle, HDC hdc, int type, int state, LPCTSTR lpStr, int len, DWORD flag1, DWORD flag2, const RECT * textRect); +BOOL xpt_IsThemeBackgroundPartiallyTransparent(XPTHANDLE xptHandle, int type, int state); +HRESULT xpt_DrawTheme(XPTHANDLE xptHandle, HWND hwnd, HDC hdc, int type, int state, const RECT *sizeRect, const RECT * clipRect); +BOOL xpt_IsThemed(XPTHANDLE xptHandle); +BOOL xpt_EnableThemeDialogTexture(HWND hwnd, DWORD flags); + +// next will be called only from one place +HRESULT XPThemesLoadModule(); +void XPThemesUnloadModule(); +void xpt_OnWM_THEMECHANGED(); + + +//definitions + + +//#include +//TODO: ADD HERE other definitions of part and states from +//WINDOW +#define WP_CAPTION 1 +#define WP_SMALLCAPTION 2 +#define WP_SMALLMINCAPTION 4 +#define WP_SMALLMAXCAPTION 6 + +#define CS_ACTIVE 1 +#define CS_INACTIVE 2 \ No newline at end of file -- cgit v1.2.3