blob: 93200fc96d6484a8ce44b5f2103981a64088bfd5 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _SV_SALDATA_HXX
#define _SV_SALDATA_HXX
#include "premac.h"
#include <Cocoa/Cocoa.h>
#include "postmac.h"
#include "com/sun/star/uno/Reference.hxx"
#include "vcl/ptrstyle.hxx"
#include "svdata.hxx"
#include "salwtype.hxx"
#include <list>
#include <vector>
#include <map>
#include <hash_set>
#include <cstdio>
#include <cstdarg>
#include "apple_remote/RemoteMainController.h"
class AquaSalInstance;
class SalObject;
class SalFrame;
class SalVirtualDevice;
class SalPrinter;
class SystemFontList;
// ------------------
// - Some constants -
// ------------------
#define SAL_CLIPRECT_COUNT 16
#define OSX_VER_TIGER 0x1040
#define OSX_VER_LEOPARD 0x1050
#define OSX_VER_SNOW_LEO 0x1060
#define OSX_VER_LION 0x1070
#define OSX_VER_MOUNTLION 0x1080
#define OSX_VER_MAVERICKS 0x1070
// -----------
// - SalData -
// -----------
class AquaSalFrame;
struct FrameHash : public std::hash<sal_IntPtr>
{
size_t operator()(const AquaSalFrame* frame) const
{ return std::hash<sal_IntPtr>::operator()( reinterpret_cast<const sal_IntPtr>(frame) ); }
};
#define INVALID_CURSOR_PTR (NSCursor*)0xdeadbeef
struct SalData
{
SALTIMERPROC mpTimerProc; // timer callback proc
AquaSalInstance *mpFirstInstance; // pointer of first instance
std::list<AquaSalFrame*> maFrames; // list of all frames
std::hash_set<const AquaSalFrame*,FrameHash> maFrameCheck; // for fast check of frame existance
std::list<AquaSalFrame*> maPresentationFrames; // list of frames in presentation mode
SalObject *mpFirstObject; // pointer of first object window
SalVirtualDevice *mpFirstVD; // first VirDev
SalPrinter *mpFirstPrinter; // first printing printer
SystemFontList *mpFontList;
NSStatusItem* mpStatusItem; // one status item that draws all our stati
// at the moment this is only one add menu button
CGColorSpaceRef mxRGBSpace;
CGColorSpaceRef mxGraySpace;
CGColorSpaceRef mxP50Space;
CGPatternRef mxP50Pattern;
std::vector< NSCursor* > maCursors;
std::vector< NSMenuItem* > maFallbackMenu;
std::map< NSEvent*, bool > maKeyEventAnswer;
static oslThreadKey s_aAutoReleaseKey;
bool mbIsScrollbarDoubleMax; // TODO: support DoubleMin and DoubleBoth too
SInt32 mnSystemVersion; // Store System Version
AppleRemoteMainController* mpAppleRemoteMainController;
NSObject* mpDockIconClickHandler;
long mnDPIX; // #i100617# read DPI only once per office life
long mnDPIY; // #i100617# read DPI only once per office life
com::sun::star::uno::Reference< com::sun::star::uno::XInterface >
mxClipboard;
SalData();
~SalData();
NSCursor* getCursor( PointerStyle i_eStyle );
static void ensureThreadAutoreleasePool();
static void drainThreadAutoreleasePool();
static NSStatusItem* getStatusItem();
};
inline void SetSalData( SalData* pData ) { ImplGetSVData()->mpSalData = (void*)pData; }
inline SalData *GetSalData() { return (SalData*)ImplGetSVData()->mpSalData; }
inline SalData *GetAppSalData() { return (SalData*)ImplGetAppSVData()->mpSalData; }
// --- Prototypes ---
sal_Bool ImplSalYieldMutexTryToAcquire();
void ImplSalYieldMutexAcquire();
void ImplSalYieldMutexRelease();
#endif // _SV_SALDATA_HXX