//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // AURenderQualityPopup::RegisterEvents // //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ void AURenderQualityPopup::RegisterEvents () { EventTypeSpec events[] = { { kEventClassCommand, kEventCommandProcess} }; WantEventTypes(GetWindowEventTarget(mView->GetCarbonWindow()), GetEventTypeCount(events), events); }
void AUPropertyControl::RegisterEvents () { #if !__LP64__ EventTypeSpec events[] = { { kEventClassControl, kEventControlValueFieldChanged } // N.B. OS X only }; WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events); #endif }
void AUCarbonViewControl::Bind() { #if !__LP64__ mInControlInitialization = 1; // true AUListenerAddParameter(mListener, this, &mParam); // will cause an almost-immediate callback EventTypeSpec events[] = { { kEventClassControl, kEventControlValueFieldChanged } // N.B. OS X only }; WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events); if (mType == kTypeContinuous || mType == kTypeText || mType == kTypeDiscrete) { EventTypeSpec events[] = { { kEventClassControl, kEventControlHit }, { kEventClassControl, kEventControlClick }, { kEventClassControl, kEventControlTrack } }; WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events); } if (mType == kTypeText) { EventTypeSpec events[] = { { kEventClassControl, kEventControlSetFocusPart } }; WantEventTypes(GetControlEventTarget(mControl), GetEventTypeCount(events), events); ControlKeyFilterUPP proc = mParam.ValuesHaveStrings() ? StdKeyFilterCallback : NumericKeyFilterCallback; // this will fail for a static text field SetControlData(mControl, 0, kControlEditTextKeyFilterTag, sizeof(proc), &proc); } Update(true); mInControlInitialization = 0; // false #endif }
OSStatus AUCarbonViewBase::CreateCarbonView(AudioUnit inAudioUnit, WindowRef inWindow, ControlRef inParentControl, const Float32Point &inLocation, const Float32Point &inSize, ControlRef &outParentControl) { #if !__LP64__ mEditAudioUnit = inAudioUnit; mCarbonWindow = inWindow; WindowAttributes attributes; verify_noerr(GetWindowAttributes(mCarbonWindow, &attributes)); mCompositWindow = (attributes & kWindowCompositingAttribute) != 0; Rect area; area.left = short(inLocation.x); area.top = short(inLocation.y); area.right = short(area.left + inSize.x); area.bottom = short(area.top + inSize.y); OSStatus err = ::CreateUserPaneControl(inWindow, &area, kControlSupportsEmbedding, &mCarbonPane); // subclass can resize mCarbonPane to taste verify_noerr(err); if (err) return err; outParentControl = mCarbonPane; // register for mouse-down in our pane -- we want to clear focus EventTypeSpec paneEvents[] = { { kEventClassControl, kEventControlClick } }; WantEventTypes(GetControlEventTarget(mCarbonPane), GetEventTypeCount(paneEvents), paneEvents); if (IsCompositWindow()) { verify_noerr(::HIViewAddSubview(inParentControl, mCarbonPane)); mXOffset = 0; mYOffset = 0; } else { verify_noerr(::EmbedControl(mCarbonPane, inParentControl)); mXOffset = inLocation.x; mYOffset = inLocation.y; } mBottomRight.h = mBottomRight.v = 0; SizeControl(mCarbonPane, 0, 0); if (err = CreateUI(mXOffset, mYOffset)) return err; // we should only resize the control if a subclass has embedded // controls in this AND this is done with the EmbedControl call below // if mBottomRight is STILL equal to zero, then that wasn't done // so don't size the control Rect paneBounds; GetControlBounds(mCarbonPane, &paneBounds); // only resize mCarbonPane if it has not already been resized during CreateUI if ((paneBounds.top == paneBounds.bottom) && (paneBounds.left == paneBounds.right)) { if (mBottomRight.h != 0 && mBottomRight.v != 0) SizeControl(mCarbonPane, (short) (mBottomRight.h - mXOffset), (short) (mBottomRight.v - mYOffset)); } if (IsCompositWindow()) { // prepare for handling scroll-events EventTypeSpec scrollEvents[] = { { kEventClassScrollable, kEventScrollableGetInfo }, { kEventClassScrollable, kEventScrollableScrollTo } }; WantEventTypes(GetControlEventTarget(mCarbonPane), GetEventTypeCount(scrollEvents), scrollEvents); mCurrentScrollPoint.x = mCurrentScrollPoint.y = 0.0f; } return err; #else return noErr; #endif }