1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_vcl.hxx" 26 27 #include <vcl/outdev.hxx> 28 #include <vcl/svapp.hxx> 29 #include <vcl/graph.hxx> 30 #include <vcl/metaact.hxx> 31 #include <impgraph.hxx> 32 #include <comphelper/processfactory.hxx> 33 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 34 #include <com/sun/star/graphic/XGraphicProvider.hpp> 35 #include <com/sun/star/lang/XUnoTunnel.hpp> 36 #include <com/sun/star/lang/XTypeProvider.hpp> 37 #include <com/sun/star/graphic/XGraphic.hpp> 38 39 // ----------------------- 40 // - Compression defines - 41 // ----------------------- 42 43 #define COMPRESS_OWN ('S'|('D'<<8UL)) 44 #define COMPRESS_NONE ( 0UL ) 45 #define RLE_8 ( 1UL ) 46 #define RLE_4 ( 2UL ) 47 #define BITFIELDS ( 3UL ) 48 #define ZCOMPRESS ( COMPRESS_OWN | 0x01000000UL ) /* == 'SD01' (binary) */ 49 50 using namespace ::com::sun::star; 51 52 // ----------------------- 53 // - Default-Drawmethode - 54 // ----------------------- 55 56 static void ImplDrawDefault( OutputDevice* pOutDev, const UniString* pText, 57 Font* pFont, const Bitmap* pBitmap, const BitmapEx* pBitmapEx, 58 const Point& rDestPt, const Size& rDestSize ) 59 { 60 sal_uInt16 nPixel = (sal_uInt16) pOutDev->PixelToLogic( Size( 1, 1 ) ).Width(); 61 sal_uInt16 nPixelWidth = nPixel; 62 Point aPoint( rDestPt.X() + nPixelWidth, rDestPt.Y() + nPixelWidth ); 63 Size aSize( rDestSize.Width() - ( nPixelWidth << 1 ), rDestSize.Height() - ( nPixelWidth << 1 ) ); 64 sal_Bool bFilled = ( pBitmap != NULL || pBitmapEx != NULL || pFont != NULL ); 65 Rectangle aBorderRect( aPoint, aSize ); 66 67 pOutDev->Push(); 68 69 pOutDev->SetFillColor(); 70 71 // Auf dem Drucker ein schwarzes Rechteck und auf dem Bildschirm eins mit 3D-Effekt 72 if ( pOutDev->GetOutDevType() == OUTDEV_PRINTER ) 73 pOutDev->SetLineColor( COL_BLACK ); 74 else 75 { 76 aBorderRect.Left() += nPixel; 77 aBorderRect.Top() += nPixel; 78 79 pOutDev->SetLineColor( COL_LIGHTGRAY ); 80 pOutDev->DrawRect( aBorderRect ); 81 82 aBorderRect.Left() -= nPixel; 83 aBorderRect.Top() -= nPixel; 84 aBorderRect.Right() -= nPixel; 85 aBorderRect.Bottom() -= nPixel; 86 pOutDev->SetLineColor( COL_GRAY ); 87 } 88 89 pOutDev->DrawRect( aBorderRect ); 90 91 aPoint.X() += nPixelWidth + 2*nPixel; 92 aPoint.Y() += nPixelWidth + 2*nPixel; 93 aSize.Width() -= 2*nPixelWidth + 4*nPixel; 94 aSize.Height() -= 2*nPixelWidth + 4*nPixel; 95 96 if( aSize.Width() > 0 && aSize.Height() > 0 97 && ( ( pBitmap && !!*pBitmap ) || ( pBitmapEx && !!*pBitmapEx ) ) ) 98 { 99 Size aBitmapSize( pOutDev->PixelToLogic( pBitmap ? pBitmap->GetSizePixel() : pBitmapEx->GetSizePixel() ) ); 100 101 if( aSize.Height() > aBitmapSize.Height() && aSize.Width() > aBitmapSize.Width() ) 102 { 103 if ( pBitmap ) 104 pOutDev->DrawBitmap( aPoint, *pBitmap ); 105 else 106 pOutDev->DrawBitmapEx( aPoint, *pBitmapEx ); 107 aPoint.X() += aBitmapSize.Width() + 2*nPixel; 108 aSize.Width() -= aBitmapSize.Width() + 2*nPixel; 109 } 110 } 111 112 if ( aSize.Width() > 0 && aSize.Height() > 0 && pFont && pText && pText->Len() 113 && !(!pOutDev->IsOutputEnabled() /*&& pOutDev->GetConnectMetaFile() */) ) 114 { 115 MapMode aMapMode( MAP_POINT ); 116 Size aSz = pOutDev->LogicToLogic( Size( 0, 12 ), &aMapMode, NULL ); 117 long nThreshold = aSz.Height() / 2; 118 long nStep = nThreshold / 3; 119 120 if ( !nStep ) 121 nStep = aSz.Height() - nThreshold; 122 123 for(;; aSz.Height() -= nStep ) 124 { 125 pFont->SetSize( aSz ); 126 pOutDev->SetFont( *pFont ); 127 128 long nTextHeight = pOutDev->GetTextHeight(); 129 long nTextWidth = pOutDev->GetTextWidth( *pText ); 130 if ( nTextHeight ) 131 { 132 // Die N"aherung ber"ucksichtigt keine Ungenauigkeiten durch 133 // Wortumbr"uche 134 long nLines = aSize.Height() / nTextHeight; 135 long nWidth = aSize.Width() * nLines; // N"aherung!!! 136 137 if ( nTextWidth <= nWidth || aSz.Height() <= nThreshold ) 138 { 139 sal_uInt16 nStart = 0; 140 sal_uInt16 nLen = 0; 141 142 while( nStart < pText->Len() && pText->GetChar( nStart ) == ' ' ) 143 nStart++; 144 while( nStart+nLen < pText->Len() && pText->GetChar( nStart+nLen ) != ' ' ) 145 nLen++; 146 while( nStart < pText->Len() && nLines-- ) 147 { 148 sal_uInt16 nNext = nLen; 149 do 150 { 151 while ( nStart+nNext < pText->Len() && pText->GetChar( nStart+nNext ) == ' ' ) 152 nNext++; 153 while ( nStart+nNext < pText->Len() && pText->GetChar( nStart+nNext ) != ' ' ) 154 nNext++; 155 nTextWidth = pOutDev->GetTextWidth( *pText, nStart, nNext ); 156 if ( nTextWidth > aSize.Width() ) 157 break; 158 nLen = nNext; 159 } 160 while ( nStart+nNext < pText->Len() ); 161 162 sal_uInt16 n = nLen; 163 nTextWidth = pOutDev->GetTextWidth( *pText, nStart, n ); 164 while( nTextWidth > aSize.Width() ) 165 nTextWidth = pOutDev->GetTextWidth( *pText, nStart, --n ); 166 pOutDev->DrawText( aPoint, *pText, nStart, n ); 167 168 aPoint.Y() += nTextHeight; 169 nStart = sal::static_int_cast<sal_uInt16>(nStart + nLen); 170 nLen = nNext-nLen; 171 while( nStart < pText->Len() && pText->GetChar( nStart ) == ' ' ) 172 { 173 nStart++; 174 nLen--; 175 } 176 } 177 break; 178 } 179 } 180 else 181 break; 182 } 183 } 184 185 // Falls die Default-Graphik keinen Inhalt hat, 186 // malen wir ein rotes Kreuz 187 if( !bFilled ) 188 { 189 aBorderRect.Left()++; 190 aBorderRect.Top()++; 191 aBorderRect.Right()--; 192 aBorderRect.Bottom()--; 193 194 pOutDev->SetLineColor( COL_LIGHTRED ); 195 pOutDev->DrawLine( aBorderRect.TopLeft(), aBorderRect.BottomRight() ); 196 pOutDev->DrawLine( aBorderRect.TopRight(), aBorderRect.BottomLeft() ); 197 } 198 199 pOutDev->Pop(); 200 } 201 202 // ----------- 203 // - Graphic - 204 // ----------- 205 206 TYPEINIT1_AUTOFACTORY( Graphic, SvDataCopyStream ); 207 208 // ------------------------------------------------------------------------ 209 210 Graphic::Graphic() 211 { 212 mpImpGraphic = new ImpGraphic; 213 } 214 215 // ------------------------------------------------------------------------ 216 217 Graphic::Graphic( const Graphic& rGraphic ) : 218 SvDataCopyStream() 219 { 220 if( rGraphic.IsAnimated() ) 221 mpImpGraphic = new ImpGraphic( *rGraphic.mpImpGraphic ); 222 else 223 { 224 mpImpGraphic = rGraphic.mpImpGraphic; 225 mpImpGraphic->mnRefCount++; 226 } 227 } 228 229 // ------------------------------------------------------------------------ 230 231 Graphic::Graphic( const Bitmap& rBmp ) 232 { 233 mpImpGraphic = new ImpGraphic( rBmp ); 234 } 235 236 // ------------------------------------------------------------------------ 237 238 Graphic::Graphic( const BitmapEx& rBmpEx ) 239 { 240 mpImpGraphic = new ImpGraphic( rBmpEx ); 241 } 242 243 // ------------------------------------------------------------------------ 244 245 Graphic::Graphic(const SvgDataPtr& rSvgDataPtr) 246 { 247 mpImpGraphic = new ImpGraphic(rSvgDataPtr); 248 } 249 250 // ------------------------------------------------------------------------ 251 252 Graphic::Graphic( const Animation& rAnimation ) 253 { 254 mpImpGraphic = new ImpGraphic( rAnimation ); 255 } 256 257 // ------------------------------------------------------------------------ 258 259 Graphic::Graphic( const GDIMetaFile& rMtf ) 260 { 261 mpImpGraphic = new ImpGraphic( rMtf ); 262 } 263 264 // ------------------------------------------------------------------------ 265 266 Graphic::Graphic( const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >& rxGraphic ) 267 { 268 uno::Reference< lang::XUnoTunnel > xTunnel( rxGraphic, uno::UNO_QUERY ); 269 uno::Reference< lang::XTypeProvider > xProv( rxGraphic, uno::UNO_QUERY ); 270 const ::Graphic* pGraphic = ( ( xTunnel.is() && xProv.is() ) ? 271 reinterpret_cast< ::Graphic* >( xTunnel->getSomething( xProv->getImplementationId() ) ) : 272 NULL ); 273 274 if( pGraphic ) 275 { 276 if( pGraphic->IsAnimated() ) 277 mpImpGraphic = new ImpGraphic( *pGraphic->mpImpGraphic ); 278 else 279 { 280 mpImpGraphic = pGraphic->mpImpGraphic; 281 mpImpGraphic->mnRefCount++; 282 } 283 } 284 else 285 mpImpGraphic = new ImpGraphic; 286 } 287 288 // ------------------------------------------------------------------------ 289 290 Graphic::~Graphic() 291 { 292 if( mpImpGraphic->mnRefCount == 1UL ) 293 delete mpImpGraphic; 294 else 295 mpImpGraphic->mnRefCount--; 296 } 297 298 // ------------------------------------------------------------------------ 299 300 void Graphic::ImplTestRefCount() 301 { 302 if( mpImpGraphic->mnRefCount > 1UL ) 303 { 304 mpImpGraphic->mnRefCount--; 305 mpImpGraphic = new ImpGraphic( *mpImpGraphic ); 306 } 307 } 308 309 // ------------------------------------------------------------------------ 310 311 Graphic& Graphic::operator=( const Graphic& rGraphic ) 312 { 313 if( &rGraphic != this ) 314 { 315 if( rGraphic.IsAnimated() ) 316 { 317 if( mpImpGraphic->mnRefCount == 1UL ) 318 delete mpImpGraphic; 319 else 320 mpImpGraphic->mnRefCount--; 321 322 mpImpGraphic = new ImpGraphic( *rGraphic.mpImpGraphic ); 323 } 324 else 325 { 326 rGraphic.mpImpGraphic->mnRefCount++; 327 328 if( mpImpGraphic->mnRefCount == 1UL ) 329 delete mpImpGraphic; 330 else 331 mpImpGraphic->mnRefCount--; 332 333 mpImpGraphic = rGraphic.mpImpGraphic; 334 } 335 } 336 337 return *this; 338 } 339 340 // ------------------------------------------------------------------------ 341 342 sal_Bool Graphic::operator==( const Graphic& rGraphic ) const 343 { 344 return( *mpImpGraphic == *rGraphic.mpImpGraphic ); 345 } 346 347 // ------------------------------------------------------------------------ 348 349 sal_Bool Graphic::operator!=( const Graphic& rGraphic ) const 350 { 351 return( *mpImpGraphic != *rGraphic.mpImpGraphic ); 352 } 353 354 // ------------------------------------------------------------------------ 355 356 sal_Bool Graphic::operator!() const 357 { 358 return( GRAPHIC_NONE == mpImpGraphic->ImplGetType() ); 359 } 360 361 // ------------------------------------------------------------------------ 362 363 void Graphic::Load( SvStream& rIStm ) 364 { 365 rIStm >> *this; 366 } 367 368 // ------------------------------------------------------------------------ 369 370 void Graphic::Save( SvStream& rOStm ) 371 { 372 rOStm << *this; 373 } 374 375 // ------------------------------------------------------------------------ 376 377 void Graphic::Assign( const SvDataCopyStream& rCopyStream ) 378 { 379 *this = (const Graphic& ) rCopyStream; 380 } 381 382 // ------------------------------------------------------------------------ 383 384 void Graphic::Clear() 385 { 386 ImplTestRefCount(); 387 mpImpGraphic->ImplClear(); 388 } 389 390 // ------------------------------------------------------------------------ 391 392 GraphicType Graphic::GetType() const 393 { 394 return mpImpGraphic->ImplGetType(); 395 } 396 397 // ------------------------------------------------------------------------ 398 399 void Graphic::SetDefaultType() 400 { 401 ImplTestRefCount(); 402 mpImpGraphic->ImplSetDefaultType(); 403 } 404 405 // ------------------------------------------------------------------------ 406 407 sal_Bool Graphic::IsSupportedGraphic() const 408 { 409 return mpImpGraphic->ImplIsSupportedGraphic(); 410 } 411 412 // ------------------------------------------------------------------------ 413 414 sal_Bool Graphic::IsTransparent() const 415 { 416 return mpImpGraphic->ImplIsTransparent(); 417 } 418 419 // ------------------------------------------------------------------------ 420 421 sal_Bool Graphic::IsAlpha() const 422 { 423 return mpImpGraphic->ImplIsAlpha(); 424 } 425 426 // ------------------------------------------------------------------------ 427 428 sal_Bool Graphic::IsAnimated() const 429 { 430 return mpImpGraphic->ImplIsAnimated(); 431 } 432 433 // ------------------------------------------------------------------------ 434 435 sal_Bool Graphic::IsEPS() const 436 { 437 return mpImpGraphic->ImplIsEPS(); 438 } 439 440 // ------------------------------------------------------------------------ 441 442 Bitmap Graphic::GetBitmap(const GraphicConversionParameters& rParameters) const 443 { 444 return mpImpGraphic->ImplGetBitmap(rParameters); 445 } 446 447 // ------------------------------------------------------------------------ 448 449 BitmapEx Graphic::GetBitmapEx(const GraphicConversionParameters& rParameters) const 450 { 451 return mpImpGraphic->ImplGetBitmapEx(rParameters); 452 } 453 454 // ------------------------------------------------------------------------ 455 456 Animation Graphic::GetAnimation() const 457 { 458 return mpImpGraphic->ImplGetAnimation(); 459 } 460 461 // ------------------------------------------------------------------------ 462 463 const GDIMetaFile& Graphic::GetGDIMetaFile() const 464 { 465 return mpImpGraphic->ImplGetGDIMetaFile(); 466 } 467 468 // ------------------------------------------------------------------------ 469 470 uno::Reference< graphic::XGraphic > Graphic::GetXGraphic() const 471 { 472 uno::Reference< graphic::XGraphic > xRet; 473 474 if( GetType() != GRAPHIC_NONE ) 475 { 476 uno::Reference < lang::XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() ); 477 478 if( xMSF.is() ) 479 { 480 uno::Reference< graphic::XGraphicProvider > xProv( xMSF->createInstance( 481 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.graphic.GraphicProvider" ) ) ), 482 uno::UNO_QUERY ); 483 484 if( xProv.is() ) 485 { 486 uno::Sequence< beans::PropertyValue > aLoadProps( 1 ); 487 ::rtl::OUString aURL( RTL_CONSTASCII_USTRINGPARAM( "private:memorygraphic/" ) ); 488 489 aLoadProps[ 0 ].Name = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "URL" ) ); 490 aLoadProps[ 0 ].Value <<= ( aURL += ::rtl::OUString::valueOf( reinterpret_cast< sal_Int64 >( this ) ) ); 491 492 xRet = xProv->queryGraphic( aLoadProps ); 493 } 494 } 495 } 496 497 return xRet; 498 } 499 500 // ------------------------------------------------------------------------ 501 502 Size Graphic::GetPrefSize() const 503 { 504 return mpImpGraphic->ImplGetPrefSize(); 505 } 506 507 // ------------------------------------------------------------------------ 508 509 void Graphic::SetPrefSize( const Size& rPrefSize ) 510 { 511 ImplTestRefCount(); 512 mpImpGraphic->ImplSetPrefSize( rPrefSize ); 513 } 514 515 // ------------------------------------------------------------------------ 516 517 MapMode Graphic::GetPrefMapMode() const 518 { 519 return mpImpGraphic->ImplGetPrefMapMode(); 520 } 521 522 // ------------------------------------------------------------------------ 523 524 void Graphic::SetPrefMapMode( const MapMode& rPrefMapMode ) 525 { 526 ImplTestRefCount(); 527 mpImpGraphic->ImplSetPrefMapMode( rPrefMapMode ); 528 } 529 530 // ------------------------------------------------------------------ 531 532 Size Graphic::GetSizePixel( const OutputDevice* pRefDevice ) const 533 { 534 Size aRet; 535 536 if( GRAPHIC_BITMAP == mpImpGraphic->ImplGetType() ) 537 aRet = mpImpGraphic->ImplGetBitmapEx(GraphicConversionParameters()).GetSizePixel(); 538 else 539 aRet = ( pRefDevice ? pRefDevice : Application::GetDefaultDevice() )->LogicToPixel( GetPrefSize(), GetPrefMapMode() ); 540 541 return aRet; 542 } 543 544 // ------------------------------------------------------------------ 545 546 sal_uLong Graphic::GetSizeBytes() const 547 { 548 return mpImpGraphic->ImplGetSizeBytes(); 549 } 550 551 // ------------------------------------------------------------------------ 552 553 void Graphic::Draw( OutputDevice* pOutDev, const Point& rDestPt ) const 554 { 555 mpImpGraphic->ImplDraw( pOutDev, rDestPt ); 556 } 557 558 // ------------------------------------------------------------------------ 559 560 void Graphic::Draw( OutputDevice* pOutDev, 561 const Point& rDestPt, const Size& rDestSz ) const 562 { 563 if( GRAPHIC_DEFAULT == mpImpGraphic->ImplGetType() ) 564 ImplDrawDefault( pOutDev, NULL, NULL, NULL, NULL, rDestPt, rDestSz ); 565 else 566 mpImpGraphic->ImplDraw( pOutDev, rDestPt, rDestSz ); 567 } 568 569 // ------------------------------------------------------------------------ 570 571 void Graphic::Draw( OutputDevice* pOutDev, const String& rText, 572 Font& rFont, const Bitmap& rBitmap, 573 const Point& rDestPt, const Size& rDestSz ) 574 { 575 ImplDrawDefault( pOutDev, &rText, &rFont, &rBitmap, NULL, rDestPt, rDestSz ); 576 } 577 578 // ------------------------------------------------------------------------ 579 580 void Graphic::DrawEx( OutputDevice* pOutDev, const String& rText, 581 Font& rFont, const BitmapEx& rBitmap, 582 const Point& rDestPt, const Size& rDestSz ) 583 { 584 ImplDrawDefault( pOutDev, &rText, &rFont, NULL, &rBitmap, rDestPt, rDestSz ); 585 } 586 587 // ------------------------------------------------------------------------ 588 589 void Graphic::StartAnimation( OutputDevice* pOutDev, const Point& rDestPt, long nExtraData, 590 OutputDevice* pFirstFrameOutDev ) 591 { 592 ImplTestRefCount(); 593 mpImpGraphic->ImplStartAnimation( pOutDev, rDestPt, nExtraData, pFirstFrameOutDev ); 594 } 595 596 // ------------------------------------------------------------------------ 597 598 void Graphic::StartAnimation( OutputDevice* pOutDev, const Point& rDestPt, 599 const Size& rDestSz, long nExtraData, 600 OutputDevice* pFirstFrameOutDev ) 601 { 602 ImplTestRefCount(); 603 mpImpGraphic->ImplStartAnimation( pOutDev, rDestPt, rDestSz, nExtraData, pFirstFrameOutDev ); 604 } 605 606 // ------------------------------------------------------------------------ 607 608 void Graphic::StopAnimation( OutputDevice* pOutDev, long nExtraData ) 609 { 610 ImplTestRefCount(); 611 mpImpGraphic->ImplStopAnimation( pOutDev, nExtraData ); 612 } 613 614 // ------------------------------------------------------------------------ 615 616 void Graphic::SetAnimationNotifyHdl( const Link& rLink ) 617 { 618 mpImpGraphic->ImplSetAnimationNotifyHdl( rLink ); 619 } 620 621 // ------------------------------------------------------------------------ 622 623 Link Graphic::GetAnimationNotifyHdl() const 624 { 625 return mpImpGraphic->ImplGetAnimationNotifyHdl(); 626 } 627 628 // ------------------------------------------------------------------------ 629 630 sal_uLong Graphic::GetAnimationLoopCount() const 631 { 632 return mpImpGraphic->ImplGetAnimationLoopCount(); 633 } 634 635 // ------------------------------------------------------------------------ 636 637 void Graphic::ResetAnimationLoopCount() 638 { 639 mpImpGraphic->ImplResetAnimationLoopCount(); 640 } 641 642 // ------------------------------------------------------------------------ 643 644 List* Graphic::GetAnimationInfoList() const 645 { 646 return mpImpGraphic->ImplGetAnimationInfoList(); 647 } 648 649 // ------------------------------------------------------------------------ 650 651 GraphicReader* Graphic::GetContext() 652 { 653 return mpImpGraphic->ImplGetContext(); 654 } 655 656 // ------------------------------------------------------------------------ 657 658 void Graphic::SetContext( GraphicReader* pReader ) 659 { 660 mpImpGraphic->ImplSetContext( pReader ); 661 } 662 663 // ------------------------------------------------------------------------ 664 665 sal_uInt16 Graphic::GetGraphicsCompressMode( SvStream& rIStm ) 666 { 667 const sal_uLong nPos = rIStm.Tell(); 668 const sal_uInt16 nOldFormat = rIStm.GetNumberFormatInt(); 669 sal_uInt32 nTmp32; 670 sal_uInt16 nTmp16; 671 sal_uInt16 nCompressMode = COMPRESSMODE_NONE; 672 673 rIStm.SetNumberFormatInt( NUMBERFORMAT_INT_LITTLEENDIAN ); 674 675 rIStm >> nTmp32; 676 677 // is it a swapped graphic with a bitmap? 678 rIStm.SeekRel( (nTmp32 == (sal_uInt32) GRAPHIC_BITMAP ) ? 40 : -4 ); 679 680 // try to read bitmap id 681 rIStm >> nTmp16; 682 683 // check id of BitmapFileHeader 684 if( 0x4D42 == nTmp16 ) 685 { 686 // seek to compress field of BitmapInfoHeader 687 rIStm.SeekRel( 28 ); 688 rIStm >> nTmp32; 689 690 // Compare with our own compressmode 691 if( ZCOMPRESS == nTmp32 ) 692 nCompressMode = COMPRESSMODE_ZBITMAP; 693 } 694 695 rIStm.SetNumberFormatInt( nOldFormat ); 696 rIStm.Seek( nPos ); 697 698 return nCompressMode; 699 } 700 701 // ------------------------------------------------------------------------ 702 703 void Graphic::SetDocFileName( const String& rName, sal_uLong nFilePos ) 704 { 705 mpImpGraphic->ImplSetDocFileName( rName, nFilePos ); 706 } 707 708 // ------------------------------------------------------------------------ 709 710 const String& Graphic::GetDocFileName() const 711 { 712 return mpImpGraphic->ImplGetDocFileName(); 713 } 714 715 // ------------------------------------------------------------------------ 716 717 sal_uLong Graphic::GetDocFilePos() const 718 { 719 return mpImpGraphic->ImplGetDocFilePos(); 720 } 721 722 // ------------------------------------------------------------------------ 723 724 sal_Bool Graphic::ReadEmbedded( SvStream& rIStream, sal_Bool bSwap ) 725 { 726 ImplTestRefCount(); 727 return mpImpGraphic->ImplReadEmbedded( rIStream, bSwap ); 728 } 729 730 // ------------------------------------------------------------------------ 731 732 sal_Bool Graphic::WriteEmbedded( SvStream& rOStream ) 733 { 734 ImplTestRefCount(); 735 return mpImpGraphic->ImplWriteEmbedded( rOStream ); 736 } 737 738 // ------------------------------------------------------------------------ 739 740 sal_Bool Graphic::SwapOut() 741 { 742 ImplTestRefCount(); 743 return mpImpGraphic->ImplSwapOut(); 744 } 745 746 // ------------------------------------------------------------------------ 747 748 sal_Bool Graphic::SwapOut( SvStream* pOStream ) 749 { 750 ImplTestRefCount(); 751 return mpImpGraphic->ImplSwapOut( pOStream ); 752 } 753 754 // ------------------------------------------------------------------------ 755 756 sal_Bool Graphic::SwapIn() 757 { 758 ImplTestRefCount(); 759 return mpImpGraphic->ImplSwapIn(); 760 } 761 762 // ------------------------------------------------------------------------ 763 764 sal_Bool Graphic::SwapIn( SvStream* pStrm ) 765 { 766 ImplTestRefCount(); 767 return mpImpGraphic->ImplSwapIn( pStrm ); 768 } 769 770 // ------------------------------------------------------------------------ 771 772 sal_Bool Graphic::IsSwapOut() const 773 { 774 return mpImpGraphic->ImplIsSwapOut(); 775 } 776 777 // ------------------------------------------------------------------------ 778 779 void Graphic::SetLink( const GfxLink& rGfxLink ) 780 { 781 ImplTestRefCount(); 782 mpImpGraphic->ImplSetLink( rGfxLink ); 783 } 784 785 // ------------------------------------------------------------------------ 786 787 GfxLink Graphic::GetLink() const 788 { 789 return mpImpGraphic->ImplGetLink(); 790 } 791 792 // ------------------------------------------------------------------------ 793 794 sal_Bool Graphic::IsLink() const 795 { 796 return mpImpGraphic->ImplIsLink(); 797 } 798 799 // ------------------------------------------------------------------------ 800 801 sal_uLong Graphic::GetChecksum() const 802 { 803 return mpImpGraphic->ImplGetChecksum(); 804 } 805 806 // ------------------------------------------------------------------------ 807 808 sal_Bool Graphic::ExportNative( SvStream& rOStream ) const 809 { 810 return mpImpGraphic->ImplExportNative( rOStream ); 811 } 812 813 // ------------------------------------------------------------------------ 814 815 SvStream& operator>>( SvStream& rIStream, Graphic& rGraphic ) 816 { 817 rGraphic.ImplTestRefCount(); 818 return rIStream >> *rGraphic.mpImpGraphic; 819 } 820 821 // ------------------------------------------------------------------------ 822 823 SvStream& operator<<( SvStream& rOStream, const Graphic& rGraphic ) 824 { 825 return rOStream << *rGraphic.mpImpGraphic; 826 } 827 828 const SvgDataPtr& Graphic::getSvgData() const 829 { 830 return mpImpGraphic->getSvgData(); 831 } 832