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 #ifndef SD_PREVIEW_RENDERER_HXX 25 #define SD_PREVIEW_RENDERER_HXX 26 27 #include "drawview.hxx" 28 #include <vcl/image.hxx> 29 #include <vcl/virdev.hxx> 30 #include <svl/listener.hxx> 31 #include <memory> 32 33 34 class OutputDevice; 35 class SdPage; 36 class VirtualDevice; 37 38 namespace sd { 39 40 class DrawDocShell; 41 class DrawView; 42 43 44 class PreviewRenderer 45 : public SfxListener 46 { 47 public: 48 /** Create a new preview renderer that takes some of its initial values 49 from the given output device. 50 @param pTemplate 51 May be NULL. 52 @param bPaintFrame 53 When <TRUE/> (the default) then a frame is painted around the 54 preview. This makes the actual preview smaller. 55 */ 56 PreviewRenderer ( 57 OutputDevice* pTemplate = NULL, 58 const bool bPaintFrame = true); 59 60 ~PreviewRenderer (void); 61 62 /** Render a page with the given pixel size. 63 Use this version when only the width of the preview is known to the 64 caller. The height is then calculated according to the aspect 65 ration of the given page. 66 @param pPage 67 The page to render. 68 @param nWidth 69 The width of the preview in device coordinates. 70 @param sSubstitutionText 71 When the actual preview can not be created for some reason, then 72 this text is painted in an empty rectangle of the requested size 73 instead. 74 @param bObeyHighContrastMode 75 When <FALSE/> then the high contrast mode of the application is 76 ignored and the preview is rendered in normal mode. When 77 <TRUE/> and high contrast mode is active then the preview is 78 rendered in high contrast mode. 79 @param bDisplayPresentationObjects 80 When <FALSE/> then the PresObj place holders are not displayed 81 in the returned preview. 82 */ 83 Image RenderPage ( 84 const SdPage* pPage, 85 const sal_Int32 nWidth, 86 const String& sSubstitutionText, 87 const bool bObeyHighContrastMode = true, 88 const bool bDisplayPresentationObjects = true); 89 90 /** Render a page with the given pixel size. 91 @param pPage 92 The page to render. 93 @param aPreviewPixelSize 94 The size in device coordinates of the preview. 95 @param sSubstitutionText 96 When the actual preview can not be created for some reason, then 97 this text is painted in an empty rectangle of the requested size 98 instead. 99 @param bObeyHighContrastMode 100 When <FALSE/> then the high contrast mode of the application is 101 ignored and the preview is rendered in normal mode. When 102 <TRUE/> and high contrast mode is active then the preview is 103 rendered in high contrast mode. 104 @param bDisplayPresentationObjects 105 When <FALSE/> then the PresObj place holders are not displayed 106 in the returned preview. 107 */ 108 Image RenderPage ( 109 const SdPage* pPage, 110 const Size aPreviewPixelSize, 111 const String& sSubstitutionText, 112 const bool bObeyHighContrastMode = true, 113 const bool bDisplayPresentationObjects = true); 114 115 /** Render an image that contains the given substitution text instead of a 116 slide preview. 117 @param aPreviewPixelSize 118 The size in device coordinates of the image. 119 */ 120 Image RenderSubstitution ( 121 const Size& rPreviewPixelSize, 122 const String& sSubstitutionText); 123 124 /** Scale the given bitmap by keeping its aspect ratio to the desired 125 width. Add a frame to it afterwards. 126 */ 127 Image ScaleBitmap ( 128 const BitmapEx& rBitmap, 129 int nWidth); 130 131 protected: 132 virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint); 133 134 private: 135 ::std::auto_ptr<VirtualDevice> mpPreviewDevice; 136 ::std::auto_ptr<DrawView> mpView; 137 DrawDocShell* mpDocShellOfView; 138 int mnWidthOfView; 139 const Color maFrameColor; 140 const bool mbHasFrame; 141 static const int snSubstitutionTextSize; 142 // Width of the frame that is painted around the preview. 143 static const int snFrameWidth; 144 145 bool Initialize ( 146 const SdPage* pPage, 147 const Size& rPixelSize, 148 const bool bObeyHighContrastMode); 149 void Cleanup (void); 150 void PaintPage ( 151 const SdPage* pPage, 152 const bool bDisplayPresentationObjects); 153 void PaintSubstitutionText (const String& rSubstitutionText); 154 void PaintFrame (void); 155 156 /** Set up the map mode so that the given page is renderer into a bitmap 157 with the specified width. 158 @param rPage 159 The page for which the preview is created. 160 @param rPixelSize 161 The size of the resulting preview bitmap. Note that this size 162 includes the frame. The actual preview is smaller accordingly. 163 */ 164 void SetupOutputSize (const SdPage& rPage, const Size& rPixelSize); 165 166 /** When mpView is empty then create a new view and initialize it. 167 Otherwise just initialize it. 168 */ 169 void ProvideView (DrawDocShell* pDocShell); 170 }; 171 172 } // end of namespace ::sd 173 174 #endif 175