зеркало из https://github.com/mozilla/gecko-dev.git
Changes to the outliner base class to cut down resource usage. (Bitmaps don't
have to be loaded by a derived class that knows how to draw its triggers.)
This commit is contained in:
Родитель
116bba0cd8
Коммит
b5bb089e8c
|
@ -142,7 +142,7 @@ STDMETHODIMP CNSOutlinerFactory::CreateInstance(
|
||||||
|
|
||||||
DECLARE_FACTORY(CNSOutlinerFactory);
|
DECLARE_FACTORY(CNSOutlinerFactory);
|
||||||
|
|
||||||
COutliner::COutliner ( )
|
COutliner::COutliner ( BOOL bUseTriggerAndLineBitmaps )
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
m_iWheelDelta = 0;
|
m_iWheelDelta = 0;
|
||||||
|
@ -179,13 +179,18 @@ COutliner::COutliner ( )
|
||||||
m_hItalFont = NULL;
|
m_hItalFont = NULL;
|
||||||
|
|
||||||
m_pUnkImage = NULL;
|
m_pUnkImage = NULL;
|
||||||
ApiApiPtr(api);
|
m_pIImage = NULL;
|
||||||
m_pUnkImage = api->CreateClassInstance(
|
|
||||||
APICLASS_IMAGEMAP,NULL,(APISIGNATURE)GetOutlinerBitmap());
|
if (bUseTriggerAndLineBitmaps)
|
||||||
m_pUnkImage->QueryInterface(IID_IImageMap,(LPVOID*)&m_pIImage);
|
{
|
||||||
ASSERT(m_pIImage);
|
ApiApiPtr(api);
|
||||||
if (!m_pIImage->GetResourceID())
|
m_pUnkImage = api->CreateClassInstance(
|
||||||
m_pIImage->Initialize(GetOutlinerBitmap(),16,16);
|
APICLASS_IMAGEMAP,NULL,(APISIGNATURE)GetOutlinerBitmap());
|
||||||
|
m_pUnkImage->QueryInterface(IID_IImageMap,(LPVOID*)&m_pIImage);
|
||||||
|
ASSERT(m_pIImage);
|
||||||
|
if (!m_pIImage->GetResourceID())
|
||||||
|
m_pIImage->Initialize(GetOutlinerBitmap(),16,16);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
COutliner::~COutliner ( )
|
COutliner::~COutliner ( )
|
||||||
|
@ -312,6 +317,13 @@ BOOL COutliner::OnEraseBkgnd( CDC * )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int COutliner::GetIndentationWidth()
|
||||||
|
{
|
||||||
|
if (m_pIImage)
|
||||||
|
return m_pIImage->GetImageWidth();
|
||||||
|
return m_itemHeight;
|
||||||
|
}
|
||||||
|
|
||||||
int COutliner::GetColumnSize ( UINT idCol )
|
int COutliner::GetColumnSize ( UINT idCol )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -936,7 +948,7 @@ void COutliner::OnLButtonDown ( UINT nFlags, CPoint point )
|
||||||
GetTreeInfo ( iRow, NULL, &iDepth, NULL );
|
GetTreeInfo ( iRow, NULL, &iDepth, NULL );
|
||||||
ReleaseLineData ( pLineData );
|
ReleaseLineData ( pLineData );
|
||||||
|
|
||||||
int iImageWidth = m_pIImage->GetImageWidth ( );
|
int iImageWidth = GetIndentationWidth();
|
||||||
RECT rcToggle = m_rcHit;
|
RECT rcToggle = m_rcHit;
|
||||||
rcToggle.left += iDepth * iImageWidth;
|
rcToggle.left += iDepth * iImageWidth;
|
||||||
rcToggle.right = rcToggle.left + iImageWidth;
|
rcToggle.right = rcToggle.left + iImageWidth;
|
||||||
|
@ -970,7 +982,7 @@ void COutliner::OnLButtonDblClk ( UINT nFlags, CPoint point )
|
||||||
GetTreeInfo ( iRow, NULL, &iDepth, NULL );
|
GetTreeInfo ( iRow, NULL, &iDepth, NULL );
|
||||||
ReleaseLineData ( pLineData );
|
ReleaseLineData ( pLineData );
|
||||||
|
|
||||||
int iImageWidth = m_pIImage->GetImageWidth ( );
|
int iImageWidth = GetIndentationWidth();
|
||||||
RECT rcToggle = m_rcHit;
|
RECT rcToggle = m_rcHit;
|
||||||
rcToggle.left += iDepth * iImageWidth;
|
rcToggle.left += iDepth * iImageWidth;
|
||||||
rcToggle.right = rcToggle.left + iImageWidth;
|
rcToggle.right = rcToggle.left + iImageWidth;
|
||||||
|
@ -1260,7 +1272,7 @@ void COutliner::OnTimer( UINT timer)
|
||||||
int x = 0;
|
int x = 0;
|
||||||
if ( m_pColumn[ m_iTipCol ]->iCommand == m_idImageCol ) {
|
if ( m_pColumn[ m_iTipCol ]->iCommand == m_idImageCol ) {
|
||||||
int iDepth = 0;
|
int iDepth = 0;
|
||||||
int iImageWidth = m_pIImage->GetImageWidth ( );
|
int iImageWidth = GetIndentationWidth();
|
||||||
if ( m_bHasPipes ) {
|
if ( m_bHasPipes ) {
|
||||||
GetTreeInfo ( m_iTipRow, NULL, &iDepth, NULL );
|
GetTreeInfo ( m_iTipRow, NULL, &iDepth, NULL );
|
||||||
x += (iDepth + 1) * iImageWidth;
|
x += (iDepth + 1) * iImageWidth;
|
||||||
|
@ -1278,9 +1290,15 @@ void COutliner::OnTimer( UINT timer)
|
||||||
}
|
}
|
||||||
dwStyle |= m_pColumn[ m_iTipCol ]->alignment == AlignRight ? NSTTS_RIGHT : 0;
|
dwStyle |= m_pColumn[ m_iTipCol ]->alignment == AlignRight ? NSTTS_RIGHT : 0;
|
||||||
|
|
||||||
|
int left = m_rcHit.left + x;
|
||||||
|
int top = m_rcHit.top;
|
||||||
|
int horExtent = m_pColumn[m_iTipCol]->iCol - x;
|
||||||
|
int vertExtent = m_itemHeight;
|
||||||
|
|
||||||
|
AdjustTipSize(left, top, horExtent, vertExtent);
|
||||||
|
|
||||||
m_pTip->Show( this->GetSafeHwnd(),
|
m_pTip->Show( this->GetSafeHwnd(),
|
||||||
m_rcHit.left + x, m_rcHit.top,
|
left, top, horExtent, vertExtent,
|
||||||
m_pColumn[ m_iTipCol ]->iCol - x, m_itemHeight,
|
|
||||||
lpszTipText,dwStyle, hTipFont);
|
lpszTipText,dwStyle, hTipFont);
|
||||||
m_iTipState = TIP_SHOWING;
|
m_iTipState = TIP_SHOWING;
|
||||||
if ( !(m_iTipTimer = SetTimer( ID_OUTLINER_HEARTBEAT, 100, NULL )) )
|
if ( !(m_iTipTimer = SetTimer( ID_OUTLINER_HEARTBEAT, 100, NULL )) )
|
||||||
|
@ -1854,7 +1872,7 @@ void COutliner::EraseLine ( int iLineNo, HDC hdc, LPRECT lpWinRect )
|
||||||
|
|
||||||
int COutliner::DrawPipes ( int iLineNo, int iColNo, int offset, HDC hdc, void * pLineData )
|
int COutliner::DrawPipes ( int iLineNo, int iColNo, int offset, HDC hdc, void * pLineData )
|
||||||
{
|
{
|
||||||
int iImageWidth = m_pIImage->GetImageWidth ( );
|
int iImageWidth = GetIndentationWidth();
|
||||||
int iMaxX = offset + m_pColumn[ iColNo ]->iCol;
|
int iMaxX = offset + m_pColumn[ iColNo ]->iCol;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
|
@ -1967,7 +1985,7 @@ void COutliner::PaintColumn ( int iLineNo, int iColumn, LPRECT lpColumnRect,
|
||||||
void COutliner::PaintLine ( int iLineNo, HDC hdc, LPRECT lpPaintRect )
|
void COutliner::PaintLine ( int iLineNo, HDC hdc, LPRECT lpPaintRect )
|
||||||
{
|
{
|
||||||
void * pLineData;
|
void * pLineData;
|
||||||
int iImageWidth = m_pIImage->GetImageWidth ( );
|
int iImageWidth = GetIndentationWidth();
|
||||||
CRect WinRect;
|
CRect WinRect;
|
||||||
GetClientRect(&WinRect);
|
GetClientRect(&WinRect);
|
||||||
|
|
||||||
|
@ -2172,6 +2190,7 @@ void COutliner::SetCSID(int csid)
|
||||||
m_itemHeight = m_cyChar;
|
m_itemHeight = m_cyChar;
|
||||||
if ( m_pIImage )
|
if ( m_pIImage )
|
||||||
InitializeItemHeight(max(m_pIImage->GetImageHeight(),m_itemHeight));
|
InitializeItemHeight(max(m_pIImage->GetImageHeight(),m_itemHeight));
|
||||||
|
else InitializeItemHeight(m_itemHeight);
|
||||||
|
|
||||||
Invalidate();
|
Invalidate();
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,12 @@ private:
|
||||||
int m_iWheelDelta;
|
int m_iWheelDelta;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
public:
|
||||||
|
OutlinerColumn_t ** m_pColumn;
|
||||||
|
|
||||||
|
int m_iNumColumns;
|
||||||
|
int m_iVisColumns;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LPUNKNOWN m_pUnkImage;
|
LPUNKNOWN m_pUnkImage;
|
||||||
LPIMAGEMAP m_pIImage;
|
LPIMAGEMAP m_pIImage;
|
||||||
|
@ -138,10 +144,6 @@ protected:
|
||||||
BOOL m_bClearOnRelease;
|
BOOL m_bClearOnRelease;
|
||||||
BOOL m_bSelectOnRelease;
|
BOOL m_bSelectOnRelease;
|
||||||
|
|
||||||
OutlinerColumn_t ** m_pColumn;
|
|
||||||
|
|
||||||
int m_iNumColumns;
|
|
||||||
int m_iVisColumns;
|
|
||||||
int m_iTotalWidth;
|
int m_iTotalWidth;
|
||||||
|
|
||||||
BOOL m_bDraggingData;
|
BOOL m_bDraggingData;
|
||||||
|
@ -174,6 +176,8 @@ protected:
|
||||||
CropType_t cropping, AlignType_t alignment );
|
CropType_t cropping, AlignType_t alignment );
|
||||||
|
|
||||||
// Basic Overrideables
|
// Basic Overrideables
|
||||||
|
virtual void AdjustTipSize(int& left, int& top, int& hor, int& vert) {};
|
||||||
|
virtual int GetIndentationWidth();
|
||||||
|
|
||||||
virtual COutlinerDropTarget* CreateDropTarget();
|
virtual COutlinerDropTarget* CreateDropTarget();
|
||||||
|
|
||||||
|
@ -256,7 +260,7 @@ protected:
|
||||||
virtual void OnSelDblClk();
|
virtual void OnSelDblClk();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
COutliner ( );
|
COutliner (BOOL bUseTriggerAndLineBitmaps = TRUE);
|
||||||
~COutliner ( );
|
~COutliner ( );
|
||||||
|
|
||||||
STDMETHODIMP QueryInterface(REFIID,LPVOID *);
|
STDMETHODIMP QueryInterface(REFIID,LPVOID *);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче