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
169 lines
5.4 KiB
C++
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;
|
|
}
|
|
}
|
|
|