Files
libreoffice/canvas/source/vcl/bitmapbackbuffer.cxx
Kurt Zenker 847a872bcf CWS-TOOLING: integrate CWS vcl101
2009-04-30 16:05:34 +0200 pl  r271420 : #i95591# need a poll timer so XtTimers work properly
2009-04-30 11:25:52 +0200 hdu  r271406 : #i100929# avoid unneeded colormap reallocation
2009-04-30 11:21:16 +0200 hdu  r271405 : #i100929# use improved SetDrawable() also for salframe updates
2009-04-30 11:12:41 +0200 hdu  r271404 : i100929# invalidate cached renderpic also for changed vdev
2009-04-29 14:31:40 +0200 hdu  r271375 : i100929# use cached renderpic also for alpha-rect/bitmap drawing
2009-04-29 14:16:51 +0200 hdu  r271370 : i100929# notify only GtkSalFrame's valid X11SalFrames
2009-04-29 13:58:10 +0200 hdu  r271369 : i100929# notify GtkSalFrame's X11SalGraphics that their drawables will become obsolete
2009-04-29 13:53:48 +0200 hdu  r271367 : #i100929# release cached renderpic whenever the corresponding drawable changes
2009-04-28 11:56:07 +0200 pl  r271317 : fix a snafu
2009-04-27 16:52:29 +0200 hdu  r271293 : #i100000# WAE fix for debug=true compilation
2009-04-27 12:38:11 +0200 hdu  r271260 : #i101367# disable vdev mapmode when measuring pixel size
2009-04-27 12:28:37 +0200 hdu  r271259 : #i101367# speedup svclcanvas::CanvasBitmapHelper::getSize()
2009-04-23 15:11:25 +0200 hdu  r271175 : #i91685# ignore trailing space in last cell
2009-04-23 12:55:14 +0200 pl  r271156 : #i101032# check for empty bitmap
2009-04-23 11:04:50 +0200 pl  r271144 : #101184# add a paranoia check
2009-04-21 19:12:25 +0200 pl  r271055 : #i101184# add: recognize added/removed monitors in xinerama configuration for gtk plugin (thanks cmc)
2009-04-21 17:04:44 +0200 pl  r271046 : #i101089# remove unused method (thanks cmc)
2009-04-21 16:41:38 +0200 hdu  r271042 : #i99842# set text decoration color
2009-04-20 22:57:37 +0200 pl  r271015 : #i101063# fix warnings
2009-04-20 22:55:39 +0200 pl  r271014 : #i101063# fix warnings
2009-04-20 11:35:24 +0200 hdu  r270968 : #i1001102# remove dependency to psprint module
2009-04-20 11:31:08 +0200 hdu  r270967 : #i100929# keep cached render Picture in X11SalGraphics removes
2009-04-20 11:24:57 +0200 hdu  r270966 : #i100929# cache render Picture in X11SalGraphics
2009-04-18 14:53:22 +0200 hdu  r270959 : CWS-TOOLING: rebase CWS vcl101 to trunk@270723 (milestone: DEV300:m46)
2009-04-17 12:00:50 +0200 hdu  r270934 : #i100951# b2d-polygon clipping handles bezier-segments nowadays => performance opt possible
2009-04-17 11:50:49 +0200 hdu  r270933 : #i100922# count b2d-polypoly-points to avoid priority-queue reallocations
2009-04-17 11:07:03 +0200 hdu  r270930 : #i101145# match dpi-sanity check with gnome-UI (thanks Caolan!)
2009-04-17 10:44:41 +0200 hdu  r270929 : #i100603# dingbats-encoded PDF-builtin fonts are symbol fonts too
2009-04-17 10:36:10 +0200 hdu  r270928 : #i101145# check sanity of resolution reported by Xft-dpi (thanks CMC!)
2009-04-08 13:53:35 +0200 hdu  r270644 : #i100951# avoid expensive calls to basegfx::tools::clipPolygonOnRange() if possible
2009-04-08 13:19:26 +0200 hdu  r270637 : #i100922# prevent needless stl::priority_queue reallacations by reserving
2009-04-08 11:14:30 +0200 hdu  r270627 : #i100929# use X11SalGraphics::GetXRenderPicture() also for text drawing
2009-04-08 10:00:42 +0200 hdu  r270620 : #i100929# add and use X11SalGraphics::GetXRenderPicture() for polygon drawing
2009-04-06 15:52:47 +0200 hdu  r270563 : #i100885# add and use AquaSalGraphics::copyResolution() to speed up virdev creation
2009-04-02 14:39:06 +0200 pl  r270408 : #i95873# do not set LD_LIBRARY_PATH for external apps
2009-03-31 18:43:19 +0200 pl  r270292 : #i99783# transparency of closer image changed to mask in the meantime
2009-03-27 15:42:37 +0100 hdu  r270158 : #i100591# fix binary search in dingbats encoding converter
2009-03-27 13:06:34 +0100 hdu  r270151 : #i100603# only PDF builtin text fonts use WinAnsiEncoding
2009-03-27 12:05:35 +0100 hdu  r270147 : #i100603# use correct encoding for all PDF builtin fonts
2009-03-27 09:04:07 +0100 hdu  r270133 : #i100603# use proper encoding for PDF builtin symbol fonts
2009-03-26 17:19:38 +0100 hdu  r270090 : #i100591# support RTL_TEXTENCODING_ADOBE_DINGBATS encoding
2009-03-25 09:02:18 +0100 hdu  r269995 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading SAGE and extra USER32 symbols
2009-03-25 08:55:49 +0100 hdu  r269994 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading LUNA symbols
2009-03-24 16:15:54 +0100 hdu  r269965 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading vclplugin symbols
2009-03-24 16:10:29 +0100 hdu  r269963 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading USP symbols
2009-03-24 15:54:30 +0100 hdu  r269962 : #i100521# prefer osl_getAsciiFunctionSymbol() when dynloading xrender symbols
2009-03-24 10:46:55 +0100 hdu  r269920 : #i100506# fix WAE build breakers on unxsols4 for debug=true
2009-03-23 16:36:43 +0100 hdu  r269884 : #159477# fix crash for PDFs with big zlib-chunks
2009-03-20 17:36:56 +0100 pl  r269821 : #i96568# add recent files to mac quickstarter
2009-03-20 14:39:41 +0100 pl  r269809 : #i35482# no HC mode detection, automatically done in independent part
2009-03-19 20:01:37 +0100 pl  r269768 : #i95591# do not reuse UnxPloginComm because of connection loss problems
2009-03-19 18:08:23 +0100 pl  r269765 : #i95588# change default visibility that was ignored everywhere but unix anyway
2009-06-03 15:45:09 +00:00

169 lines
5.4 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: bitmapbackbuffer.cxx,v $
* $Revision: 1.9 $
*
* 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_canvas.hxx"
#include "bitmapbackbuffer.hxx"
#include <osl/mutex.hxx>
#include <vos/mutex.hxx>
#include <vcl/svapp.hxx>
#include <vcl/bitmapex.hxx>
#include <vcl/bmpacc.hxx>
namespace vclcanvas
{
BitmapBackBuffer::BitmapBackBuffer( const BitmapEx& rBitmap,
const OutputDevice& rRefDevice ) :
maBitmap( rBitmap ),
mpVDev( NULL ),
mrRefDevice( rRefDevice ),
mbBitmapContentIsCurrent( false ),
mbVDevContentIsCurrent( false )
{
}
BitmapBackBuffer::~BitmapBackBuffer()
{
// make sure solar mutex is held on deletion (other methods
// are supposed to be called with already locked solar mutex)
::vos::OGuard aGuard( Application::GetSolarMutex() );
if( mpVDev )
delete mpVDev;
}
OutputDevice& BitmapBackBuffer::getOutDev()
{
createVDev();
updateVDev();
return *mpVDev;
}
const OutputDevice& BitmapBackBuffer::getOutDev() const
{
createVDev();
updateVDev();
return *mpVDev;
}
void BitmapBackBuffer::clear()
{
// force current content to bitmap, make all transparent white
getBitmapReference().Erase(COL_TRANSPARENT);
}
BitmapEx& BitmapBackBuffer::getBitmapReference()
{
OSL_ENSURE( !mbBitmapContentIsCurrent || !mbVDevContentIsCurrent,
"BitmapBackBuffer::getBitmapReference(): Both bitmap and VDev are valid?!" );
if( mbVDevContentIsCurrent && mpVDev )
{
// VDev content is more current than bitmap - copy contents before!
mpVDev->EnableMapMode( FALSE );
const Point aEmptyPoint;
*maBitmap = mpVDev->GetBitmapEx( aEmptyPoint,
mpVDev->GetOutputSizePixel() );
}
// client queries bitmap, and will possibly alter content -
// next time, VDev needs to be updated
mbBitmapContentIsCurrent = true;
mbVDevContentIsCurrent = false;
return *maBitmap;
}
Size BitmapBackBuffer::getBitmapSizePixel() const
{
Size aSize = maBitmap->GetSizePixel();
if( mbVDevContentIsCurrent && mpVDev )
{
mpVDev->EnableMapMode( FALSE );
aSize = mpVDev->GetOutputSizePixel();
}
return aSize;
}
void BitmapBackBuffer::createVDev() const
{
if( !mpVDev )
{
// VDev not yet created, do it now. Create an alpha-VDev,
// if bitmap has transparency.
mpVDev = maBitmap->IsTransparent() ?
new VirtualDevice( mrRefDevice, 0, 0 ) :
new VirtualDevice( mrRefDevice );
OSL_ENSURE( mpVDev,
"BitmapBackBuffer::createVDev(): Unable to create VirtualDevice" );
mpVDev->SetOutputSizePixel( maBitmap->GetSizePixel() );
// #i95645#
#if defined( QUARTZ )
// use AA on VCLCanvas for Mac
mpVDev->SetAntialiasing( ANTIALIASING_ENABLE_B2DDRAW | mpVDev->GetAntialiasing() );
#else
// switch off AA for WIN32 and UNIX, the VCLCanvas does not look good with it and
// is not required to do AA. It would need to be adapted to use it correctly
// (especially gradient painting). This will need extra work.
mpVDev->SetAntialiasing(mpVDev->GetAntialiasing() & !ANTIALIASING_ENABLE_B2DDRAW);
#endif
}
}
void BitmapBackBuffer::updateVDev() const
{
OSL_ENSURE( !mbBitmapContentIsCurrent || !mbVDevContentIsCurrent,
"BitmapBackBuffer::updateVDev(): Both bitmap and VDev are valid?!" );
if( mpVDev && mbBitmapContentIsCurrent )
{
// fill with bitmap content
mpVDev->EnableMapMode( FALSE );
const Point aEmptyPoint;
mpVDev->DrawBitmapEx( aEmptyPoint, *maBitmap );
}
// canvas queried the VDev, and will possibly paint into
// it. Next time, bitmap must be updated
mbBitmapContentIsCurrent = false;
mbVDevContentIsCurrent = true;
}
}