summaryrefslogtreecommitdiff
path: root/vcl/ios/iosinst.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/ios/iosinst.cxx')
-rw-r--r--vcl/ios/iosinst.cxx78
1 files changed, 48 insertions, 30 deletions
diff --git a/vcl/ios/iosinst.cxx b/vcl/ios/iosinst.cxx
index 97159180d11f..b2c151654f55 100644
--- a/vcl/ios/iosinst.cxx
+++ b/vcl/ios/iosinst.cxx
@@ -87,13 +87,19 @@ IosSalInstance *IosSalInstance::getInstance()
IosSalInstance::IosSalInstance( SalYieldMutex *pMutex )
: SvpSalInstance( pMutex )
{
-
+ pthread_cond_init( &m_aRenderCond, NULL );
+ pthread_mutex_init( &m_aRenderMutex, NULL );
+ pthread_mutex_lock( &m_aRenderMutex );
}
IosSalInstance::~IosSalInstance()
{
+ pthread_cond_destroy( &m_aRenderCond );
+ pthread_mutex_destroy( &m_aRenderMutex );
}
+#if 0
+
bool IosSalInstance::AnyInput( sal_uInt16 nType )
{
if( (nType & VCL_INPUT_TIMER) != 0 )
@@ -104,6 +110,8 @@ bool IosSalInstance::AnyInput( sal_uInt16 nType )
return SvpSalInstance::s_pDefaultInstance->PostedEventsInQueue();
}
+#endif
+
class IosSalSystem : public SvpSalSystem {
public:
IosSalSystem() : SvpSalSystem() {}
@@ -254,38 +262,48 @@ void lo_set_view_size(int width, int height)
viewHeight = height;
}
-extern "C"
-void lo_render_windows( CGContextRef context, CGRect rect )
+IMPL_LINK( IosSalInstance, RenderWindows, RenderWindowsArg*, arg )
{
- if( IosSalInstance::getInstance() != NULL ) {
- int i = 0;
- std::list< SalFrame* >::const_iterator it;
- for( it = IosSalInstance::getInstance()->getFrames().begin(); it != IosSalInstance::getInstance()->getFrames().end(); i++, it++ ) {
- SvpSalFrame *pFrame = static_cast<SvpSalFrame *>(*it);
- SalFrameGeometry aGeom = pFrame->GetGeometry();
- CGRect bbox = CGRectMake( aGeom.nX, aGeom.nY, aGeom.nWidth, aGeom.nHeight );
- if ( pFrame->IsVisible() &&
- CGRectIntersectsRect( rect, bbox ) ) {
-
- const basebmp::BitmapDeviceSharedPtr aDevice = pFrame->getDevice();
- CGDataProviderRef provider =
- CGDataProviderCreateWithData( NULL,
- aDevice->getBuffer().get(),
- aDevice->getSize().getY() * aDevice->getScanlineStride(),
- NULL );
- CGImage *image =
- CGImageCreate( aDevice->getSize().getX(), aDevice->getSize().getY(),
- 8, 32, aDevice->getScanlineStride(),
- CGColorSpaceCreateDeviceRGB(),
- kCGImageAlphaNoneSkipLast,
- provider,
- NULL,
- false,
- kCGRenderingIntentDefault );
- CGContextDrawImage( context, bbox, image );
- }
+ int i = 0;
+ std::list< SalFrame* >::const_iterator it;
+ for( it = getFrames().begin(); it != getFrames().end(); i++, it++ ) {
+ SvpSalFrame *pFrame = static_cast<SvpSalFrame *>(*it);
+ SalFrameGeometry aGeom = pFrame->GetGeometry();
+ CGRect bbox = CGRectMake( aGeom.nX, aGeom.nY, aGeom.nWidth, aGeom.nHeight );
+ if ( pFrame->IsVisible() &&
+ CGRectIntersectsRect( arg->rect, bbox ) ) {
+
+ const basebmp::BitmapDeviceSharedPtr aDevice = pFrame->getDevice();
+ CGDataProviderRef provider =
+ CGDataProviderCreateWithData( NULL,
+ aDevice->getBuffer().get(),
+ aDevice->getSize().getY() * aDevice->getScanlineStride(),
+ NULL );
+ CGImage *image =
+ CGImageCreate( aDevice->getSize().getX(), aDevice->getSize().getY(),
+ 8, 32, aDevice->getScanlineStride(),
+ CGColorSpaceCreateDeviceRGB(),
+ kCGImageAlphaNoneSkipLast,
+ provider,
+ NULL,
+ false,
+ kCGRenderingIntentDefault );
+ CGContextDrawImage( arg->context, bbox, image );
}
}
+ pthread_cond_signal( &m_aRenderCond );
+ return 0;
+}
+
+extern "C"
+void lo_render_windows( CGContextRef context, CGRect rect )
+{
+ IosSalInstance *pInstance = IosSalInstance::getInstance();
+ if ( pInstance == NULL )
+ return;
+ IosSalInstance::RenderWindowsArg arg = { context, rect };
+ Application::PostUserEvent( LINK( pInstance, IosSalInstance, RenderWindows), &arg );
+ pthread_cond_wait( &pInstance->m_aRenderCond, &pInstance->m_aRenderMutex );
}
extern "C"