1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _DIBPREVIEW_HXX_
25*b1cdbd2cSJim Jagielski #define _DIBPREVIEW_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
28*b1cdbd2cSJim Jagielski // includes
29*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include "previewbase.hxx"
32*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #if defined _MSC_VER
35*b1cdbd2cSJim Jagielski #pragma warning(push, 1)
36*b1cdbd2cSJim Jagielski #endif
37*b1cdbd2cSJim Jagielski #include <windows.h>
38*b1cdbd2cSJim Jagielski #if defined _MSC_VER
39*b1cdbd2cSJim Jagielski #pragma warning(pop)
40*b1cdbd2cSJim Jagielski #endif
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski //---------------------------------------------
43*b1cdbd2cSJim Jagielski // A very simple wrapper for a window that does
44*b1cdbd2cSJim Jagielski // display DIBs.
45*b1cdbd2cSJim Jagielski // Maybe it would be better and more extensible
46*b1cdbd2cSJim Jagielski // to create another class that is responsible
47*b1cdbd2cSJim Jagielski // for rendering a specific image format into
48*b1cdbd2cSJim Jagielski // the area of the window, but for our purpose
49*b1cdbd2cSJim Jagielski // it's enough to go the simple way - KISS.
50*b1cdbd2cSJim Jagielski //---------------------------------------------
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski class CDIBPreview : public PreviewBase
53*b1cdbd2cSJim Jagielski {
54*b1cdbd2cSJim Jagielski public:
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski 	// ctor
57*b1cdbd2cSJim Jagielski 	CDIBPreview(HINSTANCE instance,HWND parent,sal_Bool bShowWindow = sal_False);
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski     // dtor
60*b1cdbd2cSJim Jagielski 	virtual ~CDIBPreview( );
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski 	// preview interface implementation
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL getTargetColorDepth()
65*b1cdbd2cSJim Jagielski 		throw (::com::sun::star::uno::RuntimeException);
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL getAvailableWidth()
68*b1cdbd2cSJim Jagielski 		throw (::com::sun::star::uno::RuntimeException);
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL getAvailableHeight()
71*b1cdbd2cSJim Jagielski 		throw (::com::sun::star::uno::RuntimeException);
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski     virtual void SAL_CALL setImage(sal_Int16 aImageFormat, const ::com::sun::star::uno::Any& aImage)
74*b1cdbd2cSJim Jagielski 		throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
75*b1cdbd2cSJim Jagielski 
76*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL setShowState(sal_Bool bShowState)
77*b1cdbd2cSJim Jagielski 		throw (::com::sun::star::uno::RuntimeException);
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski     virtual sal_Bool SAL_CALL getShowState()
80*b1cdbd2cSJim Jagielski 		throw (::com::sun::star::uno::RuntimeException);
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 	virtual HWND SAL_CALL getWindowHandle() const;
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski private:
85*b1cdbd2cSJim Jagielski 	virtual void SAL_CALL onPaint( HWND hWnd, HDC hDC );
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski     ATOM SAL_CALL RegisterDibPreviewWindowClass( );
88*b1cdbd2cSJim Jagielski     void SAL_CALL UnregisterDibPreviewWindowClass( );
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski     static LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski private:
93*b1cdbd2cSJim Jagielski 	HINSTANCE  m_Instance;
94*b1cdbd2cSJim Jagielski 	HWND	   m_Hwnd;
95*b1cdbd2cSJim Jagielski 	com::sun::star::uno::Sequence<sal_Int8> m_Image;
96*b1cdbd2cSJim Jagielski 	osl::Mutex	m_PaintLock;
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski     // the preview window class has to be registered only
99*b1cdbd2cSJim Jagielski     // once per process, so multiple instance of this class
100*b1cdbd2cSJim Jagielski     // share the registered window class
101*b1cdbd2cSJim Jagielski     static ATOM       s_ClassAtom;
102*b1cdbd2cSJim Jagielski     static osl::Mutex s_Mutex;
103*b1cdbd2cSJim Jagielski     static sal_Int32  s_RegisterDibPreviewWndCount;
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski // prevent copy and assignment
106*b1cdbd2cSJim Jagielski private:
107*b1cdbd2cSJim Jagielski     CDIBPreview(const CDIBPreview&);
108*b1cdbd2cSJim Jagielski     CDIBPreview& operator=(const CDIBPreview&);
109*b1cdbd2cSJim Jagielski };
110*b1cdbd2cSJim Jagielski 
111*b1cdbd2cSJim Jagielski 
112*b1cdbd2cSJim Jagielski #endif
113