1*6777b538SAndroid Build Coastguard Worker // Copyright 2011 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_WIN_SCOPED_SELECT_OBJECT_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_WIN_SCOPED_SELECT_OBJECT_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <windows.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/check.h" 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker namespace base { 13*6777b538SAndroid Build Coastguard Worker namespace win { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // Helper class for deselecting object from DC. 16*6777b538SAndroid Build Coastguard Worker class ScopedSelectObject { 17*6777b538SAndroid Build Coastguard Worker public: ScopedSelectObject(HDC hdc,HGDIOBJ object)18*6777b538SAndroid Build Coastguard Worker ScopedSelectObject(HDC hdc, HGDIOBJ object) 19*6777b538SAndroid Build Coastguard Worker : hdc_(hdc), oldobj_(SelectObject(hdc, object)) { 20*6777b538SAndroid Build Coastguard Worker DCHECK(hdc_); 21*6777b538SAndroid Build Coastguard Worker DCHECK(object); 22*6777b538SAndroid Build Coastguard Worker DCHECK(oldobj_); 23*6777b538SAndroid Build Coastguard Worker DCHECK(oldobj_ != HGDI_ERROR); 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker ScopedSelectObject(const ScopedSelectObject&) = delete; 27*6777b538SAndroid Build Coastguard Worker ScopedSelectObject& operator=(const ScopedSelectObject&) = delete; 28*6777b538SAndroid Build Coastguard Worker ~ScopedSelectObject()29*6777b538SAndroid Build Coastguard Worker ~ScopedSelectObject() { 30*6777b538SAndroid Build Coastguard Worker HGDIOBJ object = SelectObject(hdc_, oldobj_); 31*6777b538SAndroid Build Coastguard Worker DCHECK((GetObjectType(oldobj_) != OBJ_REGION && object) || 32*6777b538SAndroid Build Coastguard Worker (GetObjectType(oldobj_) == OBJ_REGION && object != HGDI_ERROR)); 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker private: 36*6777b538SAndroid Build Coastguard Worker const HDC hdc_; 37*6777b538SAndroid Build Coastguard Worker const HGDIOBJ oldobj_; 38*6777b538SAndroid Build Coastguard Worker }; 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker } // namespace win 41*6777b538SAndroid Build Coastguard Worker } // namespace base 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker #endif // BASE_WIN_SCOPED_SELECT_OBJECT_H_ 44