open_toontown_panda3d/pandaapp/src/stitchbase/fadeImagePool.cxx

101 lines
3.5 KiB
C++

// Filename: fadeImagePool.cxx
// Created by: drose (30Jul01)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
//
// All use of this software is subject to the terms of the Panda 3d
// Software license. You should have received a copy of this license
// along with this source code; you will also find a current copy of
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
//
// To contact the maintainers of this program write to
// panda3d-general@lists.sourceforge.net .
//
////////////////////////////////////////////////////////////////////
#include "fadeImagePool.h"
#include "pnmImage.h"
FadeImagePool *FadeImagePool::_global_ptr = (FadeImagePool *)NULL;
////////////////////////////////////////////////////////////////////
// Function: FadeImagePool::Constructor
// Access: Private
// Description: The constructor is never called explicitly; there is
// only one FadeImagePool and it constructs itself.
////////////////////////////////////////////////////////////////////
FadeImagePool::
FadeImagePool() {
}
////////////////////////////////////////////////////////////////////
// Function: FadeImagePool::ns_get_image
// Access: Private
// Description: The nonstatic implementation of get_image(). This
// loads up the image if it is not already, scales it to
// the indicated size if it is not already, and returns
// it.
////////////////////////////////////////////////////////////////////
const PNMImage *FadeImagePool::
ns_get_image(const Filename &filename, int x_size, int y_size) {
Images::iterator ii = _images.find(filename);
if (ii == _images.end()) {
// The image has not yet been loaded. Load it.
cerr << "Reading fade image " << filename << "\n";
PNMImage *image = new PNMImage(filename);
if (!image->is_valid()) {
cerr << "Unable to read fade image.\n";
delete image;
return (const PNMImage *)NULL;
}
// Make sure it's a grayscale image. This will save a bit of time
// later.
image->set_color_type(PNMImage::CT_grayscale);
ii = _images.insert(Images::value_type(filename, ImageSizes())).first;
(*ii).second.push_back(image);
}
// Now see if we have a fade image of the requested size.
ImageSizes &sizes = (*ii).second;
ImageSizes::iterator si;
for (si = sizes.begin(); si != sizes.end(); ++si) {
PNMImage *image = (*si);
if (image->get_x_size() == x_size && image->get_y_size() == y_size) {
// Here's one that suits!
return image;
}
}
// None of our images were of a suitable size, so make one.
nassertr(!sizes.empty(), NULL);
PNMImage *orig_image = sizes.front();
cerr << "Resizing fade image to " << x_size << " by " << y_size << "\n";
PNMImage *resized_image =
new PNMImage(x_size, y_size, PNMImage::CT_grayscale,
orig_image->get_maxval());
resized_image->quick_filter_from(*orig_image);
sizes.push_back(resized_image);
return resized_image;
}
////////////////////////////////////////////////////////////////////
// Function: FadeImagePool::get_ptr
// Access: Private, Static
// Description: Returns the global FadeImagePool pointer.
////////////////////////////////////////////////////////////////////
FadeImagePool *FadeImagePool::
get_ptr() {
if (_global_ptr == (FadeImagePool *)NULL) {
_global_ptr = new FadeImagePool;
}
return _global_ptr;
}