1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* ***** BEGIN LICENSE BLOCK *****
3
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
5
* The contents of this file are subject to the Mozilla Public License Version
6
* 1.1 (the "License"); you may not use this file except in compliance with
7
* the License. You may obtain a copy of the License at
8
* http://www.mozilla.org/MPL/
10
* Software distributed under the License is distributed on an "AS IS" basis,
11
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12
* for the specific language governing rights and limitations under the
15
* The Original Code is mozilla.org code.
17
* The Initial Developer of the Original Code is
18
* Netscape Communications Corporation.
19
* Portions created by the Initial Developer are Copyright (C) 2003
20
* the Initial Developer. All Rights Reserved.
23
* Dave Hyatt <hyatt@mozilla.org> (Original Author)
24
* Jan Varga <varga@ku.sk>
26
* Alternatively, the contents of this file may be used under the terms of
27
* either the GNU General Public License Version 2 or later (the "GPL"), or
28
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
29
* in which case the provisions of the GPL or the LGPL are applicable instead
30
* of those above. If you wish to allow use of your version of this file only
31
* under the terms of either the GPL or the LGPL, and not to allow others to
32
* use your version of this file under the terms of the MPL, indicate your
33
* decision by deleting the provisions above and replace them with the notice
34
* and other provisions required by the GPL or the LGPL. If you do not delete
35
* the provisions above, a recipient may use your version of this file under
36
* the terms of any one of the MPL, the GPL or the LGPL.
38
* ***** END LICENSE BLOCK ***** */
40
#include "nsTreeImageListener.h"
41
#include "nsITreeBoxObject.h"
42
#include "imgIContainer.h"
44
NS_IMPL_ISUPPORTS3(nsTreeImageListener, imgIDecoderObserver, imgIContainerObserver, nsITreeImageListener)
46
nsTreeImageListener::nsTreeImageListener(nsITreeBoxObject* aTree)
48
mInvalidationSuppressed(PR_TRUE),
49
mInvalidationArea(nsnull)
53
nsTreeImageListener::~nsTreeImageListener()
55
delete mInvalidationArea;
58
NS_IMETHODIMP nsTreeImageListener::OnStartContainer(imgIRequest *aRequest,
59
imgIContainer *aImage)
61
// Ensure the animation (if any) is started
62
aImage->StartAnimation();
66
NS_IMETHODIMP nsTreeImageListener::OnDataAvailable(imgIRequest *aRequest,
67
gfxIImageFrame *aFrame,
74
NS_IMETHODIMP nsTreeImageListener::FrameChanged(imgIContainer *aContainer,
75
gfxIImageFrame *newframe,
84
nsTreeImageListener::AddCell(PRInt32 aIndex, nsITreeColumn* aCol)
86
if (!mInvalidationArea) {
87
mInvalidationArea = new InvalidationArea(aCol);
88
mInvalidationArea->AddRow(aIndex);
91
InvalidationArea* currArea;
92
for (currArea = mInvalidationArea; currArea; currArea = currArea->GetNext()) {
93
if (currArea->GetCol() == aCol) {
94
currArea->AddRow(aIndex);
99
currArea = new InvalidationArea(aCol);
100
currArea->SetNext(mInvalidationArea);
101
mInvalidationArea = currArea;
102
mInvalidationArea->AddRow(aIndex);
111
nsTreeImageListener::Invalidate()
113
if (!mInvalidationSuppressed) {
114
for (InvalidationArea* currArea = mInvalidationArea; currArea; currArea = currArea->GetNext()) {
115
// Loop from min to max, invalidating each cell that was listening for this image.
116
for (PRInt32 i = currArea->GetMin(); i <= currArea->GetMax(); ++i) {
117
mTree->InvalidateCell(i, currArea->GetCol());
123
nsTreeImageListener::InvalidationArea::InvalidationArea(nsITreeColumn* aCol)
125
mMin(-1), // min should start out "undefined"
132
nsTreeImageListener::InvalidationArea::AddRow(PRInt32 aIndex)
135
mMin = mMax = aIndex;
136
else if (aIndex < mMin)
138
else if (aIndex > mMax)