- // We put everything that isn't in org.xwt.plat.Darwin in
- // org.xwt.plat.darwin to prevent namespace conflicts
-
- template <bool CHECK> static inline int CompileTimeCheck() { const int something_is_wrong=1; something_is_wrong++; return 0; }
- template <> static inline int CompileTimeCheck<true>() { return 0; }
- const static int unichar_check = CompileTimeCheck<sizeof(jchar)==sizeof(UniChar)>();
-
- void funcFailed(char *func,int r);
- static inline void checkStatus(OSStatus r, char *func) { if(r != noErr) funcFailed(func,r); }
- static inline void checkStatus(GLboolean b, char *func) { if(!b) funcFailed(func,-1); }
- static inline void checkStatus(void *p, char *func) { if(!p) funcFailed(func,-1); }
-
- jstring cfStringToJString(CFStringRef s) {
- CFIndex length = WC(CFStringGetLength)(s);
- CFRange range = CFRangeMake(0,length);
- jstring js = JvAllocString(length);
- UniChar *buf = (UniChar*)JvGetStringChars(js);
- WC(CFStringGetCharacters)(s,range,buf);
- return js;
- }
-
- #pragma mark ------ SmartCFString ------
- class SmartCFString {
- private:
- CFStringRef p;
- void release() { if(p) WC(CFRelease)(p); }
- void checkNull() { if(!p) throw new java::lang::Error(JvNewStringLatin1("CFString function failed")); }
- public:
- // Constructors
- SmartCFString() : p(0) { }
- SmartCFString(const char *s) : p(0) { *this = s; }
- SmartCFString(jstring js) : p(0) { *this = js; }
- SmartCFString(CFStringRef cf) : p(0) { *this = cf; }
- // Destructor
- ~SmartCFString() { release(); }
- // Assignment
- SmartCFString& operator= (const char *s) {
- release();
- if(!s) s = "(null)";
- p = WC(CFStringCreateWithCString)(WC(kCFAllocatorDefault),s,kCFStringEncodingISOLatin1);
- checkNull();
- return *this;
- }
- SmartCFString& operator= (jstring js) {
- if(!js) return *this = "(null)";
- release();
- UniChar *buf = (UniChar*) JvGetStringChars(js);
- CFIndex length = js->length();
- p = WC(CFStringCreateWithCharacters)(WC(kCFAllocatorDefault),buf,length);
- checkNull();
- return *this;
- }
- SmartCFString& operator= (CFStringRef cf) {
- if(cf == NULL) return *this = "(null)";
- release();
- p = cf;
- return *this;
- }
- operator CFStringRef() { return p; }
- operator jstring() { return getJString(); }
-
- jstring getJString() { return cfStringToJString(p); }
-
- bool equals(const char *s) {
- SmartCFString cfs(s);
- return equals(cfs);
- }
-
- bool equals(CFStringRef cfs) {
- return WC(CFStringCompare)(p,cfs,0) == kCFCompareEqualTo;
- }
- };
-
- // CHECKME: Is just making up your own four char codes really correct?
- const static UInt32 kEventClassCarbonMessage = 'xwta';
- const static UInt32 kEventCarbonMessage = 'xwtb';
- const static UInt32 kEventParamCarbonMessage = 'xwtc';
-
- OSStatus our_carbonMessageEventHandler(EventHandlerCallRef handler, EventRef e, void *userData);
- void fileDialogEventHandler(NavEventCallbackMessage callBackSelector, NavCBRecPtr callBackParms, void *userData);
+static inline void blit_lock() { if(pthread_mutex_lock(&blit_mutex) != 0) abort(); }
+static inline void blit_unlock() { if(pthread_mutex_unlock(&blit_mutex) != 0) abort(); }
+static inline void blit_wait() { if(pthread_cond_wait(&blit_cond,&blit_mutex) != 0) abort(); }
+static inline void blit_signal() { if(pthread_cond_signal(&blit_cond) != 0) abort(); }
+
+void Darwin$CarbonSurface::blitLock() { blit_lock(); }
+void Darwin$CarbonSurface::blitUnlock() { blit_unlock(); }
+void Darwin$CarbonSurface::blitWait() { blit_wait(); }
+
+
+template <bool CHECK> static inline int CompileTimeCheck() { const int something_is_wrong=1; something_is_wrong++; return 0; }
+template <> static inline int CompileTimeCheck<true>() { return 0; }
+const static int unichar_check = CompileTimeCheck<sizeof(jchar)==sizeof(UniChar)>();
+
+static void funcFailed(const char *func,int r);
+static inline void funcFailed(const char *func) { funcFailed(func,-1); }
+
+static inline void checkStatus(OSStatus r, char *func) { if(r != noErr) funcFailed(func,r); }
+static inline void checkStatus(GLboolean b, char *func) { if(!b) funcFailed(func,-1); }
+static inline void checkStatus(void *p, char *func) { if(!p) funcFailed(func,-1); }
+
+jstring cfStringToJString(CFStringRef s) {
+ CFIndex length = WC(CFStringGetLength)(s);
+ CFRange range = CFRangeMake(0,length);
+ jstring js = JvAllocString(length);
+ UniChar *buf = (UniChar*)JvGetStringChars(js);
+ WC(CFStringGetCharacters)(s,range,buf);
+ return js;
+}
+
+#pragma mark ------ SmartCFString ------
+class SmartCFString {
+ private:
+ CFStringRef p;
+ void release() { if(p) WC(CFRelease)(p); }
+ void checkNull() { if(!p) funcFailed("CFString function"); }
+ public:
+ // Constructors
+ SmartCFString() : p(0) { }
+ SmartCFString(const char *s) : p(0) { *this = s; }
+ SmartCFString(jstring js) : p(0) { *this = js; }
+ SmartCFString(CFStringRef cf) : p(0) { *this = cf; }
+ // Destructor
+ ~SmartCFString() { release(); }
+ // Assignment
+ SmartCFString& operator= (const char *s) {
+ release();
+ if(!s) s = "(null)";
+ p = WC(CFStringCreateWithCString)(WC(kCFAllocatorDefault),s,kCFStringEncodingISOLatin1);
+ checkNull();
+ return *this;
+ }
+ SmartCFString& operator= (jstring js) {
+ if(!js) return *this = "(null)";
+ release();
+ UniChar *buf = (UniChar*) JvGetStringChars(js);
+ CFIndex length = js->length();
+ p = WC(CFStringCreateWithCharacters)(WC(kCFAllocatorDefault),buf,length);
+ checkNull();
+ return *this;
+ }
+ SmartCFString& operator= (CFStringRef cf) {
+ if(cf == NULL) return *this = "(null)";
+ release();
+ p = cf;
+ return *this;
+ }
+ operator CFStringRef() { return p; }
+ operator jstring() { return getJString(); }
+
+ jstring getJString() { return cfStringToJString(p); }
+
+ bool equals(const char *s) {
+ SmartCFString cfs(s);
+ return equals(cfs);
+ }
+
+ bool equals(CFStringRef cfs) {
+ return WC(CFStringCompare)(p,cfs,0) == kCFCompareEqualTo;
+ }
+};
+
+// CHECKME: Is just making up your own four char codes really correct?
+const static UInt32 kEventClassCarbonMessage = 'xwta';
+const static UInt32 kEventCarbonMessage = 'xwtb';
+const static UInt32 kEventParamCarbonMessage = 'xwtc';
+
+static OSStatus carbonMessageEventHandler(EventHandlerCallRef handler, EventRef e, void *userData);
+static EventHandlerUPP carbonMessageEventHandlerUPP;