bool16 classname::IsTextFrameOverset(const InterfacePtr parcel) { bool16 overset = kFalse; do { ParcelKey parcelKey = parcel->GetParcelKey(); if (parcelKey.IsValid() == kFalse) { overset = kTrue; break; } // Check for damage & recompose if necessary InterfacePtr parcelList(parcel->QueryParcelList()); ASSERT(parcelList); if (parcelList == nil) { break; } InterfacePtr textParcelList(parcelList, UseDefaultIID()); ASSERT(textParcelList); if (textParcelList == nil) { break; } if (textParcelList->GetIsDamaged(parcelKey)) { // Parcel is damaged, recompose. InterfacePtr textParcelListComposer(textParcelList, UseDefaultIID()); ASSERT(textParcelListComposer); if (textParcelListComposer == nil) { break; } textParcelListComposer->RecomposeThru(parcelKey); ASSERT_MSG(textParcelList->GetIsDamaged(parcelKey) == kFalse, "parcel should have been recomposed, why is it still damaged?"); } InterfacePtr textParcelListComposer1(textParcelList, UseDefaultIID()); if (textParcelListComposer1 == nil) { break; } ///****************************************//// InterfacePtr textFrameColumn(parcel->QueryFrame()); if (textFrameColumn == nil) break; InterfacePtr textModel(textFrameColumn->QueryTextModel()); if (textModel == nil) { break; } TextIndex storyFinalTextIndex = textModel->GetPrimaryStoryThreadSpan() - 1; // Find the TextIndex of the final character in the frame. TextIndex frameFinalTextIndex = textFrameColumn->TextStart() + textFrameColumn->TextSpan() - 1; if (frameFinalTextIndex == storyFinalTextIndex) { // Frame displays the final character in the story. break; } if (frameFinalTextIndex == storyFinalTextIndex - 1) { // Frame does not display the terminating kTextChar_CR. // But don't consider this condition as overset. break; } ///****************************************//// // Check if the story thread is completely displayed in the parcel list. if (textParcelList->GetIsOverset()) { // The story thread is not completely displayed in the parcel list. // Therefore all parcels in the parcel list are overset, so // this particular parcel must be too. overset = kTrue; break; } } while (false); // only do once return overset; } bool16 classname::IsTxtParcelOversetNew (InterfacePtr parcel) { bool16 overset = kFalse; do { ParcelKey parcelKey = parcel->GetParcelKey(); if (parcelKey.IsValid() == kFalse) { overset = kTrue; break; } // Check for damage & recompose if necessary InterfacePtr parcelList(parcel->QueryParcelList()); ASSERT(parcelList); if (parcelList == nil) { break; } InterfacePtr textParcelList(parcelList, UseDefaultIID()); ASSERT(textParcelList); if (textParcelList == nil) { break; } if (textParcelList->GetIsDamaged(parcelKey)) { // Parcel is damaged, recompose. InterfacePtr textParcelListComposer(textParcelList, UseDefaultIID()); ASSERT(textParcelListComposer); if (textParcelListComposer == nil) { break; } textParcelListComposer->RecomposeThru(parcelKey); ASSERT_MSG(textParcelList->GetIsDamaged(parcelKey) == kFalse, "parcel should have been recomposed, why is it still damaged?"); } InterfacePtr textParcelListComposer1(textParcelList, UseDefaultIID()); if (textParcelListComposer1 == nil) { break; } ///****************************************//// InterfacePtr textFrameColumn(parcel->QueryFrame()); if (textFrameColumn == nil) break; InterfacePtr textModel(textFrameColumn->QueryTextModel()); if (textModel == nil) { break; } int32 x = textModel->TotalLength(); TextIndex storyFinalTextIndex = textModel->GetPrimaryStoryThreadSpan() - 1; // Find the TextIndex of the final character in the frame. TextIndex frameFinalTextIndex = textFrameColumn->TextStart() + textFrameColumn->TextSpan() - 1; if (frameFinalTextIndex == storyFinalTextIndex) { // Frame displays the final character in the story. break; } if (frameFinalTextIndex == storyFinalTextIndex - 1) { // Frame does not display the terminating kTextChar_CR. // But don't consider this condition as overset. break; } ///****************************************//// // Check if the story thread is completely displayed in the parcel list. if (textParcelList->GetIsOverset()) { // The story thread is not completely displayed in the parcel list. // Therefore all parcels in the parcel list are overset, so // this particular parcel must be too. overset = kTrue; break; } } while (false); // only do once return overset; }