2013-03-20 09:07:52 +02:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
|
|
/*
|
|
|
|
* This file is part of the LibreOffice project.
|
|
|
|
*
|
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
*
|
|
|
|
* This file incorporates work covered by the following license notice:
|
|
|
|
*
|
|
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
|
|
* with this work for additional information regarding copyright
|
|
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <premac.h>
|
2013-03-30 14:28:13 +02:00
|
|
|
#include <UIKit/UIKit.h>
|
2013-03-20 09:07:52 +02:00
|
|
|
#include <postmac.h>
|
|
|
|
|
2013-10-13 20:45:16 +03:00
|
|
|
#include <basebmp/scanlineformats.hxx>
|
|
|
|
|
2013-03-20 09:07:52 +02:00
|
|
|
#include "ios/iosinst.hxx"
|
|
|
|
#include "headless/svpdummies.hxx"
|
|
|
|
#include "generic/gendata.hxx"
|
2014-01-26 12:03:53 +02:00
|
|
|
#include "quartz/utils.h"
|
2014-08-18 08:50:54 +01:00
|
|
|
#include <vcl/layout.hxx>
|
2014-02-20 17:59:14 -08:00
|
|
|
#include <vcl/settings.hxx>
|
2013-03-20 09:07:52 +02:00
|
|
|
|
|
|
|
// Horrible hack
|
|
|
|
static int viewWidth = 1, viewHeight = 1;
|
|
|
|
|
|
|
|
class IosSalData : public SalGenericData
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
IosSalData( SalInstance *pInstance ) : SalGenericData( SAL_DATA_IOS, pInstance ) {}
|
|
|
|
virtual void ErrorTrapPush() {}
|
|
|
|
virtual bool ErrorTrapPop( bool ) { return false; }
|
|
|
|
};
|
|
|
|
|
|
|
|
void IosSalInstance::GetWorkArea( Rectangle& rRect )
|
|
|
|
{
|
|
|
|
rRect = Rectangle( Point( 0, 0 ),
|
|
|
|
Size( viewWidth, viewHeight ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Try too hard to get a frame, in the absence of anything better to do
|
|
|
|
*/
|
|
|
|
SalFrame *IosSalInstance::getFocusFrame() const
|
|
|
|
{
|
|
|
|
SalFrame *pFocus = SvpSalFrame::GetFocusFrame();
|
|
|
|
if (!pFocus) {
|
|
|
|
const std::list< SalFrame* >& rFrames( getFrames() );
|
|
|
|
for( std::list< SalFrame* >::const_iterator it = rFrames.begin(); it != rFrames.end(); ++it )
|
|
|
|
{
|
|
|
|
SvpSalFrame *pFrame = const_cast<SvpSalFrame*>(static_cast<const SvpSalFrame*>(*it));
|
|
|
|
if( pFrame->IsVisible() )
|
|
|
|
{
|
|
|
|
pFrame->GetFocus();
|
|
|
|
pFocus = pFrame;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return pFocus;
|
|
|
|
}
|
|
|
|
|
|
|
|
IosSalInstance *IosSalInstance::getInstance()
|
|
|
|
{
|
|
|
|
if (!ImplGetSVData())
|
|
|
|
return NULL;
|
|
|
|
IosSalData *pData = static_cast<IosSalData *>(ImplGetSVData()->mpSalData);
|
|
|
|
if (!pData)
|
|
|
|
return NULL;
|
|
|
|
return static_cast<IosSalInstance *>(pData->m_pInstance);
|
|
|
|
}
|
|
|
|
|
|
|
|
IosSalInstance::IosSalInstance( SalYieldMutex *pMutex )
|
|
|
|
: SvpSalInstance( pMutex )
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
IosSalInstance::~IosSalInstance()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2013-03-30 01:39:22 +02:00
|
|
|
#if 0
|
|
|
|
|
2015-01-01 16:49:23 +02:00
|
|
|
bool IosSalInstance::AnyInput( VclInputFlags nType )
|
2013-03-20 09:07:52 +02:00
|
|
|
{
|
2015-01-01 16:49:23 +02:00
|
|
|
if( nType & VclInputFlags::TIMER )
|
2013-03-20 09:07:52 +02:00
|
|
|
return CheckTimeout( false );
|
|
|
|
|
|
|
|
// Unfortunately there is no way to check for a specific type of
|
|
|
|
// input being queued. That information is too hidden, sigh.
|
|
|
|
return SvpSalInstance::s_pDefaultInstance->PostedEventsInQueue();
|
|
|
|
}
|
|
|
|
|
2013-03-30 01:39:22 +02:00
|
|
|
#endif
|
|
|
|
|
2013-03-20 09:07:52 +02:00
|
|
|
class IosSalSystem : public SvpSalSystem {
|
|
|
|
public:
|
|
|
|
IosSalSystem() : SvpSalSystem() {}
|
|
|
|
virtual ~IosSalSystem() {}
|
2013-04-07 12:06:47 +02:00
|
|
|
virtual int ShowNativeDialog( const OUString& rTitle,
|
|
|
|
const OUString& rMessage,
|
|
|
|
const std::list< OUString >& rButtons,
|
2013-03-20 09:07:52 +02:00
|
|
|
int nDefButton );
|
|
|
|
};
|
|
|
|
|
|
|
|
SalSystem *IosSalInstance::CreateSalSystem()
|
|
|
|
{
|
|
|
|
return new IosSalSystem();
|
|
|
|
}
|
|
|
|
|
|
|
|
class IosSalFrame : public SvpSalFrame
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
IosSalFrame( IosSalInstance *pInstance,
|
|
|
|
SalFrame *pParent,
|
|
|
|
sal_uLong nSalFrameStyle,
|
|
|
|
SystemParentData *pSysParent )
|
|
|
|
: SvpSalFrame( pInstance, pParent, nSalFrameStyle,
|
2013-12-11 18:11:22 +02:00
|
|
|
true, basebmp::FORMAT_THIRTYTWO_BIT_TC_MASK_RGBA,
|
2013-03-20 09:07:52 +02:00
|
|
|
pSysParent )
|
|
|
|
{
|
|
|
|
if (pParent == NULL && viewWidth > 1 && viewHeight > 1)
|
|
|
|
SetPosSize(0, 0, viewWidth, viewHeight, SAL_FRAME_POSSIZE_WIDTH | SAL_FRAME_POSSIZE_HEIGHT);
|
|
|
|
}
|
|
|
|
|
2014-04-22 14:37:13 +03:00
|
|
|
virtual void GetWorkArea( Rectangle& rRect ) SAL_OVERRIDE
|
2013-03-20 09:07:52 +02:00
|
|
|
{
|
|
|
|
IosSalInstance::getInstance()->GetWorkArea( rRect );
|
|
|
|
}
|
|
|
|
|
2014-04-22 14:37:13 +03:00
|
|
|
virtual void ShowFullScreen( bool, sal_Int32 ) SAL_OVERRIDE
|
2013-04-16 14:32:06 +02:00
|
|
|
{
|
|
|
|
SetPosSize( 0, 0, viewWidth, viewHeight,
|
|
|
|
SAL_FRAME_POSSIZE_WIDTH | SAL_FRAME_POSSIZE_HEIGHT );
|
|
|
|
}
|
|
|
|
|
2014-04-22 14:37:13 +03:00
|
|
|
virtual void UpdateSettings( AllSettings &rSettings ) SAL_OVERRIDE
|
2013-03-20 09:07:52 +02:00
|
|
|
{
|
|
|
|
// Clobber the UI fonts
|
2014-09-18 14:44:39 +02:00
|
|
|
vcl::Font aFont( OUString( "Helvetica" ), Size( 0, 14 ) );
|
2013-03-20 09:07:52 +02:00
|
|
|
|
|
|
|
StyleSettings aStyleSet = rSettings.GetStyleSettings();
|
|
|
|
aStyleSet.SetAppFont( aFont );
|
|
|
|
aStyleSet.SetHelpFont( aFont );
|
|
|
|
aStyleSet.SetMenuFont( aFont );
|
|
|
|
aStyleSet.SetToolFont( aFont );
|
|
|
|
aStyleSet.SetLabelFont( aFont );
|
|
|
|
aStyleSet.SetInfoFont( aFont );
|
|
|
|
aStyleSet.SetRadioCheckFont( aFont );
|
|
|
|
aStyleSet.SetPushButtonFont( aFont );
|
|
|
|
aStyleSet.SetFieldFont( aFont );
|
|
|
|
aStyleSet.SetIconFont( aFont );
|
|
|
|
aStyleSet.SetGroupFont( aFont );
|
|
|
|
|
|
|
|
rSettings.SetStyleSettings( aStyleSet );
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
SalFrame *IosSalInstance::CreateChildFrame( SystemParentData* pParent, sal_uLong nStyle )
|
|
|
|
{
|
|
|
|
return new IosSalFrame( this, NULL, nStyle, pParent );
|
|
|
|
}
|
|
|
|
|
|
|
|
SalFrame *IosSalInstance::CreateFrame( SalFrame* pParent, sal_uLong nStyle )
|
|
|
|
{
|
|
|
|
return new IosSalFrame( this, pParent, nStyle, NULL );
|
|
|
|
}
|
|
|
|
|
|
|
|
// All the interesting stuff is slaved from the IosSalInstance
|
|
|
|
void InitSalData() {}
|
|
|
|
void DeInitSalData() {}
|
|
|
|
void InitSalMain() {}
|
|
|
|
|
2013-03-24 00:22:15 +02:00
|
|
|
void SalAbort( const OUString& rErrorText, bool bDumpCore )
|
2013-03-20 09:07:52 +02:00
|
|
|
{
|
2013-03-24 00:22:15 +02:00
|
|
|
(void) bDumpCore;
|
|
|
|
|
|
|
|
NSLog(@"SalAbort: %s", OUStringToOString(rErrorText, osl_getThreadTextEncoding()).getStr() );
|
2013-03-20 09:07:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
const OUString& SalGetDesktopEnvironment()
|
|
|
|
{
|
2013-03-24 00:22:15 +02:00
|
|
|
static OUString aEnv( "iOS" );
|
2013-03-20 09:07:52 +02:00
|
|
|
return aEnv;
|
|
|
|
}
|
|
|
|
|
|
|
|
SalData::SalData() :
|
|
|
|
m_pInstance( 0 ),
|
iOS tiled rendering work
Possibly quite broken intermediate commit. But anyway, now it is
possible to render the tile diretly to a CGContext. Can be seen in
the MobileLibreOffice app when build in the Debug_tile_tester
configuration. See touch_lo_draw_tile() in viewsh.cxx. Unfortunately
the old plain LibreOffice test app is now broken, though, and
displays nothing at all.
This refactoring and hacking in vcl was done in a quite ugly fashion,
with ifdefs etc. But trust me, I did try, several times, for many
days, to get where I wanted in an elegant and clean fashion. But doing
it cleanly meant not being able to actually build it for days while
trying to figure ut which bits go where and which class should be
split into what base and derived class(es), and it was too much for my
limited brain capacity. I just couldn't juggle all the vcl class
structure in my head, especially as I don't have any good
understanding of the general design of it all.
Change-Id: Ia59d6a9cce15a63e63f94e8d8574bef21993fb1f
2013-12-09 21:53:23 +02:00
|
|
|
mpFontList( 0 ),
|
|
|
|
mxRGBSpace( CGColorSpaceCreateDeviceRGB() ),
|
|
|
|
mxGraySpace( CGColorSpaceCreateDeviceGray() )
|
2013-03-20 09:07:52 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
SalData::~SalData()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// This is our main entry point:
|
|
|
|
SalInstance *CreateSalInstance()
|
|
|
|
{
|
|
|
|
IosSalInstance* pInstance = new IosSalInstance( new SalYieldMutex() );
|
|
|
|
new IosSalData( pInstance );
|
|
|
|
pInstance->AcquireYieldMutex(1);
|
2014-04-07 12:38:27 +03:00
|
|
|
ImplGetSVData()->maWinData.mbNoSaveBackground = true;
|
2013-03-20 09:07:52 +02:00
|
|
|
return pInstance;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DestroySalInstance( SalInstance *pInst )
|
|
|
|
{
|
|
|
|
pInst->ReleaseYieldMutex();
|
|
|
|
delete pInst;
|
|
|
|
}
|
|
|
|
|
2013-04-07 12:06:47 +02:00
|
|
|
int IosSalSystem::ShowNativeDialog( const OUString& rTitle,
|
|
|
|
const OUString& rMessage,
|
|
|
|
const std::list< OUString >& rButtons,
|
2013-03-20 09:07:52 +02:00
|
|
|
int nDefButton )
|
|
|
|
{
|
|
|
|
(void)rButtons;
|
|
|
|
(void)nDefButton;
|
|
|
|
|
2014-01-26 12:03:53 +02:00
|
|
|
NSLog(@"%@: %@", CreateNSString(rTitle), CreateNSString(rMessage));
|
|
|
|
|
2013-03-20 09:07:52 +02:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|