changeset 80515:40c9fd5e0c63

(mac_draw_image_string_atsui) [MAC_OSX]: Use CGFloat instead of float. (mac_draw_image_string_cg) [USE_CG_TEXT_DRAWING]: Likewise. (init_cg_color, mac_draw_line, mac_draw_cg_image, XSetForeground) (XSetBackground) [USE_CG_DRAWING]: Likewise. (mac_draw_image_string_atsui) [MAC_OSX]: Use mac_rect_make instead of CGRectMake. (mac_draw_image_string_cg) [USE_CG_TEXT_DRAWING]: Likewise. (mac_erase_rectangle, mac_draw_cg_image, mac_fill_rectangle) (mac_set_clip_rectangles) [USE_CG_DRAWING]: Likewise. (XCreatePixmap, XCreatePixmapFromBitmapData): Use Window instead of WindowRef in argument type. (XCreatePixmap) [!MAC_OS8]: Don't call SetPortWindowPort. (mac_invert_rectangle): Use CGContextSetBlendMode if available. (mac_set_clip_rectangles, mac_reset_clip_rectangles): Take argument F instead of DISPLAY. All uses changed. (mac_handle_size_change): Don't call SET_FRAME_GARBAGED. (x_calc_absolute_position): Simplify so as not to use FRAME_PIXEL_WIDTH/FRAME_PIXEL_HEIGHT. (Vmac_ts_script_language_on_focus, saved_ts_script_language_on_focus) [USE_MAC_TSM]: Make variables static. (mac_store_event_ref_as_apple_event) [TARGET_API_MAC_CARBON]: Don't use create_apple_event_from_event_ref. Use mac_event_parameters_to_lisp.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 19 Apr 2008 01:25:06 +0000
parents fbe5484e7555
children 9b6c288d125e
files src/macterm.c
diffstat 1 files changed, 95 insertions(+), 74 deletions(-) [+]
line wrap: on
line diff
--- a/src/macterm.c	Sat Apr 19 01:24:57 2008 +0000
+++ b/src/macterm.c	Sat Apr 19 01:25:06 2008 +0000
@@ -332,7 +332,7 @@
   if (CGColorGetTypeID != NULL)
 #endif
     {
-      float rgba[] = {0.0f, 0.0f, 0.0f, 1.0f};
+      CGFloat rgba[] = {0.0f, 0.0f, 0.0f, 1.0f};
 
       mac_cg_color_black = CGColorCreate (mac_cg_color_space_rgb, rgba);
     }
@@ -352,7 +352,7 @@
 {
 #if USE_CG_DRAWING
   CGContextRef context;
-  float gx1 = x1, gy1 = y1, gx2 = x2, gy2 = y2;
+  CGFloat gx1 = x1, gy1 = y1, gx2 = x2, gy2 = y2;
 
   if (y1 != y2)
     gx1 += 0.5f, gx2 += 0.5f;
@@ -445,7 +445,7 @@
 
       context = mac_begin_cg_clip (f, gc);
       CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
-      CGContextFillRect (context, CGRectMake (x, y, width, height));
+      CGContextFillRect (context, mac_rect_make (f, x, y, width, height));
       mac_end_cg_clip (f);
     }
 #else
@@ -523,8 +523,8 @@
      int dest_x, dest_y, overlay_p;
 {
   CGContextRef context;
-  float port_height = FRAME_PIXEL_HEIGHT (f);
-  CGRect dest_rect = CGRectMake (dest_x, dest_y, width, height);
+  CGFloat port_height = FRAME_PIXEL_HEIGHT (f);
+  CGRect dest_rect = mac_rect_make (f, dest_x, dest_y, width, height);
 
   context = mac_begin_cg_clip (f, gc);
   if (!overlay_p)
@@ -538,11 +538,11 @@
   if (CGImageIsMask (image))
     CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc);
   CGContextDrawImage (context,
-		      CGRectMake (dest_x - src_x,
-				  port_height - (dest_y - src_y
-						 + CGImageGetHeight (image)),
-				  CGImageGetWidth (image),
-				  CGImageGetHeight (image)),
+		      mac_rect_make (f, dest_x - src_x,
+				     port_height - (dest_y - src_y
+						    + CGImageGetHeight (image)),
+				     CGImageGetWidth (image),
+				     CGImageGetHeight (image)),
 		      image);
   mac_end_cg_clip (f);
 }
@@ -635,7 +635,7 @@
 Pixmap
 XCreatePixmap (display, w, width, height, depth)
      Display *display;
-     WindowRef w;
+     Window w;
      unsigned int width, height;
      unsigned int depth;
 {
@@ -643,8 +643,9 @@
   Rect r;
   QDErr err;
 
+#ifdef MAC_OS8
   SetPortWindowPort (w);
-
+#endif
   SetRect (&r, 0, 0, width, height);
 #if !defined (WORDS_BIG_ENDIAN) && USE_CG_DRAWING
   if (depth == 1)
@@ -664,7 +665,7 @@
 Pixmap
 XCreatePixmapFromBitmapData (display, w, data, width, height, fg, bg, depth)
      Display *display;
-     WindowRef w;
+     Window w;
      char *data;
      unsigned int width, height;
      unsigned long fg, bg;
@@ -729,7 +730,7 @@
 
   context = mac_begin_cg_clip (f, gc);
   CG_SET_FILL_COLOR_WITH_GC_FOREGROUND (context, gc);
-  CGContextFillRect (context, CGRectMake (x, y, width, height));
+  CGContextFillRect (context, mac_rect_make (f, x, y, width, height));
   mac_end_cg_clip (f);
 #else
   Rect r;
@@ -778,12 +779,33 @@
      int x, y;
      unsigned int width, height;
 {
-  Rect r;
-
-  mac_begin_clip (f, NULL);
-  SetRect (&r, x, y, x + width, y + height);
-  InvertRect (&r);
-  mac_end_clip (f, NULL);
+#if USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1040
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020
+  if (CGContextSetBlendMode != NULL)
+#endif
+    {
+      CGContextRef context;
+
+      context = mac_begin_cg_clip (f, NULL);
+      CGContextSetRGBFillColor (context, 1.0f, 1.0f, 1.0f, 1.0f);
+      CGContextSetBlendMode (context, kCGBlendModeDifference);
+      CGContextFillRect (context, mac_rect_make (f, x, y, width, height));
+      mac_end_cg_clip (f);
+    }
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020
+  else				/* CGContextSetBlendMode == NULL */
+#endif
+#endif	/* USE_CG_DRAWING && MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 */
+#if !USE_CG_DRAWING || MAC_OS_X_VERSION_MAX_ALLOWED < 1040 || (MAC_OS_X_VERSION_MIN_REQUIRED < 1040 && MAC_OS_X_VERSION_MIN_REQUIRED >= 1020)
+    {
+      Rect r;
+
+      mac_begin_clip (f, NULL);
+      SetRect (&r, x, y, x + width, y + height);
+      InvertRect (&r);
+      mac_end_clip (f, NULL);
+    }
+#endif
 }
 
 
@@ -905,7 +927,7 @@
   else
     {
       static CGContextRef context;
-      float port_height = FRAME_PIXEL_HEIGHT (f);
+      CGFloat port_height = FRAME_PIXEL_HEIGHT (f);
       static const ATSUAttributeTag tags[] = {kATSUCGContextTag};
       static const ByteCount sizes[] = {sizeof (CGContextRef)};
       static const ATSUAttributeValuePtr values[] = {&context};
@@ -929,9 +951,10 @@
 	    {
 	      CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
 	      CGContextFillRect	(context,
-				 CGRectMake (x, y - FONT_BASE (GC_FONT (gc)),
-					     bg_width,
-					     FONT_HEIGHT (GC_FONT (gc))));
+				 mac_rect_make (f,
+						x, y - FONT_BASE (GC_FONT (gc)),
+						bg_width,
+						FONT_HEIGHT (GC_FONT (gc))));
 	    }
 	  CGContextScaleCTM (context, 1, -1);
 	  CGContextTranslateCTM (context, 0, -port_height);
@@ -1275,7 +1298,7 @@
      XChar2b *buf;
      int nchars, bg_width, overstrike_p;
 {
-  float port_height, gx, gy;
+  CGFloat port_height, gx, gy;
   int i;
   CGContextRef context;
   CGGlyph *glyphs;
@@ -1317,8 +1340,8 @@
 	  CG_SET_FILL_COLOR_WITH_GC_BACKGROUND (context, gc);
 	  CGContextFillRect
 	    (context,
-	     CGRectMake (gx, y - FONT_BASE (GC_FONT (gc)),
-			 bg_width, FONT_HEIGHT (GC_FONT (gc))));
+	     mac_rect_make (f, gx, y - FONT_BASE (GC_FONT (gc)),
+			    bg_width, FONT_HEIGHT (GC_FONT (gc))));
 	}
       CGContextScaleCTM (context, 1, -1);
       CGContextTranslateCTM (context, 0, -port_height);
@@ -1613,7 +1636,7 @@
 	    }
 	  else
 	    {
-	      float rgba[4];
+	      CGFloat rgba[4];
 
 	      rgba[0] = gc->fore_color.red / 65535.0f;
 	      rgba[1] = gc->fore_color.green / 65535.0f;
@@ -1654,7 +1677,7 @@
 	    }
 	  else
 	    {
-	      float rgba[4];
+	      CGFloat rgba[4];
 
 	      rgba[0] = gc->back_color.red / 65535.0f;
 	      rgba[1] = gc->back_color.green / 65535.0f;
@@ -1683,8 +1706,8 @@
 /* Mac replacement for XSetClipRectangles.  */
 
 static void
-mac_set_clip_rectangles (display, gc, rectangles, n)
-     Display *display;
+mac_set_clip_rectangles (f, gc, rectangles, n)
+     struct frame *f;
      GC gc;
      Rect *rectangles;
      int n;
@@ -1716,9 +1739,9 @@
     {
       Rect *rect = rectangles + i;
 
-      gc->clip_rects[i] = CGRectMake (rect->left, rect->top,
-				      rect->right - rect->left,
-				      rect->bottom - rect->top);
+      gc->clip_rects[i] = mac_rect_make (f, rect->left, rect->top,
+					 rect->right - rect->left,
+					 rect->bottom - rect->top);
     }
 #endif
 }
@@ -1727,8 +1750,8 @@
 /* Mac replacement for XSetClipMask.  */
 
 static INLINE void
-mac_reset_clip_rectangles (display, gc)
-     Display *display;
+mac_reset_clip_rectangles (f, gc)
+     struct frame *f;
      GC gc;
 {
   gc->n_clip_rects = 0;
@@ -2136,7 +2159,7 @@
       XSetForeground (display, face->gc, gcv.foreground);
     }
 
-  mac_reset_clip_rectangles (display, face->gc);
+  mac_reset_clip_rectangles (f, face->gc);
 }
 
 #if USE_CG_DRAWING
@@ -2650,7 +2673,7 @@
   int n;
 
   n = get_glyph_string_clip_rects (s, rects, MAX_CLIP_RECTS);
-  mac_set_clip_rectangles (s->display, s->gc, rects, n);
+  mac_set_clip_rectangles (s->f, s->gc, rects, n);
 }
 
 
@@ -3239,7 +3262,7 @@
     gc = f->output_data.mac->white_relief.gc;
   else
     gc = f->output_data.mac->black_relief.gc;
-  mac_set_clip_rectangles (dpy, gc, clip_rect, 1);
+  mac_set_clip_rectangles (f, gc, clip_rect, 1);
 
   /* Top.  */
   if (top_p)
@@ -3254,12 +3277,12 @@
       mac_draw_line (f, gc,
 		     left_x + i, top_y + i, left_x + i, bottom_y - i + 1);
 
-  mac_reset_clip_rectangles (dpy, gc);
+  mac_reset_clip_rectangles (f, gc);
   if (raised_p)
     gc = f->output_data.mac->black_relief.gc;
   else
     gc = f->output_data.mac->white_relief.gc;
-  mac_set_clip_rectangles (dpy, gc, clip_rect, 1);
+  mac_set_clip_rectangles (f, gc, clip_rect, 1);
 
   /* Bottom.  */
   if (bot_p)
@@ -3274,7 +3297,7 @@
       mac_draw_line (f, gc,
 		     right_x - i, top_y + i + 1, right_x - i, bottom_y - i);
 
-  mac_reset_clip_rectangles (dpy, gc);
+  mac_reset_clip_rectangles (f, gc);
 }
 
 
@@ -3296,7 +3319,7 @@
 
   XGetGCValues (s->display, s->gc, GCForeground, &xgcv);
   XSetForeground (s->display, s->gc, s->face->box_color);
-  mac_set_clip_rectangles (s->display, s->gc, clip_rect, 1);
+  mac_set_clip_rectangles (s->f, s->gc, clip_rect, 1);
 
   /* Top.  */
   mac_fill_rectangle (s->f, s->gc, left_x, top_y,
@@ -3317,7 +3340,7 @@
 			top_y, width, bottom_y - top_y + 1);
 
   XSetForeground (s->display, s->gc, xgcv.foreground);
-  mac_reset_clip_rectangles (s->display, s->gc);
+  mac_reset_clip_rectangles (s->f, s->gc);
 }
 
 
@@ -3626,7 +3649,7 @@
 	    gc = s->face->gc;
 
 	  get_glyph_string_clip_rect (s, &r);
-	  mac_set_clip_rectangles (s->display, gc, &r, 1);
+	  mac_set_clip_rectangles (s->f, gc, &r, 1);
 
 #if 0 /* MAC_TODO: stipple */
 	  if (s->face->stipple)
@@ -3826,7 +3849,7 @@
     }
 
   /* Reset clipping.  */
-  mac_reset_clip_rectangles (s->display, s->gc);
+  mac_reset_clip_rectangles (s->f, s->gc);
 }
 
 /* Shift display to make room for inserted glyphs.   */
@@ -5008,7 +5031,7 @@
   clip_rect.right = clip_rect.left + window_width;
   clip_rect.bottom = clip_rect.top + row->visible_height;
 
-  mac_set_clip_rectangles (FRAME_MAC_DISPLAY (f), gc, &clip_rect, 1);
+  mac_set_clip_rectangles (f, gc, &clip_rect, 1);
 }
 
 
@@ -5050,7 +5073,7 @@
   /* Set clipping, draw the rectangle, and reset clipping again.  */
   x_clip_to_row (w, row, TEXT_AREA, gc);
   mac_draw_rectangle (f, gc, x, y, wd, h - 1);
-  mac_reset_clip_rectangles (dpy, gc);
+  mac_reset_clip_rectangles (f, gc);
 }
 
 
@@ -5134,7 +5157,7 @@
 			    cursor_glyph->pixel_width,
 			    width);
 
-      mac_reset_clip_rectangles (dpy, gc);
+      mac_reset_clip_rectangles (f, gc);
     }
 }
 
@@ -5428,7 +5451,6 @@
       change_frame_size (f, rows, cols, 0, 1, 0);
       FRAME_PIXEL_WIDTH (f) = pixelwidth;
       FRAME_PIXEL_HEIGHT (f) = pixelheight;
-      SET_FRAME_GARBAGED (f);
 
       /* If cursor was outside the new size, mark it as off.  */
       mark_window_cursors_off (XWINDOW (f->root_window));
@@ -5454,7 +5476,6 @@
 x_calc_absolute_position (f)
      struct frame *f;
 {
-  int width_diff = 0, height_diff = 0;
   int flags = f->size_hint_flags;
   Rect inner, outer;
 
@@ -5469,22 +5490,15 @@
   mac_get_window_bounds (f, &inner, &outer);
   UNBLOCK_INPUT;
 
-  width_diff = (outer.right - outer.left) - (inner.right - inner.left);
-  height_diff = (outer.bottom - outer.top) - (inner.bottom - inner.top);
-
   /* Treat negative positions as relative to the leftmost bottommost
      position that fits on the screen.  */
   if (flags & XNegative)
-    f->left_pos = (FRAME_MAC_DISPLAY_INFO (f)->width
-                   - width_diff
-		   - FRAME_PIXEL_WIDTH (f)
-		   + f->left_pos);
+    f->left_pos += (FRAME_MAC_DISPLAY_INFO (f)->width
+		    - (outer.right - outer.left));
 
   if (flags & YNegative)
-    f->top_pos = (FRAME_MAC_DISPLAY_INFO (f)->height
-		  - height_diff
-		  - FRAME_PIXEL_HEIGHT (f)
-		  + f->top_pos);
+    f->top_pos += (FRAME_MAC_DISPLAY_INFO (f)->height
+		   - (outer.bottom - outer.top));
 
   /* The left_pos and top_pos
      are now relative to the top and left screen edges,
@@ -8141,8 +8155,8 @@
 Lisp_Object Qtext_input;
 Lisp_Object Qupdate_active_input_area, Qunicode_for_key_event;
 Lisp_Object Vmac_ts_active_input_overlay;
-Lisp_Object Vmac_ts_script_language_on_focus;
-Lisp_Object saved_ts_script_language_on_focus;
+static Lisp_Object Vmac_ts_script_language_on_focus;
+static Lisp_Object saved_ts_script_language_on_focus;
 static ScriptLanguageRecord saved_ts_language;
 static Component saved_ts_component;
 #endif
@@ -8673,16 +8687,23 @@
 	err = XINT (binding);
       else
 	{
-	  AppleEvent apple_event;
-	  err = create_apple_event_from_event_ref (event, num_params,
-						   names, types,
-						   &apple_event);
-	  if (err == noErr)
-	    {
-	      mac_store_apple_event (class_key, id_key, &apple_event);
-	      AEDisposeDesc (&apple_event);
-	      mac_wakeup_from_rne ();
-	    }
+	  struct input_event buf;
+
+	  EVENT_INIT (buf);
+
+	  buf.kind = MAC_APPLE_EVENT;
+	  buf.x = class_key;
+	  buf.y = id_key;
+	  XSETFRAME (buf.frame_or_window,
+		     mac_focus_frame (&one_mac_display_info));
+	  /* Now that Lisp object allocations are protected by
+	     BLOCK_INPUT, it is safe to use them during
+	     read_socket_hook.  */
+	  buf.arg = Fcons (build_string ("aevt"),
+			   mac_event_parameters_to_lisp (event, num_params,
+							 names, types));
+	  kbd_buffer_store_event (&buf);
+	  mac_wakeup_from_rne ();
 	}
     }