home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
- #include "stdafx.h"
- #include "animbar.h"
-
- #define ANIMATION_WIDTH 20
- #define ANIMATION_HEIGHT 20
- #undef ANIMATION_PERIOD
- #define ANIMATION_PERIOD (4000)
-
- CAnimation::CAnimation(CWnd *pParent ): CWnd()
- {
- m_uAnimationClock = 0;
- m_bInited = FALSE;
- m_bCaptured = FALSE;
- m_bDepressed = FALSE;
- m_hAnimBitmap = NULL;
- m_iAnimationCount = 0;
-
- m_iconSize.cx = ANIMATION_WIDTH;
- m_iconSize.cy = ANIMATION_HEIGHT;
-
- CreateEx(0, NULL, _T("NSAnimation"),
- WS_CHILD|WS_VISIBLE,
- 0, 0,
- m_iconSize.cx + 4,
- m_iconSize.cy + 4,
- pParent->GetSafeHwnd(), (HMENU) 101);
-
- //Changed AfxGetInstanceHandle to AfxGetResourceHandle to insure loading bitmaps
- //from the LANG DLL and not netscape.exe benito
- if (!m_bInited) {
- CDC *pDC = GetDC();
-
- m_hAnimBitmap = wfe_LoadBitmap(AfxGetResourceHandle(), pDC->m_hDC, MAKEINTRESOURCE(IDB_ANIMSMALL_0));
- BITMAP bm;
- GetObject( m_hAnimBitmap, sizeof(BITMAP), &bm );
- m_iFrameCount = bm.bmWidth / m_iconSize.cx;
-
- ReleaseDC( pDC );
-
- m_bInited = TRUE;
- }
- }
-
- BEGIN_MESSAGE_MAP(CAnimation, CWnd)
- ON_WM_PAINT()
- ON_WM_TIMER()
- ON_WM_LBUTTONDOWN()
- ON_WM_LBUTTONUP()
- ON_WM_MOUSEMOVE()
- ON_WM_DESTROY()
- END_MESSAGE_MAP()
-
- void CAnimation::OnPaint()
- {
- CPaintDC dc(this);
- RECT rect;
- GetClientRect(&rect);
- WFE_Draw3DButtonRect( dc.m_hDC, &rect, m_bDepressed );
- AnimateIcon();
- }
-
-
- void CAnimation::OnTimer(UINT nID)
- {
- CWnd::OnTimer(nID);
- if (nID == WIN_ANIMATE_ICON_TIMER) {
- if(m_bInited)
- {
- m_iAnimationCount = ( m_iAnimationCount % m_iFrameCount ) + 1;
- AnimateIcon();
- }
- }
- }
-
- void CAnimation::OnLButtonDown( UINT nFlags, CPoint point )
- {
- RECT rect;
- GetClientRect(&rect);
- m_bDepressed = ::PtInRect(&rect, point);
- if (m_bDepressed) {
- SetCapture();
- m_bCaptured = TRUE;
- Invalidate();
- UpdateWindow();
- }
- }
-
- void CAnimation::OnMouseMove( UINT nFlags, CPoint point )
- {
- if (m_bCaptured) {
- RECT rect;
- GetClientRect(&rect);
- BOOL bDepressed = ::PtInRect(&rect, point);
- if (bDepressed != m_bDepressed) {
- m_bDepressed = bDepressed;
- Invalidate();
- UpdateWindow();
- }
- }
- }
-
- void CAnimation::OnLButtonUp( UINT nFlags, CPoint point )
- {
-
- if (m_bCaptured) {
- ReleaseCapture();
- m_bCaptured = FALSE;
-
- RECT rect;
- GetClientRect(&rect);
- BOOL bDepressed = ::PtInRect(&rect, point);
- GetParentFrame()->SendMessage( WM_COMMAND, (WPARAM) ID_ANIMATION_BONK, (LPARAM) 0 );
- }
-
- m_bDepressed = FALSE;
- Invalidate();
- UpdateWindow();
- }
-
- void CAnimation::OnDestroy()
- {
- if (m_hAnimBitmap)
- VERIFY(DeleteObject( m_hAnimBitmap ));
- // Right now, the context has already been deleted, since
- // it's not a true COM object.
- // m_pIMWContext->Release();
- }
-
- void CAnimation::StopAnimation()
- {
- m_iAnimationCount = 0;
- if (m_uAnimationClock)
- KillTimer(m_uAnimationClock);
- m_uAnimationClock = 0;
- AnimateIcon();
- }
-
- void CAnimation::StartAnimation()
- {
- m_iAnimationCount = 1;
- m_uAnimationClock = SetTimer(WIN_ANIMATE_ICON_TIMER, ANIMATION_PERIOD/m_iFrameCount, NULL);
- }
-
- void CAnimation::AnimateIcon()
- {
- CClientDC dc(this);
- CRect rect;
- GetClientRect(&rect);
-
- // check if our application level CDC exists
- if(!theApp.pIconDC) {
- theApp.pIconDC = new CDC;
- theApp.pIconDC->CreateCompatibleDC(&dc);
- }
-
- HBITMAP hOldBitmap = (HBITMAP) theApp.pIconDC->SelectObject( m_hAnimBitmap );
-
- dc.BitBlt( 2, 2,
- m_iconSize.cx, m_iconSize.cy,
- theApp.pIconDC,
- m_iconSize.cx * m_iAnimationCount, // X offset into the strip
- 0,
- SRCCOPY);
-
- // Reselect the old object
- theApp.pIconDC->SelectObject( hOldBitmap );
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // CAnimationBar toolbar derived class
-
- CAnimationBar::CAnimationBar( ): CAnimationBarParent ()
- {
- m_iconPt.x = 0;
- m_iconPt.y = 0;
-
- m_wndAnimation = NULL;
- }
-
- CAnimationBar::~CAnimationBar()
- {
- if ( m_wndAnimation ) {
- m_wndAnimation->DestroyWindow();
- }
- }
-
- void CAnimationBar::StartAnimation()
- {
- if (m_wndAnimation)
- m_wndAnimation->StartAnimation();
- }
-
- void CAnimationBar::StopAnimation()
- {
- if (m_wndAnimation)
- m_wndAnimation->StopAnimation();
- }
-
- #ifdef XP_WIN32
- CSize CAnimationBar::CalcFixedLayout(BOOL bStretch, BOOL bHorz)
- {
- CSize size = CAnimationBarParent::CalcFixedLayout(bStretch, bHorz);
- if (m_wndAnimation) {
- CRect rectAnimation;
- m_wndAnimation->GetWindowRect(&rectAnimation);
-
- int cy = rectAnimation.Height() + m_cyTopBorder + m_cyBottomBorder + 4;
- if (size.cy < cy )
- size.cy = cy;
- }
- return size;
- }
-
- CSize CAnimationBar::CalcDynamicLayout(int nLength, DWORD dwMode )
- {
- int nToolbarHeight = 0;
- int nAnimationHeight = 0;
-
- CRect animationRect;
-
- if(m_wndAnimation)
- {
- m_wndAnimation->GetWindowRect(animationRect);
- nAnimationHeight = animationRect.Height() + 4;
- }
-
- if(m_pToolbar)
- {
- nToolbarHeight = m_pToolbar->GetHeight() + 4;
- }
-
- return CSize(32767,
- (nToolbarHeight > nAnimationHeight) ? nToolbarHeight : nAnimationHeight);
-
- }
- #endif
-
- void CAnimationBar::PlaceToolbar(void)
- {
- CRect rectAnimation;
-
- if ( m_wndAnimation ) {
- m_wndAnimation->GetWindowRect(&rectAnimation);
- CRect rectBar;
- GetClientRect(&rectBar);
-
- m_iconPt.x = rectBar.Width() - rectAnimation.Width() - GetSystemMetrics(SM_CXBORDER) - 1;
- m_iconPt.y = rectBar.Height() / 2 - rectAnimation.Height() / 2 + 2;
-
- if(m_pToolbar)
- {
- int nHeight = m_pToolbar->GetHeight();
- // m_pToolbar->MoveWindow(0, (rectBar.Height() - nHeight) / 2 + 1, cx - rectAnimation.Width(), nHeight, FALSE);
- m_pToolbar->SetWindowPos(NULL, 0, (rectBar.Height() - nHeight) / 2 + 1, m_iconPt.x, nHeight,
- /*SWP_NOMOVE|*/ SWP_NOREDRAW);
- }
-
- }
-
- }
-
- BEGIN_MESSAGE_MAP(CAnimationBar, CAnimationBarParent)
- ON_WM_CREATE()
- ON_WM_SIZE()
- END_MESSAGE_MAP()
-
- int CAnimationBar::OnCreate( LPCREATESTRUCT lpCreateStruct )
- {
- int res = CAnimationBarParent::OnCreate( lpCreateStruct );
-
- if ( res != -1 ) {
- m_wndAnimation = new CAnimation( this );
- res = m_wndAnimation ? 0 : -1;
- }
- return res;
- }
-
- void CAnimationBar::OnSize( UINT nType, int cx, int cy )
- {
- CRect rectAnimation;
-
- if ( nType != SIZE_MINIMIZED && m_wndAnimation ) {
- m_wndAnimation->GetWindowRect(&rectAnimation);
- CRect rectBar;
- GetClientRect(&rectBar);
- CClientDC dc( this );
-
- m_iconPt.x = rectBar.Width() - rectAnimation.Width() - GetSystemMetrics(SM_CXBORDER) - 1;
- m_iconPt.y = rectBar.Height() / 2 - rectAnimation.Height() / 2 + 2;
- m_wndAnimation->SetWindowPos(NULL, m_iconPt.x, m_iconPt.y, 0, 0,
- SWP_NOZORDER|SWP_NOSIZE);
-
- if(m_pToolbar)
- {
- int nHeight = m_pToolbar->GetHeight();
- // m_pToolbar->MoveWindow(0, (rectBar.Height() - nHeight) / 2 + 1, cx - rectAnimation.Width(), nHeight, FALSE);
- m_pToolbar->SetWindowPos(NULL, 0, (rectBar.Height() - nHeight) / 2 + 1, m_iconPt.x, nHeight,
- /*SWP_NOMOVE|*/ SWP_NOREDRAW);
- }
-
- }
-
-
- }
-