home *** CD-ROM | disk | FTP | other *** search
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- *
- * The contents of this file are subject to the Netscape Public License
- * Version 1.0 (the "NPL"); you may not use this file except in
- * compliance with the NPL. You may obtain a copy of the NPL at
- * http://www.mozilla.org/NPL/
- *
- * Software distributed under the NPL is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
- * for the specific language governing rights and limitations under the
- * NPL.
- *
- * The Initial Developer of this code under the NPL is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 1998 Netscape Communications Corporation. All Rights
- * Reserved.
- */
-
- //
- // File: UStClasses.cp
- //
- // This file contains a couple of stack-based save/restore classes
- //
-
- #include "UStClasses.h"
-
-
- //======================================================================================
- #pragma mark * StSetResAttrs
-
- //
- // Constructor. Set the resource handle attributes to the specified attributes. If
- // inAddAttrs is true, add the specified attributes to the current attributes; otherwise
- // reset the attributes completely.
- //
- StSetResAttrs::StSetResAttrs(Handle inResourceH, short inResAttrs, Boolean inAddAttrs) {
-
- Assert_(inResourceH != nil);
-
- mResourceH = nil;
-
- mSavedAttrs = ::GetResAttrs(inResourceH);
- ThrowIfResError_();
- ::SetResAttrs(inResourceH, inAddAttrs ? (mSavedAttrs | inResAttrs) : inResAttrs);
- ThrowIfResError_();
- mResourceH = inResourceH;
- }
-
-
- //
- // Destructor
- //
- StSetResAttrs::~StSetResAttrs(void) {
-
- if ( mResourceH ) {
- ::SetResAttrs(mResourceH, mSavedAttrs);
- OSErr theErr = ::ResError();
- Assert_(theErr == noErr);
- }
- }
-
- //======================================================================================
- #pragma mark * StExcludeVisibleRgn
-
- //
- // Constructor.
- //
- // Exclude the specified port rectangle from the current visible region.
- //
- StExcludeVisibleRgn::StExcludeVisibleRgn(LPane *inPane) {
-
- mGrafPtr = nil;
-
- Assert_(inPane != nil);
- FailNIL_(mSaveVisRgn = ::NewRgn());
-
- Rect portFrame;
- GrafPtr port = inPane->GetMacPort();
- inPane->CalcPortFrameRect(portFrame);
- StRegion tempRgn(portFrame);
- ::CopyRgn(port->visRgn, mSaveVisRgn);
- ::DiffRgn(port->visRgn, tempRgn, port->visRgn);
-
- mGrafPtr = port;
- mSavePortOrigin = topLeft(mGrafPtr->portRect);
- }
-
-
- //
- // Destructor.
- //
- StExcludeVisibleRgn::~StExcludeVisibleRgn(void) {
-
- if ( mGrafPtr != nil ) {
- Point deltaOrigin = topLeft(mGrafPtr->portRect);
- deltaOrigin.h -= mSavePortOrigin.h;
- deltaOrigin.v -= mSavePortOrigin.v;
- if ( (deltaOrigin.h != 0) || (deltaOrigin.v != 0) ) {
- ::OffsetRgn(mSaveVisRgn, deltaOrigin.h, deltaOrigin.v);
- }
- RgnHandle tempRgn = mGrafPtr->visRgn;
- mGrafPtr->visRgn = mSaveVisRgn;
- ::DisposeRgn(tempRgn);
- }
- }
-