Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(569)

Unified Diff: base/win/scoped_hdc.h

Issue 9387027: Revert 121840 - Make scoped dc objects smarter (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/base.gypi ('k') | base/win/scoped_hdc.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/win/scoped_hdc.h
===================================================================
--- base/win/scoped_hdc.h (revision 121842)
+++ base/win/scoped_hdc.h (working copy)
@@ -1,4 +1,4 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -9,92 +9,70 @@
#include <windows.h>
#include "base/basictypes.h"
-#include "base/compiler_specific.h"
+#include "base/logging.h"
namespace base {
namespace win {
-// The ScopedGetDC and ScopedCreateDC classes manage the default GDI objects
-// that are initially selected into a DC. They help you avoid the following
-// common mistake:
-//
-// HDC hdc = GetDC(NULL);
-// SelectObject(hdc, new_bitmap);
-// .. drawing code here ..
-// ReleaseDC(hdc); <--- error: the DC has a custom object still selected!
-//
-// This code should be:
-//
-// HDC hdc = GetDC(NULL);
-// HGDIOBJ old_obj = SelectObject(hdc, new_bitmap);
-// .. drawing code here ..
-// SelectObject(hdc, old_obj);
-// ReleaseDC(hdc); <--- ok to release now.
-//
-// But why work so hard? Use our handy classes:
-//
-// ScopedGetDC dc(NULL);
-// dc.SelectBitmap(hdc, new_bitmap);
-// .. drawing here
-// .. when dc goes out of scope it will select the original object before
-// .. being released.
-//
-class ScopedDC {
+// Like ScopedHandle but for HDC. Only use this on HDCs returned from
+// GetDC.
+class ScopedGetDC {
public:
- virtual ~ScopedDC();
+ explicit ScopedGetDC(HWND hwnd)
+ : hwnd_(hwnd),
+ hdc_(GetDC(hwnd)) {
+ DCHECK(!hwnd_ || IsWindow(hwnd_));
+ DCHECK(hdc_);
+ }
- virtual void DisposeDC(HDC hdc) = 0;
+ ~ScopedGetDC() {
+ if (hdc_)
+ ReleaseDC(hwnd_, hdc_);
+ }
- HDC get() { return hdc_; }
+ operator HDC() { return hdc_; }
- void SelectBitmap(HBITMAP bitmap);
- void SelectFont(HFONT font);
- void SelectBrush(HBRUSH brush);
- void SelectPen(HPEN pen);
- void SelectRegion(HRGN region);
-
- protected:
- ScopedDC(HDC hdc);
- void Close();
- void Reset(HDC hdc);
-
private:
- void ResetObjects();
- void Select(HGDIOBJ object, HGDIOBJ* holder);
-
+ HWND hwnd_;
HDC hdc_;
- HGDIOBJ bitmap_;
- HGDIOBJ font_;
- HGDIOBJ brush_;
- HGDIOBJ pen_;
- HGDIOBJ region_;
-};
-// Creates and manages an HDC obtained by GetDC.
-class ScopedGetDC : public ScopedDC {
- public:
- explicit ScopedGetDC(HWND hwnd);
- virtual ~ScopedGetDC();
-
- private:
- virtual void DisposeDC(HDC hdc) OVERRIDE;
-
- HWND hwnd_;
DISALLOW_COPY_AND_ASSIGN(ScopedGetDC);
};
// Like ScopedHandle but for HDC. Only use this on HDCs returned from
// CreateCompatibleDC, CreateDC and CreateIC.
-class ScopedCreateDC : public ScopedDC {
+class ScopedCreateDC {
public:
- ScopedCreateDC();
- explicit ScopedCreateDC(HDC hdc);
- virtual ~ScopedCreateDC();
- void Set(HDC hdc);
+ ScopedCreateDC() : hdc_(NULL) { }
+ explicit ScopedCreateDC(HDC h) : hdc_(h) { }
+ ~ScopedCreateDC() {
+ Close();
+ }
+
+ HDC Get() {
+ return hdc_;
+ }
+
+ void Set(HDC h) {
+ Close();
+ hdc_ = h;
+ }
+
+ operator HDC() { return hdc_; }
+
private:
- virtual void DisposeDC(HDC hdc) OVERRIDE;
+ void Close() {
+#ifdef NOGDI
+ assert(false);
+#else
+ if (hdc_)
+ DeleteDC(hdc_);
+#endif // NOGDI
+ }
+ HDC hdc_;
+
DISALLOW_COPY_AND_ASSIGN(ScopedCreateDC);
};
« no previous file with comments | « base/base.gypi ('k') | base/win/scoped_hdc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698