mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-02 07:05:24 +00:00
106 lines
2.8 KiB
C++
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);
|
|
}
|
|
}
|