mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 20:17:37 +00:00
df8b1437b6
Backed out changeset 65ad9d8860d6 (bug 877115) Backed out changeset bf8095c168fb (bug 877115) Backed out changeset 290ad5863615 (bug 877115) Backed out changeset 4488ec28910e (bug 877115) Backed out changeset 45f8859c6fd6 (bug 877115) Backed out changeset 111cc426fa9e (bug 877115)
60 lines
1.2 KiB
C++
60 lines
1.2 KiB
C++
/* -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40; -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "SurfaceFactory.h"
|
|
|
|
#include "SharedSurface.h"
|
|
|
|
namespace mozilla {
|
|
namespace gfx {
|
|
|
|
SurfaceFactory::~SurfaceFactory()
|
|
{
|
|
while (!mScraps.empty()) {
|
|
SharedSurface* cur = mScraps.front();
|
|
mScraps.pop();
|
|
|
|
delete cur;
|
|
}
|
|
}
|
|
|
|
SharedSurface*
|
|
SurfaceFactory::NewSharedSurface(const gfxIntSize& size)
|
|
{
|
|
// Attempt to reuse an old surface.
|
|
while (!mScraps.empty()) {
|
|
SharedSurface* cur = mScraps.front();
|
|
mScraps.pop();
|
|
if (cur->Size() == size)
|
|
return cur;
|
|
|
|
// Destroy old surfaces of the wrong size.
|
|
delete cur;
|
|
}
|
|
|
|
SharedSurface* ret = CreateShared(size);
|
|
|
|
return ret;
|
|
}
|
|
|
|
// Auto-deletes surfs of the wrong type.
|
|
void
|
|
SurfaceFactory::Recycle(SharedSurface*& surf)
|
|
{
|
|
if (!surf)
|
|
return;
|
|
|
|
if (surf->Type() == mType) {
|
|
mScraps.push(surf);
|
|
} else {
|
|
delete surf;
|
|
}
|
|
|
|
surf = nullptr;
|
|
}
|
|
|
|
} /* namespace gfx */
|
|
} /* namespace mozilla */
|