X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=gtk%2Fgtk.text.lisp;h=69c365c1888aeaf57c800e8baef5081a69b2ce27;hb=804b4c8f24b3725eb90f29d7e6910b2598b68771;hp=23850665e7cc0858dd0603026d6eefbe6c37850c;hpb=5d306b325953acfdffe38f05eca4dfb7cbc89fb7;p=cl-gtk2.git diff --git a/gtk/gtk.text.lisp b/gtk/gtk.text.lisp index 2385066..69c365c 100644 --- a/gtk/gtk.text.lisp +++ b/gtk/gtk.text.lisp @@ -14,6 +14,8 @@ (defmethod translate-to-foreign (value (type unichar)) (char-code value)) +(at-init () (foreign-funcall "gtk_text_iter_get_type" :int)) + (define-g-boxed-opaque text-iter "GtkTextIter" :alloc (gtk-text-iter-alloc)) @@ -751,75 +753,178 @@ (export 'text-buffer-remove-selection-clipboard) -;; enum GtkTextBufferTargetInfo; -;; gboolean (*GtkTextBufferDeserializeFunc) (GtkTextBuffer *register_buffer, -;; GtkTextBuffer *content_buffer, -;; GtkTextIter *iter, -;; const guint8 *data, -;; gsize length, -;; gboolean create_tags, -;; gpointer user_data, -;; GError **error); -;; gboolean gtk_text_buffer_deserialize (GtkTextBuffer *register_buffer, -;; GtkTextBuffer *content_buffer, -;; GdkAtom format, -;; GtkTextIter *iter, -;; const guint8 *data, -;; gsize length, -;; GError **error); -;; gboolean gtk_text_buffer_deserialize_get_can_create_tags -;; (GtkTextBuffer *buffer, -;; GdkAtom format); -;; void gtk_text_buffer_deserialize_set_can_create_tags -;; (GtkTextBuffer *buffer, -;; GdkAtom format, -;; gboolean can_create_tags); -;; GtkTargetList* gtk_text_buffer_get_copy_target_list -;; (GtkTextBuffer *buffer); -;; GdkAtom* gtk_text_buffer_get_deserialize_formats -;; (GtkTextBuffer *buffer, -;; gint *n_formats); -;; GtkTargetList* gtk_text_buffer_get_paste_target_list -;; (GtkTextBuffer *buffer); -;; GdkAtom* gtk_text_buffer_get_serialize_formats -;; (GtkTextBuffer *buffer, -;; gint *n_formats); -;; GdkAtom gtk_text_buffer_register_deserialize_format -;; (GtkTextBuffer *buffer, -;; const gchar *mime_type, -;; GtkTextBufferDeserializeFunc function, -;; gpointer user_data, -;; GDestroyNotify user_data_destroy); -;; GdkAtom gtk_text_buffer_register_deserialize_tagset -;; (GtkTextBuffer *buffer, -;; const gchar *tagset_name); -;; GdkAtom gtk_text_buffer_register_serialize_format -;; (GtkTextBuffer *buffer, -;; const gchar *mime_type, -;; GtkTextBufferSerializeFunc function, -;; gpointer user_data, -;; GDestroyNotify user_data_destroy); -;; GdkAtom gtk_text_buffer_register_serialize_tagset -;; (GtkTextBuffer *buffer, -;; const gchar *tagset_name); -;; guint8* (*GtkTextBufferSerializeFunc) (GtkTextBuffer *register_buffer, -;; GtkTextBuffer *content_buffer, -;; const GtkTextIter *start, -;; const GtkTextIter *end, -;; gsize *length, -;; gpointer user_data); -;; guint8* gtk_text_buffer_serialize (GtkTextBuffer *register_buffer, -;; GtkTextBuffer *content_buffer, -;; GdkAtom format, -;; const GtkTextIter *start, -;; const GtkTextIter *end, -;; gsize *length); -;; void gtk_text_buffer_unregister_deserialize_format -;; (GtkTextBuffer *buffer, -;; GdkAtom format); -;; void gtk_text_buffer_unregister_serialize_format -;; (GtkTextBuffer *buffer, -;; GdkAtom format); +(defcfun gtk-text-buffer-deserialize :boolean + (register-buffer (g-object text-buffer)) + (content-buffer (g-object text-buffer)) + (format gdk-atom-as-string) + (iter (g-boxed-foreign text-iter)) + (data :pointer) + (length gsize) + (error :pointer)) + +(defun text-buffer-deserialize (register-buffer content-buffer format iter data) + (let ((bytes (foreign-alloc :uint8 :count (length data)))) + (iter (for i from 0 below (length data)) + (setf (mem-aref bytes :uint8 i) (aref data i))) + (unwind-protect + (with-g-error (err) + (gtk-text-buffer-deserialize register-buffer content-buffer + format iter bytes (length data) err)) + (foreign-free bytes)))) + +(export 'text-buffer-deserialize) + +(defcfun (text-buffer-deserialize-can-create-tags "gtk_text_buffer_deserialize_get_can_create_tags") :boolean + (buffer (g-object text-buffer)) + (format gdk-atom-as-string)) + +(defcfun gtk-text-buffer-deserialize-set-can-create-tags :void + (buffer (g-object text-buffer)) + (format gdk-atom-as-string) + (can-create-tags :boolean)) + +(defun (setf text-buffer-deserialize-can-create-tags) (new-value buffer format) + (gtk-text-buffer-deserialize-set-can-create-tags buffer format new-value)) + +(export 'text-buffer-deserialize-can-create-tags) + +(defcfun gtk-text-buffer-get-deserialize-formats (:pointer gdk-atom-as-string) + (text-buffer (g-object text-buffer)) + (n-formats (:pointer :int))) + +(defun text-buffer-get-deserialize-formats (text-buffer) + (with-foreign-object (n-formats :int) + (let ((atoms-ptr (gtk-text-buffer-get-deserialize-formats text-buffer n-formats))) + (iter (for i from 0 below (mem-ref n-formats :int)) + (for atom = (mem-aref atoms-ptr 'gdk-atom-as-string i)) + (collect atom))))) + +(export 'text-buffer-get-deserialize-formats) + +(defcfun gtk-text-buffer-get-serialize-formats (:pointer gdk-atom-as-string) + (text-buffer (g-object text-buffer)) + (n-formats (:pointer :int))) + +(defun text-buffer-get-serialize-formats (text-buffer) + (with-foreign-object (n-formats :int) + (let ((atoms-ptr (gtk-text-buffer-get-serialize-formats text-buffer n-formats))) + (iter (for i from 0 below (mem-ref n-formats :int)) + (for atom = (mem-aref atoms-ptr 'gdk-atom-as-string i)) + (collect atom))))) + +(export 'text-buffer-get-serialize-formats) + +(defcallback gtk-text-buffer-deserialize-cb :boolean + ((register-buffer (g-object text-buffer)) + (content-buffer (g-object text-buffer)) + (iter (g-boxed-foreign text-iter)) + (data :pointer) + (length gsize) + (create-tags :boolean) + (user-data :pointer) + (error :pointer)) + (with-catching-to-g-error (error) + (let ((fn (stable-pointer-value user-data))) + (restart-case + (let ((bytes (iter (with bytes = (make-array length :element-type '(unsigned-byte 8))) + (for i from 0 below length) + (setf (aref bytes i) (mem-ref data :uint8 i)) + (finally (return bytes))))) + (progn (funcall fn register-buffer content-buffer iter bytes create-tags) t)) + (return-from-text-buffer-deserialize-cb () + (error 'g-error-condition + :domain "cl-gtk2" + :code 0 + :message "'return-from-text-buffer-deserialize-cb' restart was called")))))) + +(defcfun gtk-text-buffer-register-deserialize-format gdk-atom-as-string + (buffer (g-object text-buffer)) + (mime-type :string) + (function :pointer) + (user-data :pointer) + (destroy-notify :pointer)) + +(defun text-buffer-register-deserialize-format (buffer mime-type function) + (gtk-text-buffer-register-deserialize-format buffer mime-type + (callback gtk-text-buffer-deserialize-cb) + (allocate-stable-pointer function) + (callback stable-pointer-free-destroy-notify-callback))) + +(export 'text-buffer-register-deserialize-format) + +(defcfun (text-buffer-register-deserialize-tagset "gtk_text_buffer_register_deserialize_tagset") gdk-atom-as-string + (buffer (g-object text-buffer)) + (tagset-name :string)) + +(export 'text-buffer-register-deserialize-tagset) + +(defcallback gtk-text-buffer-serialize-cb :pointer + ((register-buffer (g-object text-buffer)) + (content-buffer (g-object text-buffer)) + (start-iter (g-boxed-foreign text-iter)) + (end-iter (g-boxed-foreign text-iter)) + (length (:pointer gsize)) + (user-data :pointer)) + (let ((fn (stable-pointer-value user-data))) + (restart-case + (let* ((bytes (funcall fn register-buffer content-buffer start-iter end-iter)) + (bytes-ptr (g-malloc (length bytes)))) + (setf (mem-ref length 'gsize) (length bytes)) + (iter (for i from 0 below (length bytes)) + (setf (mem-aref bytes-ptr :uint8 i) (aref bytes i))) + bytes-ptr) + (return-from-text-buffer-serialize-cb () nil)))) + +(defcfun gtk-text-buffer-register-serialize-format gdk-atom-as-string + (buffer (g-object text-buffer)) + (mime-type :string) + (function :pointer) + (user-data :pointer) + (destroy-notify :pointer)) + +(defun text-buffer-register-serialize-format (buffer mime-type function) + (gtk-text-buffer-register-serialize-format buffer mime-type + (callback gtk-text-buffer-serialize-cb) + (allocate-stable-pointer function) + (callback stable-pointer-free-destroy-notify-callback))) + +(export 'text-buffer-register-serialize-format) + +(defcfun (text-buffer-register-serialize-tagset "gtk_text_buffer_register_serialize_tagset") gdk-atom-as-string + (buffer (g-object text-buffer)) + (tagset-name :string)) + +(export 'text-buffer-register-serialize-tagset) + +(defcfun gtk-text-buffer-serialize :pointer + (register-buffer (g-object text-buffer)) + (content-buffer (g-object text-buffer)) + (format gdk-atom-as-string) + (start (g-boxed-foreign text-iter)) + (end (g-boxed-foreign text-iter)) + (length (:pointer gsize))) + +(defun text-buffer-serialize (register-buffer content-buffer format start end) + (with-foreign-object (length 'gsize) + (let ((bytes (gtk-text-buffer-serialize register-buffer content-buffer format start end length))) + (iter (for i from 0 to (mem-ref length 'gsize)) + (for byte = (mem-aref bytes :uint8 i)) + (collect byte result-type vector) + (finally (g-free bytes)))))) + +(export 'text-buffer-serialize) + +(defcfun (text-buffer-unregister-deserialize-format "gtk_text_buffer_unregister_deserialize_format") :void + (buffer (g-object text-buffer)) + (format gdk-atom-as-string)) + +(export 'text-buffer-unregister-deserialize-format) + +(defcfun (text-buffer-unregister-serialize-format "gtk_text_buffer_unregister_serialize_format") :void + (buffer (g-object text-buffer)) + (format gdk-atom-as-string)) + +(export 'text-buffer-unregister-serialize-format) ;; text tag @@ -890,6 +995,12 @@ (export 'text-view-scroll-to-iter) +(defcfun (text-view-scroll-mark-onscreen "gtk_text_view_scroll_mark_onscreen") :void + (text-view (g-object text-view)) + (mark (g-object text-mark))) + +(export 'text-view-scroll-mark-onscreen) + (defcfun (text-view-move-mark-onscreen "gtk_text_view_move_mark_onscreen") :boolean (text-view (g-object text-view)) (mark (g-object text-mark))) @@ -924,15 +1035,32 @@ (export 'text-view-iter-location) +(defcfun gtk-text-view-get-line-at-y :void + (text-view (g-object text-view)) + (target-iter (g-boxed-foreign text-iter)) + (y :int) + (line-top (:pointer :int))) -;; void gtk_text_view_get_line_at_y (GtkTextView *text_view, -;; GtkTextIter *target_iter, -;; gint y, -;; gint *line_top); -;; void gtk_text_view_get_line_yrange (GtkTextView *text_view, -;; const GtkTextIter *iter, -;; gint *y, -;; gint *height); +(defun text-view-get-line-at-y (text-view y) + (let ((iter (make-instance 'text-iter))) + (with-foreign-object (line-top :int) + (gtk-text-view-get-line-at-y text-view iter y line-top) + (values iter (mem-ref line-top :int))))) + +(export 'text-view-get-line-at-y) + +(defcfun gtk-text-view-get-line-yrange :void + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter)) + (y (:pointer :int)) + (height (:pointer :int))) + +(defun text-view-get-line-yrange (text-view iter) + (with-foreign-objects ((y :int) (height :int)) + (gtk-text-view-get-line-yrange text-view iter y height) + (values (mem-ref y :int) (mem-ref height :int)))) + +(export 'text-view-get-line-yrange) (defcfun gtk-text-view-get-iter-at-location :void (text-view (g-object text-view)) @@ -947,18 +1075,35 @@ (export 'text-view-get-iter-at-location) -;; void gtk_text_view_get_iter_at_position (GtkTextView *text_view, -;; GtkTextIter *iter, -;; gint *trailing, -;; gint x, -;; gint y); -;; void gtk_text_view_buffer_to_window_coords -;; (GtkTextView *text_view, -;; GtkTextWindowType win, -;; gint buffer_x, -;; gint buffer_y, -;; gint *window_x, -;; gint *window_y); +(defcfun gtk-text-view-get-iter-at-position :void + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter)) + (trailing (:pointer :int)) + (x :int) + (y :int)) + +(defun text-view-get-iter-at-position (text-view x y) + (with-foreign-object (trailing :int) + (let ((iter (make-instance 'text-iter))) + (gtk-text-view-get-iter-at-position text-view iter trailing x y) + (values iter (mem-ref trailing :int))))) + +(export 'text-view-get-iter-at-position) + +(defcfun gtk-text-view-buffer-to-window-coords :void + (text-view (g-object text-view)) + (win text-window-type) + (buffer-x :int) + (buffer-y :int) + (window-x (:pointer :int)) + (window-y (:pointer :int))) + +(defun text-view-buffer-to-window-coords (text-view window-type buffer-x buffer-y) + (with-foreign-objects ((window-x :int) (window-y :int)) + (gtk-text-view-buffer-to-window-coords text-view window-type buffer-x buffer-y window-x window-y) + (values (mem-ref window-x :int) (mem-ref window-y :int)))) + +(export 'text-view-buffer-to-window-coords) (defcfun gtk-text-view-window-to-buffer-coords :void (text-view (g-object text-view)) @@ -985,33 +1130,63 @@ (export 'text-view-get-window) -;; GtkTextWindowType gtk_text_view_get_window_type (GtkTextView *text_view, -;; GdkWindow *window); -;; void gtk_text_view_set_border_window_size -;; (GtkTextView *text_view, -;; GtkTextWindowType type, -;; gint size); -;; gint gtk_text_view_get_border_window_size -;; (GtkTextView *text_view, -;; GtkTextWindowType type); -;; gboolean gtk_text_view_forward_display_line (GtkTextView *text_view, -;; GtkTextIter *iter); -;; gboolean gtk_text_view_backward_display_line (GtkTextView *text_view, -;; GtkTextIter *iter); -;; gboolean gtk_text_view_forward_display_line_end -;; (GtkTextView *text_view, -;; GtkTextIter *iter); -;; gboolean gtk_text_view_backward_display_line_start -;; (GtkTextView *text_view, -;; GtkTextIter *iter); -;; gboolean gtk_text_view_starts_display_line (GtkTextView *text_view, -;; const GtkTextIter *iter); -;; gboolean gtk_text_view_move_visually (GtkTextView *text_view, -;; GtkTextIter *iter, -;; gint count); -;; void gtk_text_view_add_child_at_anchor (GtkTextView *text_view, -;; GtkWidget *child, -;; GtkTextChildAnchor *anchor); +(defcfun (text-view-get-window-type "gtk_text_view_get_window_type") text-window-type + (text-view (g-object text-view)) + (window (g-object gdk-window))) + +(export 'text-view-get-window-type) + +(defcfun gtk-text-view-set-border-window-size :void + (text-view (g-object text-view)) + (window-type text-window-type) + (size :int)) + +(defcfun (text-view-border-window-size "gtk_text_view_get_border_window_size") :int + (text-view (g-object text-view)) + (window-type text-window-type)) + +(defun (setf text-view-border-window-size) (new-value text-view window-type) + (gtk-text-view-set-border-window-size text-view window-type new-value) + new-value) + +(export 'text-view-border-window-size) + +(defcfun (text-view-forward-display-line "gtk_text_view_forward_display_line") :boolean + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter))) + +(export 'text-view-forward-display-line) + +(defcfun (text-view-backward-display-line "gtk_text_view_backward_display_line") :boolean + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter))) + +(export 'text-view-backward-display-line) + +(defcfun (text-view-forward-display-line-end "gtk_text_view_forward_display_line_end") :boolean + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter))) + +(export 'text-view-forward-display-line-end) + +(defcfun (text-view-backward-display-line-start "gtk_text_view_backward_display_line_start") :boolean + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter))) + +(export 'text-view-backward-display-line-start) + +(defcfun (text-view-starts-display-line "gtk_text_view_starts_display_line") :boolean + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter))) + +(export 'text-view-starts-display-line) + +(defcfun (text-view-move-visually "gtk_text_view_move_visually") :boolean + (text-view (g-object text-view)) + (iter (g-boxed-foreign text-iter)) + (count :int)) + +(export 'text-view-move-visually) (defcfun (text-view-add-child-at-anchor "gtk_text_view_add_child_at_anchor") :void (text-view g-object) @@ -1020,16 +1195,24 @@ (export 'text-view-add-child-at-anchor) -;; GtkTextChildAnchor; -;; GtkTextChildAnchor* gtk_text_child_anchor_new (void); -;; GList* gtk_text_child_anchor_get_widgets (GtkTextChildAnchor *anchor); -;; gboolean gtk_text_child_anchor_get_deleted (GtkTextChildAnchor *anchor); -;; void gtk_text_view_add_child_in_window (GtkTextView *text_view, -;; GtkWidget *child, -;; GtkTextWindowType which_window, -;; gint xpos, -;; gint ypos); -;; void gtk_text_view_move_child (GtkTextView *text_view, -;; GtkWidget *child, -;; gint xpos, -;; gint ypos); +(defcfun (text-child-anchor-widgets "gtk_text_child_anchor_get_widgets") (glist (g-object widget) :free-from-foreign t) + (anchor (g-object text-child-anchor))) + +(export 'text-child-anchor-widgets) + +(defcfun (text-view-add-child-in-window "gtk_text_view_add_child_in_window") :void + (text-view (g-object text-view)) + (child (g-object widget)) + (which-window text-window-type) + (x-pos :int) + (y-pos :int)) + +(export 'text-view-add-child-in-window) + +(defcfun (text-view-move-child "gtk_text_view_move_child") :void + (text-view (g-object text-view)) + (child (g-object widget)) + (x-pos :int) + (y-pos :int)) + +(export 'text-view-move-child)