// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BASE_WIN_SCOPED_GDI_OBJECT_H_
#define BASE_WIN_SCOPED_GDI_OBJECT_H_

#include <windows.h>

#include "base/basictypes.h"
#include "base/logging.h"

namespace base {
namespace win {

// Like ScopedHandle but for GDI objects.
template<class T>
class ScopedGDIObject {
 public:
  ScopedGDIObject() : object_(NULL) {}
  explicit ScopedGDIObject(T object) : object_(object) {}

  ~ScopedGDIObject() {
    Close();
  }

  T Get() {
    return object_;
  }

  void Set(T object) {
    if (object_ && object != object_)
      Close();
    object_ = object;
  }

  ScopedGDIObject& operator=(T object) {
    Set(object);
    return *this;
  }

  T release() {
    T object = object_;
    object_ = NULL;
    return object;
  }

  operator T() { return object_; }

 private:
  void Close() {
    if (object_)
      DeleteObject(object_);
  }

  T object_;
  DISALLOW_COPY_AND_ASSIGN(ScopedGDIObject);
};

// An explicit specialization for HICON because we have to call DestroyIcon()
// instead of DeleteObject() for HICON.
template<>
void ScopedGDIObject<HICON>::Close() {
  if (object_)
    DestroyIcon(object_);
}

// Typedefs for some common use cases.
typedef ScopedGDIObject<HBITMAP> ScopedBitmap;
typedef ScopedGDIObject<HRGN> ScopedRegion;
typedef ScopedGDIObject<HFONT> ScopedHFONT;
typedef ScopedGDIObject<HICON> ScopedHICON;

}  // namespace win
}  // namespace base

#endif  // BASE_WIN_SCOPED_GDI_OBJECT_H_
