GdkQuartzView.c 2.18 KB
Newer Older
Anders Carlsson's avatar
Anders Carlsson committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* GdkQuartzView.m
 *
 * Copyright (C) 2005 Imendio AB
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */


#import "GdkQuartzView.h"
#include "gdkwindow-quartz.h"
#include "gdkprivate-quartz.h"

@implementation GdkQuartzView

-(void)setGdkWindow:(GdkWindow *)window
{
  gdk_window = window;
}

-(GdkWindow *)gdkWindow
{
  return gdk_window;
}

-(BOOL)isFlipped
{
  return YES;
}

-(BOOL)isOpaque
{
  /* A view is opaque if its GdkWindow doesn't have the RGBA colormap */
  return gdk_drawable_get_colormap (gdk_window) != gdk_screen_get_rgba_colormap (_gdk_screen);
}

-(void)drawRect:(NSRect)rect 
{
  NSRect bounds = [self bounds];
  GdkRectangle gdk_rect;

  GDK_QUARTZ_ALLOC_POOL;

  /* Draw background */
  if (GDK_WINDOW_OBJECT (gdk_window)->bg_pixmap == NULL)
    {
      CGContextRef context;

      context = [[NSGraphicsContext currentContext] graphicsPort];
      CGContextSaveGState (context);

      _gdk_quartz_set_context_fill_color_from_pixel (context, gdk_drawable_get_colormap (gdk_window),
						    GDK_WINDOW_OBJECT (gdk_window)->bg_color.pixel);

      CGContextFillRect (context, CGRectMake (bounds.origin.x, bounds.origin.y,
					     bounds.size.width, bounds.size.height));
      CGContextRestoreGState (context);
    }

  gdk_rect.x = bounds.origin.x;
  gdk_rect.y = bounds.origin.y;
  gdk_rect.width = bounds.size.width;
  gdk_rect.height = bounds.size.height;
  
  gdk_window_invalidate_rect (gdk_window, &gdk_rect, FALSE);
  gdk_window_process_updates (gdk_window, FALSE);

  GDK_QUARTZ_RELEASE_POOL;
}

@end