summaryrefslogtreecommitdiff
path: root/fpicker/source/win32/filepicker/dibpreview.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'fpicker/source/win32/filepicker/dibpreview.cxx')
-rw-r--r--fpicker/source/win32/filepicker/dibpreview.cxx471
1 files changed, 0 insertions, 471 deletions
diff --git a/fpicker/source/win32/filepicker/dibpreview.cxx b/fpicker/source/win32/filepicker/dibpreview.cxx
deleted file mode 100644
index 4f7ebe81c0..0000000000
--- a/fpicker/source/win32/filepicker/dibpreview.cxx
+++ /dev/null
@@ -1,471 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_fpicker.hxx"
-
-//------------------------------------------------------------------------
-// includes
-//------------------------------------------------------------------------
-
-#include <tchar.h>
-#include "dibpreview.hxx"
-#include <osl/diagnose.h>
-
-#include <com/sun/star/ui/dialogs/FilePreviewImageFormats.hpp>
-
-#include <rtl/ustring.hxx>
-
-#include <stdexcept>
-#include <string>
-
-//------------------------------------------------------------------------
-//
-//------------------------------------------------------------------------
-
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::uno::RuntimeException;
-using ::com::sun::star::uno::Any;
-using ::com::sun::star::lang::IllegalArgumentException;
-using rtl::OUString;
-
-//------------------------------------------------------------------------
-//
-//------------------------------------------------------------------------
-
-namespace /* private */
-{
- const LPTSTR CURRENT_INSTANCE = TEXT("CurrInst");
-};
-
-//------------------------------------------------------------------------
-// defines
-//------------------------------------------------------------------------
-
-#define PREVIEWWND_CLASS_NAME TEXT("DIBPreviewWnd###")
-
-// means 3 pixel left and 3 pixel right
-#define HORZ_BODER_SPACE 6
-
-// means 3 pixel top and 3 pixel bottom
-#define VERT_BORDER_SPACE 6
-
-//---------------------------------------------------
-// static member initialization
-//---------------------------------------------------
-
-osl::Mutex CDIBPreview::s_Mutex;
-ATOM CDIBPreview::s_ClassAtom = 0;
-sal_Int32 CDIBPreview::s_RegisterDibPreviewWndCount = 0;
-
-//---------------------------------------------------
-//
-//---------------------------------------------------
-
-CDIBPreview::CDIBPreview(HINSTANCE instance,HWND parent,sal_Bool bShowWindow) :
- m_Instance(instance)
-{
- RegisterDibPreviewWindowClass();
-
- DWORD dwStyle = WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
-
- if (bShowWindow)
- dwStyle |= WS_VISIBLE;
-
- m_Hwnd = CreateWindowEx(
- WS_EX_CLIENTEDGE,
- PREVIEWWND_CLASS_NAME,
- TEXT(""),
- dwStyle,
- 0, 0, 0, 0,
- parent,
- (HMENU)0x0, // for child windows this will
- // be used as child window identifier
- m_Instance,
- (LPVOID)this // pass a pointer to the current
- // instance of this class
- );
-
- bool bSuccess = IsWindow(m_Hwnd);
-
- OSL_POSTCOND(bSuccess,"Coud not create preview window");
-
- if (!bSuccess)
- {
- UnregisterDibPreviewWindowClass();
- throw std::runtime_error("Could not create preview window");
- }
-}
-
-//---------------------------------------------------
-//
-//---------------------------------------------------
-
-CDIBPreview::~CDIBPreview( )
-{
- // remember: we don't have to destroy the
- // preview window because it will be destroyed
- // by it's parent window (the FileOpen dialog)
- // but we have to unregister the window class
- //if ( m_bWndClassRegistered )
- UnregisterDibPreviewWindowClass();
-}
-
-//-------------------------------
-//
-//-------------------------------
-
-sal_Int32 SAL_CALL CDIBPreview::getTargetColorDepth() throw (RuntimeException)
-{
- HDC hdc = GetDC(m_Hwnd);
- int clrRes = 0;
-
- if (hdc)
- clrRes = GetDeviceCaps(hdc, COLORRES);
-
- return clrRes;
-}
-
-//-------------------------------
-//
-//-------------------------------
-
-sal_Int32 SAL_CALL CDIBPreview::getAvailableWidth() throw (RuntimeException)
-{
- RECT rect;
- bool bRet = GetClientRect(m_Hwnd,&rect);
-
- sal_Int32 cx = 0;
-
- if ( bRet )
- cx = rect.right;
-
- return cx;
-}
-
-//-------------------------------
-//
-//-------------------------------
-
-sal_Int32 SAL_CALL CDIBPreview::getAvailableHeight() throw (RuntimeException)
-{
- RECT rect;
- bool bRet = GetClientRect(m_Hwnd,&rect);
-
- sal_Int32 cy = 0;
-
- if ( bRet )
- cy = rect.bottom;
-
- return cy;
-}
-
-//-------------------------------
-//
-//-------------------------------
-
-void SAL_CALL CDIBPreview::setImage(sal_Int16 aImageFormat, const Any& aImage)
- throw (IllegalArgumentException, RuntimeException)
-{
- PreviewBase::setImage(aImageFormat,aImage);
-
- // if the any has no value we have an
- // empty Sequence which clears the
- // preview window
- osl::ClearableMutexGuard aGuard(m_PaintLock);
-
- m_Image.realloc(0);
- m_ImageData >>= m_Image;
-
- aGuard.clear();
-
- InvalidateRect(m_Hwnd,NULL,sal_False);
- UpdateWindow(m_Hwnd);
-}
-
-//-------------------------------
-//
-//-------------------------------
-
-sal_Bool SAL_CALL CDIBPreview::setShowState(sal_Bool bShowState) throw (RuntimeException)
-{
- PreviewBase::setShowState(bShowState);
- ShowWindow(m_Hwnd, m_bShowState ? SW_SHOW : SW_HIDE);
- return sal_True;
-}
-
-//-------------------------------
-//
-//-------------------------------
-
-sal_Bool SAL_CALL CDIBPreview::getShowState() throw (RuntimeException)
-{
- return (sal_Bool)IsWindowVisible(m_Hwnd);
-}
-
-//-------------------------------
-//
-//-------------------------------
-
-HWND SAL_CALL CDIBPreview::getWindowHandle() const
-{
- return m_Hwnd;
-}
-
-//---------------------------------------------------
-//
-//---------------------------------------------------
-
-void SAL_CALL CDIBPreview::onPaint(HWND hWnd, HDC hDC)
-{
- BITMAPFILEHEADER* pbmfh;
- BITMAPINFO * pbmi;
- sal_uInt8 * pBits;
- int cxDib;
- int cyDib;
-
- osl::MutexGuard aGuard(m_PaintLock);
-
- try
- {
- pbmfh = reinterpret_cast<BITMAPFILEHEADER*>(m_Image.getArray());
-
- if ( !IsBadReadPtr( pbmfh, sizeof(BITMAPFILEHEADER)) &&
- (pbmfh->bfType == ('B' | ('M' << 8))) )
- {
- pbmi = reinterpret_cast<BITMAPINFO*>((pbmfh + 1));
- pBits = reinterpret_cast<sal_uInt8*>(((DWORD)pbmfh) + pbmfh->bfOffBits);
-
- cxDib = pbmi->bmiHeader.biWidth;
- cyDib = abs (pbmi->bmiHeader.biHeight);
-
- SetStretchBltMode(hDC, COLORONCOLOR);
-
- int nWidth = getAvailableWidth();
- int nHeight = getAvailableHeight();
-
- int nX = abs(nWidth - cxDib) / 2;
- int nY = abs(nHeight - cyDib) / 2;
-
- int GDIError = GDI_ERROR;
- GDIError = StretchDIBits(
- hDC, nX, nY, cxDib, cyDib,
- 0, 0, cxDib, cyDib, pBits, pbmi,
- DIB_RGB_COLORS, SRCCOPY);
-
- OSL_ASSERT(GDI_ERROR != GDIError);
-
- // paint the border
- RECT rc;
-
- if (nY > 0)
- {
- // top
- rc.left = 0;
- rc.top = 0;
- rc.right = nWidth;
- rc.bottom = nY;
- FillRect(hDC,&rc,(HBRUSH)(COLOR_INACTIVEBORDER + 1));
-
- // bottom
- rc.left = 0;
- rc.top = nHeight - nY - 1;
- rc.right = nWidth;
- rc.bottom = nHeight;
- FillRect(hDC,&rc,(HBRUSH)(COLOR_INACTIVEBORDER + 1));
- }
-
- if (nX > 0)
- {
- // left
- rc.left = 0;
- rc.top = nY;
- rc.right = nX;
- rc.bottom = nHeight - nY;
- FillRect(hDC,&rc,(HBRUSH)(COLOR_INACTIVEBORDER + 1));
-
- // right
- rc.left = nWidth - nX - 1;
- rc.top = nY;
- rc.right = nWidth;
- rc.bottom = nHeight - nY;
- FillRect(hDC,&rc,(HBRUSH)(COLOR_INACTIVEBORDER + 1));
- }
- }
- else // clear background
- {
- RECT rc;
- GetClientRect(hWnd,&rc);
- FillRect(hDC,&rc,(HBRUSH)(COLOR_INACTIVEBORDER + 1));
- }
- }
- catch(...)
- {
- OSL_ASSERT(sal_False);
- }
-}
-
-//---------------------------------------------------
-//
-//---------------------------------------------------
-
-LRESULT CALLBACK CDIBPreview::WndProc(
- HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- LRESULT lResult = 0;
-
- switch(uMsg)
- {
-
- // we connect a pointer to the current instance
- // with a window instance via SetProp
- case WM_CREATE:
- {
- LPCREATESTRUCT lpcs =
- reinterpret_cast< LPCREATESTRUCT >(lParam);
-
- OSL_ASSERT(lpcs->lpCreateParams);
-
- // connect the instance handle to the window
- SetProp(hWnd, CURRENT_INSTANCE, lpcs->lpCreateParams);
- }
- break;
-
- // we remove the window property which connects
- // a class instance with a window class
- case WM_NCDESTROY:
- {
- // RemoveProp returns the saved value on success
- if (reinterpret_cast<CDIBPreview*>(
- RemoveProp(hWnd, CURRENT_INSTANCE)) == NULL)
- {
- OSL_ASSERT(false);
- }
- }
- break;
-
- case WM_PAINT:
- {
- CDIBPreview* pImpl = reinterpret_cast<CDIBPreview*>(
- GetProp(hWnd, CURRENT_INSTANCE));
-
- OSL_ASSERT(pImpl);
-
- HDC hDC;
- PAINTSTRUCT ps;
-
- hDC = BeginPaint(hWnd,&ps);
- pImpl->onPaint(hWnd,hDC);
- EndPaint(hWnd,&ps);
- }
- break;
-
- // ignore this message in order to
- // avoid flickering during paint
- case WM_ERASEBKGND:
- lResult = 1;
- break;
-
- default:
- return DefWindowProc(hWnd, uMsg, wParam, lParam);
- }
-
- return lResult;
-}
-
-//---------------------------------------------------
-//
-//---------------------------------------------------
-
-ATOM SAL_CALL CDIBPreview::RegisterDibPreviewWindowClass()
-{
- osl::MutexGuard aGuard( s_Mutex );
-
- if (0 == s_ClassAtom)
- {
- // register the preview window class
- WNDCLASSEX wndClsEx;
- ZeroMemory(&wndClsEx, sizeof(wndClsEx));
-
- wndClsEx.cbSize = sizeof(wndClsEx);
- wndClsEx.style = CS_HREDRAW | CS_VREDRAW;
- wndClsEx.lpfnWndProc = CDIBPreview::WndProc;
- wndClsEx.hInstance = m_Instance;
- wndClsEx.hbrBackground = (HBRUSH)(COLOR_INACTIVEBORDER + 1);
- wndClsEx.lpszClassName = PREVIEWWND_CLASS_NAME;
-
- // register the preview window class
- // !!! Win95 - the window class will be unregistered automaticly
- // if the dll is unloaded
- // Win2000 - the window class must be unregistered manually
- // if the dll is unloaded
- s_ClassAtom = RegisterClassEx(&wndClsEx);
-
- OSL_POSTCOND(s_ClassAtom,"Could not register preview window class");
-
- if (0 == s_ClassAtom)
- throw std::runtime_error("Preview window class could not be registered");
- }
-
- // increment the register class counter
- // so that we keep track of the number
- // of class registrations
- //if ( 0 != s_ClassAtom )
- s_RegisterDibPreviewWndCount++;
-
- return s_ClassAtom;
-}
-
-//---------------------------------------------------
-//
-//---------------------------------------------------
-
-void SAL_CALL CDIBPreview::UnregisterDibPreviewWindowClass()
-{
- osl::MutexGuard aGuard( s_Mutex );
-
- OSL_ASSERT( ( (0 != s_ClassAtom) && (s_RegisterDibPreviewWndCount > 0)) ||
- ( (0 == s_ClassAtom) && (0 == s_RegisterDibPreviewWndCount) ) );
-
- // update the register class counter
- // and unregister the window class if
- // counter drops to zero
- if (0 != s_ClassAtom)
- {
- s_RegisterDibPreviewWndCount--;
- OSL_ASSERT(s_RegisterDibPreviewWndCount >= 0);
- }
-
- if (0 == s_RegisterDibPreviewWndCount)
- {
- UnregisterClass((LPCTSTR)MAKELONG(s_ClassAtom,0),m_Instance);
- s_ClassAtom = 0;
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */