52 #ifndef _MGNCS_PANELPIECE_H
53 #define _MGNCS_PANELPIECE_H
59 #include <mgplus/mgplus.h>
60 #include <mgeff/mgeff.h>
63 #define HOTPIECE_RELEASE(self) \
65 --(self->objRefCount); \
66 if (self->objRefCount <= 0) { \
67 DELPIECE((mHotPiece*)self); \
71 extern int s_totalObjRef;
72 extern int s_totalPieceRef;
76 #define DBG_REFLOG(s, s1, s2, s3) fprintf(stderr, s, s1, __FUNCTION__, __LINE__, s2, s3);
78 #define DBG_REFLOG(s, s1, s2, s3)
80 #define ADDREF(self) do { DBG_REFLOG("ADDREF %p, %s:%d objRefCount = %d, s_totalObjRef = %d.\n", self, self->objRefCount, ++s_totalObjRef); \
81 _c(self)->addRef(self);\
83 #define UNREF(self) do { if (NULL != self) {\
84 DBG_REFLOG("UNREF %p, %s:%d objRefCount = %d, s_totalObjRef = %d\n", self, self->objRefCount, --s_totalObjRef); \
85 self->objStatus |= NCSF_OBJECT_TODEL; \
86 _c(self)->release(self);\
90 #define ADDREFPIECE(self) do { DBG_REFLOG("ADDREFPIECE %p, %s:%d objRefCount = %d, s_totalPieceRef = %d.\n", self, self->objRefCount, ++s_totalPieceRef); \
91 _c(self)->addRef(self);\
93 #define UNREFPIECE(self) do { if (NULL != self) { \
94 DBG_REFLOG("UNREFPIECE %p, %s:%d objRefCount = %d, s_totalPieceRef = %d\n", self, self->objRefCount, --s_totalPieceRef); \
95 self->objStatus |= NCSF_OBJECT_TODEL; \
96 HOTPIECE_RELEASE(self);\
100 #define MSG_PANELPIECE_LOCKED (MSG_USER + 0x3042)
102 typedef struct _POINTF
110 NCSP_PANEL_CLIPRECT = USER_PIECE_PROP_BEGIN + 200,
114 typedef struct _mPanelPiece mPanelPiece;
115 typedef struct _mPanelPieceClass mPanelPieceClass;
117 #define mPanelPieceHeader(clss) \
118 mStaticPieceHeader(clss) \
120 BOOL shouldResetPaintMode; \
121 mAbstractItemManager *itemManager; \
122 list_t eventHandlers; \
123 mShapeTransRoundPiece* bkgndPiece; \
124 mHotPiece* hovering_piece; \
125 mLayoutManager *layout; \
128 MGEFF_ANIMATION update_anim; \
129 MGEFF_ANIMATION animgrp; \
136 mPanelPieceHeader(mPanelPiece)
139 typedef int (*NCS_PIECE_EVENT_HANDLER)(mHotPiece *,
int message, WPARAM, LPARAM, mObject *owner);
141 #define mPanelPieceClassHeader(clss, superCls) \
142 mStaticPieceClassHeader(clss, superCls) \
143 mPieceItem* (*addContent)(clss*, mHotPiece*, int, int); \
144 mPieceItem* (*addContentToLayout)(clss*, mHotPiece*); \
145 void (*enableChildCache)(clss*, mHotPiece*, BOOL); \
146 BOOL (*updateChildCache)(clss*, mHotPiece*); \
147 void (*addContentFinished)(clss*); \
148 BOOL (*delContent)(clss*, mHotPiece*); \
149 void (*clearContents)(clss*); \
150 void (*reLayout)(clss*); \
151 void (*setLayoutManager)(clss*, mLayoutManager *layout);\
152 void (*appendEventHandler)(clss *, int message, NCS_PIECE_EVENT_HANDLER); \
153 void (*delEventHandler)(clss *, int); \
154 void (*clearEventHandler)(clss *); \
155 mPieceItem* (*searchItem)(clss*, mHotPiece*); \
156 void (*setClipRect)(clss *, mPieceItem*); \
157 mHotPiece *(*childAt)(clss *, int, int); \
158 mAbstractItemManager* (*createItemManager)(clss*); \
159 mPieceItem* (*createItemNode)(clss*, mHotPiece*, int, int); \
160 void (*initItemNode)(clss*, mPieceItem*, mHotPiece*); \
161 void (*movePiece)(clss*, mHotPiece*, int, int); \
162 void (*scalePiece)(clss*, mHotPiece*, float, float); \
163 void (*rotatePiece)(clss*, mHotPiece*, float, int, int, int); \
164 void (*setPieceAlpha)(clss*, mHotPiece*, int); \
165 MGEFF_ANIMATION (*movePieceWithAnimation)(clss*, mHotPiece*, int, int, int, enum EffMotionType); \
166 MGEFF_ANIMATION (*scalePieceWithAnimation)(clss*, mHotPiece*, float, float, int, enum EffMotionType); \
167 MGEFF_ANIMATION (*rotatePieceWithAnimation)(clss*, mHotPiece*, float, int, int, int, int, enum EffMotionType); \
168 MGEFF_ANIMATION (*setPieceAlphaWithAnimation)(clss*, mHotPiece*, int, int, enum EffMotionType); \
169 void (*setOwner)(clss*, mWidget*); \
170 mWidget *(*getOwner)(clss*); \
171 void (*animationSyncRunAndDelete)(clss *self, MGEFF_ANIMATION); \
172 void (*animationAsyncRun)(clss *self, MGEFF_ANIMATION, int keepalive); \
173 mShapeTransRoundPiece* (*getBkgndPiece)(clss *); \
174 void (*invalidatePiece)(clss *, mHotPiece *piece, const RECT *rc, BOOL reserveCache); \
175 void (*setBkgndPiece)(clss *, mShapeTransRoundPiece*);
177 struct _mPanelPieceClass
179 mPanelPieceClassHeader(mPanelPiece, mStaticPiece)
182 MGNCS_EXPORT
extern mPanelPieceClass g_stmPanelPieceCls;
186 extern void PanelPiece_invalidatePiece(mHotPiece *piece,
const RECT *rc);
187 extern void PanelPiece_update(mHotPiece *piece, BOOL fErase);
188 extern mPanelPiece *PanelPiece_getTopPanel(mHotPiece *
self);
190 #define PanelPiece_isTopPanel(self) \
191 ( ( (self)->parent == NULL ) && ( (self)->owner != NULL ) )