* ecore_cocoa: Improve Mac OS X support.

SVN revision: 43196
This commit is contained in:
Cedric BAIL 2009-10-22 11:08:01 +00:00
parent 6f4b45e296
commit 298147556b
5 changed files with 218 additions and 8 deletions

View File

@ -412,13 +412,6 @@ if test "x${have_iconv}" = "xno" ; then
])
fi
# force the iconv library on mac os x
case "$host_os" in
darwin*)
iconv_libs="/usr/lib/libiconv.la"
have_iconv="yes"
;;
esac
fi
AC_MSG_CHECKING(for explicit iconv link options)
AC_MSG_RESULT($iconv_libs)

View File

@ -23,6 +23,8 @@
extern "C" {
#endif
typedef struct _Ecore_Cocoa_Window Ecore_Cocoa_Window;
EAPI extern int ECORE_QUARTZ_EVENT_GOT_FOCUS;
EAPI extern int ECORE_QUARTZ_EVENT_LOST_FOCUS;
EAPI extern int ECORE_QUARTZ_EVENT_RESIZE;
@ -35,10 +37,99 @@ struct _Ecore_Quartz_Event_Video_Resize
int h;
};
/* Core */
EAPI int ecore_quartz_init(const char *name);
EAPI int ecore_quartz_shutdown(void);
EAPI void ecore_quartz_feed_events(void);
/* Window */
EAPI Ecore_Cocoa_Window *ecore_cocoa_window_new(int x,
int y,
int width,
int height);
EAPI void ecore_cocoa_window_free(Ecore_Cocoa_Window *window);
EAPI void *ecore_cocoa_window_hwnd_get(Ecore_Cocoa_Window *window);
EAPI void ecore_cocoa_window_move(Ecore_Cocoa_Window *window,
int x,
int y);
EAPI void ecore_cocoa_window_resize(Ecore_Cocoa_Window *window,
int width,
int height);
EAPI void ecore_cocoa_window_move_resize(Ecore_Cocoa_Window *window,
int x,
int y,
int width,
int height);
EAPI void ecore_cocoa_window_geometry_get(Ecore_Cocoa_Window *window,
int *x,
int *y,
int *width,
int *height);
EAPI void ecore_cocoa_window_size_get(Ecore_Cocoa_Window *window,
int *width,
int *height);
EAPI void ecore_cocoa_window_size_min_set(Ecore_Cocoa_Window *window,
unsigned int min_width,
unsigned int min_height);
EAPI void ecore_cocoa_window_size_min_get(Ecore_Cocoa_Window *window,
unsigned int *min_width,
unsigned int *min_height);
EAPI void ecore_cocoa_window_size_max_set(Ecore_Cocoa_Window *window,
unsigned int max_width,
unsigned int max_height);
EAPI void ecore_cocoa_window_size_max_get(Ecore_Cocoa_Window *window,
unsigned int *max_width,
unsigned int *max_height);
EAPI void ecore_cocoa_window_size_base_set(Ecore_Cocoa_Window *window,
unsigned int base_width,
unsigned int base_height);
EAPI void ecore_cocoa_window_size_base_get(Ecore_Cocoa_Window *window,
unsigned int *base_width,
unsigned int *base_height);
EAPI void ecore_cocoa_window_size_step_set(Ecore_Cocoa_Window *window,
unsigned int step_width,
unsigned int step_height);
EAPI void ecore_cocoa_window_size_step_get(Ecore_Cocoa_Window *window,
unsigned int *step_width,
unsigned int *step_height);
EAPI void ecore_cocoa_window_show(Ecore_Cocoa_Window *window);
EAPI void ecore_cocoa_window_hide(Ecore_Cocoa_Window *window);
EAPI void ecore_cocoa_window_raise(Ecore_Cocoa_Window *window);
EAPI void ecore_cocoa_window_lower(Ecore_Cocoa_Window *window);
EAPI void ecore_cocoa_window_title_set(Ecore_Cocoa_Window *window,
const char *title);
EAPI void ecore_cocoa_window_focus_set(Ecore_Cocoa_Window *window);
EAPI void ecore_cocoa_window_iconified_set(Ecore_Cocoa_Window *window,
int on);
EAPI void ecore_cocoa_window_borderless_set(Ecore_Cocoa_Window *window,
int on);
#ifdef __cplusplus
}
#endif

View File

@ -16,7 +16,8 @@ Ecore_Quartz.h \
Ecore_Quartz_Keys.h
libecore_quartz_la_SOURCES = \
ecore_quartz.m
ecore_quartz.m \
ecore_cocoa_window.m
libecore_quartz_la_LIBADD = \
$(top_builddir)/src/lib/ecore/libecore.la \
@ -27,3 +28,5 @@ $(top_builddir)/src/lib/ecore_input/libecore_input.la \
libecore_quartz_la_LDFLAGS = @quartz_ldflags@ -version-info @version_info@ @ecore_quartz_release_info@
endif
EXTRA_DIST = ecore_cocoa_private.h

View File

@ -0,0 +1,13 @@
#ifndef _ECORE_COCOA_PRIVATE_H
#define _ECORE_COCOA_PRIVATE_H
struct _Ecore_Cocoa_Window
{
NSWindow *window;
unsigned int borderless : 1;
};
#endif

View File

@ -0,0 +1,110 @@
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <Cocoa/Cocoa.h>
#include "Ecore_Quartz.h"
Ecore_Cocoa_Window *
ecore_cocoa_window_new(int x,
int y,
int width,
int height)
{
NSWindow *window;
window = [[NSWindow alloc]
initWithContentRect:NSMakeRect(x, y, width, height)
styleMask:(NSTitledWindowMask |
NSClosableWindowMask |
NSResizableWindowMask |
NSMiniaturizableWindowMask)
backing:NSBackingStoreBuffered
defer:NO
screen:nil
];
if (!window)
return NULL;
return window;
}
void
ecore_cocoa_window_free(Ecore_Cocoa_Window *window)
{
if (!window)
return;
[window release];
}
void
ecore_cocoa_window_move(Ecore_Cocoa_Window *window,
int x,
int y)
{
if (!window)
return;
}
void
ecore_cocoa_window_resize(Ecore_Cocoa_Window *window,
int width,
int height)
{
if (!window)
return;
[window setContentSize: NSMakeSize(width, height)];
}
void
ecore_cocoa_window_move_resize(Ecore_Cocoa_Window *window,
int x,
int y,
int width,
int height)
{
if (!window)
return;
}
void
ecore_cocoa_window_title_set(Ecore_Cocoa_Window *window, const char *title)
{
if (!window || !title)
return;
[window setTitle:[NSString stringWithUTF8String:title]];
}
void
ecore_cocoa_window_show(Ecore_Cocoa_Window *window)
{
if (!window || [window isVisible])
return;
[window orderFront:NSApp];
}
void
ecore_cocoa_window_hide(Ecore_Cocoa_Window *window)
{
if (!window || ![window isVisible])
return;
[window orderOut:NSApp];
}
void
ecore_cocoa_window_borderless_set(Ecore_Cocoa_Window *window,
int on)
{
if (!window)
return;
if (on)
[window setContentBorderThickness:0.0
forEdje:NSMinXEdge | NSMinYEdge | NSMaxXEdge | NSMaxYEdge];
}