gecko-dev/cmd/macfe/gui/UStClasses.cp
1998-03-28 02:44:41 +00:00

106 lines
2.8 KiB
C++

/* -*- 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);
}
}