124 lines
2.8 KiB
Objective-C
124 lines
2.8 KiB
Objective-C
/*
|
|
* Copyright (c) 2011, 2012, Jonathan Schleifer <js@webkeks.org>
|
|
*
|
|
* https://webkeks.org/hg/objgui/
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice is present in all copies.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#import "OGWindow.h"
|
|
|
|
@interface OGWindow ()
|
|
- (BOOL)OG_willClose;
|
|
@end
|
|
|
|
static gboolean
|
|
willClose(GtkWidget *widget, GdkEvent *event, gpointer data)
|
|
{
|
|
return ([(OGWindow*)data OG_willClose] ? FALSE : TRUE);
|
|
}
|
|
|
|
@implementation OGWindow
|
|
@synthesize delegate;
|
|
|
|
+ window
|
|
{
|
|
return [[[self alloc] init] autorelease];
|
|
}
|
|
|
|
- init
|
|
{
|
|
self = [super init];
|
|
|
|
widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
|
g_signal_connect(G_OBJECT(widget), "delete-event",
|
|
G_CALLBACK(willClose), self);
|
|
|
|
g_signal_connect(G_OBJECT(widget), "destroy", G_CALLBACK(og_destroy),
|
|
self);
|
|
[self retain];
|
|
|
|
return self;
|
|
}
|
|
|
|
- (OFString*)title
|
|
{
|
|
return [OFString stringWithUTF8String:
|
|
gtk_window_get_title(GTK_WINDOW(widget))];
|
|
}
|
|
|
|
- (void)setTitle: (OFString*)title
|
|
{
|
|
gtk_window_set_title(GTK_WINDOW(widget), [title UTF8String]);
|
|
}
|
|
|
|
- (of_point_t)position
|
|
{
|
|
gint x, y;
|
|
|
|
gtk_window_get_position(GTK_WINDOW(widget), &x, &y);
|
|
|
|
return of_point(x, y);
|
|
}
|
|
|
|
- (void)setPosition: (of_point_t)position
|
|
{
|
|
gtk_window_move(GTK_WINDOW(widget), position.x, position.y);
|
|
}
|
|
|
|
- (of_dimension_t)dimension
|
|
{
|
|
gint width, height;
|
|
|
|
gtk_window_get_size(GTK_WINDOW(widget), &width, &height);
|
|
|
|
return of_dimension(width, height);
|
|
}
|
|
|
|
- (void)setDimension: (of_dimension_t)dimension
|
|
{
|
|
gtk_window_resize(GTK_WINDOW(widget),
|
|
dimension.width, dimension.height);
|
|
}
|
|
|
|
- (void)addChild: (OGWidget*)child
|
|
{
|
|
gtk_container_add(GTK_CONTAINER(widget), child->widget);
|
|
}
|
|
|
|
- (void)show
|
|
{
|
|
gtk_widget_show_all(widget);
|
|
}
|
|
|
|
- (void)hide
|
|
{
|
|
gtk_widget_hide(widget);
|
|
}
|
|
|
|
- (BOOL)OG_willClose
|
|
{
|
|
OFAutoreleasePool *pool = [OFAutoreleasePool new];
|
|
|
|
if ([delegate respondsToSelector: @selector(windowWillClose:)])
|
|
return [delegate windowWillClose: self];
|
|
|
|
[pool release];
|
|
|
|
return YES;
|
|
}
|
|
@end
|