// GENERATED — DO NOT EDIT

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/class.TextView.html).
pub type TextView

///|
pub(open) trait ITextView {
  fn as_text_view(Self) -> TextView
  fn add_child_at_anchor(Self, &IWidget, &ITextChildAnchor) -> Unit = _
  fn add_overlay(Self, &IWidget, Int, Int) -> Unit = _
  fn backward_display_line(Self, TextIter) -> Bool = _
  fn backward_display_line_start(Self, TextIter) -> Bool = _
  fn buffer_to_window_coords(Self, TextWindowType, Int, Int) -> (Int, Int) = _
  fn forward_display_line(Self, TextIter) -> Bool = _
  fn forward_display_line_end(Self, TextIter) -> Bool = _
  fn get_accepts_tab(Self) -> Bool = _
  fn get_bottom_margin(Self) -> Int = _
  fn get_buffer(Self) -> TextBuffer = _
  fn get_cursor_locations(Self, TextIter?) -> (@gdk.Rectangle, @gdk.Rectangle) = _
  fn get_cursor_visible(Self) -> Bool = _
  fn get_editable(Self) -> Bool = _
  fn get_extra_menu(Self) -> @gio.MenuModel? = _
  fn get_gutter(Self, TextWindowType) -> Widget? = _
  fn get_indent(Self) -> Int = _
  fn get_input_hints(Self) -> InputHints = _
  fn get_input_purpose(Self) -> InputPurpose = _
  fn get_iter_at_location(Self, Int, Int) -> (TextIter, Bool) = _
  fn get_iter_at_position(Self, Int, Int) -> (TextIter, Int, Bool) = _
  fn get_iter_location(Self, TextIter) -> @gdk.Rectangle = _
  fn get_justification(Self) -> Justification = _
  fn get_left_margin(Self) -> Int = _
  fn get_line_at_y(Self, Int) -> (TextIter, Int) = _
  fn get_line_yrange(Self, TextIter) -> (Int, Int) = _
  fn get_ltr_context(Self) -> @pango.Context = _
  fn get_monospace(Self) -> Bool = _
  fn get_overwrite(Self) -> Bool = _
  fn get_pixels_above_lines(Self) -> Int = _
  fn get_pixels_below_lines(Self) -> Int = _
  fn get_pixels_inside_wrap(Self) -> Int = _
  fn get_right_margin(Self) -> Int = _
  fn get_rtl_context(Self) -> @pango.Context = _
  fn get_tabs(Self) -> @pango.TabArray? = _
  fn get_top_margin(Self) -> Int = _
  fn get_visible_offset(Self) -> (Double, Double) = _
  fn get_visible_rect(Self) -> @gdk.Rectangle = _
  fn get_wrap_mode(Self) -> WrapMode = _
  fn move_mark_onscreen(Self, &ITextMark) -> Bool = _
  fn move_overlay(Self, &IWidget, Int, Int) -> Unit = _
  fn move_visually(Self, TextIter, Int) -> Bool = _
  fn place_cursor_onscreen(Self) -> Bool = _
  fn remove(Self, &IWidget) -> Unit = _
  fn reset_cursor_blink(Self) -> Unit = _
  fn reset_im_context(Self) -> Unit = _
  fn scroll_mark_onscreen(Self, &ITextMark) -> Unit = _
  fn scroll_to_iter(Self, TextIter, Double, Bool, Double, Double) -> Bool = _
  fn scroll_to_mark(Self, &ITextMark, Double, Bool, Double, Double) -> Unit = _
  fn set_accepts_tab(Self, Bool) -> Unit = _
  fn set_bottom_margin(Self, Int) -> Unit = _
  fn set_buffer(Self, &ITextBuffer?) -> Unit = _
  fn set_cursor_visible(Self, Bool) -> Unit = _
  fn set_editable(Self, Bool) -> Unit = _
  fn set_extra_menu(Self, &@gio.IMenuModel?) -> Unit = _
  fn set_gutter(Self, TextWindowType, &IWidget?) -> Unit = _
  fn set_indent(Self, Int) -> Unit = _
  fn set_input_hints(Self, InputHints) -> Unit = _
  fn set_input_purpose(Self, InputPurpose) -> Unit = _
  fn set_justification(Self, Justification) -> Unit = _
  fn set_left_margin(Self, Int) -> Unit = _
  fn set_monospace(Self, Bool) -> Unit = _
  fn set_overwrite(Self, Bool) -> Unit = _
  fn set_pixels_above_lines(Self, Int) -> Unit = _
  fn set_pixels_below_lines(Self, Int) -> Unit = _
  fn set_pixels_inside_wrap(Self, Int) -> Unit = _
  fn set_right_margin(Self, Int) -> Unit = _
  fn set_tabs(Self, @pango.TabArray) -> Unit = _
  fn set_top_margin(Self, Int) -> Unit = _
  fn set_wrap_mode(Self, WrapMode) -> Unit = _
  fn starts_display_line(Self, TextIter) -> Bool = _
  fn window_to_buffer_coords(Self, TextWindowType, Int, Int) -> (Int, Int) = _
  fn connect_backspace(Self, (TextView) -> Unit) -> UInt64 = _
  fn connect_copy_clipboard(Self, (TextView) -> Unit) -> UInt64 = _
  fn connect_cut_clipboard(Self, (TextView) -> Unit) -> UInt64 = _
  fn connect_delete_from_cursor(Self, (TextView, DeleteType, Int) -> Unit) -> UInt64 = _
  fn connect_extend_selection(
    Self,
    (TextView, TextExtendSelection, TextIter, TextIter, TextIter) -> Bool,
  ) -> UInt64 = _
  fn connect_insert_at_cursor(Self, (TextView, String) -> Unit) -> UInt64 = _
  fn connect_insert_emoji(Self, (TextView) -> Unit) -> UInt64 = _
  fn connect_move_cursor(Self, (TextView, MovementStep, Int, Bool) -> Unit) -> UInt64 = _
  fn connect_move_viewport(Self, (TextView, ScrollStep, Int) -> Unit) -> UInt64 = _
  fn connect_paste_clipboard(Self, (TextView) -> Unit) -> UInt64 = _
  fn connect_preedit_changed(Self, (TextView, String) -> Unit) -> UInt64 = _
  fn connect_select_all(Self, (TextView, Bool) -> Unit) -> UInt64 = _
  fn connect_set_anchor(Self, (TextView) -> Unit) -> UInt64 = _
  fn connect_toggle_cursor_visible(Self, (TextView) -> Unit) -> UInt64 = _
  fn connect_toggle_overwrite(Self, (TextView) -> Unit) -> UInt64 = _
}

///|
pub impl ITextView for TextView with fn as_text_view(self) {
  self
}

///|
/// Implementation contract for TextView.backspace. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewBackspace {
  fn backspace(Self, TextView) -> Unit
}

///|
/// Implementation contract for TextView.copy_clipboard. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewCopyClipboard {
  fn copy_clipboard(Self, TextView) -> Unit
}

///|
/// Implementation contract for TextView.cut_clipboard. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewCutClipboard {
  fn cut_clipboard(Self, TextView) -> Unit
}

///|
/// Implementation contract for TextView.delete_from_cursor. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewDeleteFromCursor {
  fn delete_from_cursor(Self, TextView, DeleteType, Int) -> Unit
}

///|
/// Implementation contract for TextView.insert_at_cursor. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewInsertAtCursor {
  fn insert_at_cursor(Self, TextView, String) -> Unit
}

///|
/// Implementation contract for TextView.insert_emoji. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewInsertEmoji {
  fn insert_emoji(Self, TextView) -> Unit
}

///|
/// Implementation contract for TextView.move_cursor. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewMoveCursor {
  fn move_cursor(Self, TextView, MovementStep, Int, Bool) -> Unit
}

///|
/// Implementation contract for TextView.paste_clipboard. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewPasteClipboard {
  fn paste_clipboard(Self, TextView) -> Unit
}

///|
/// Implementation contract for TextView.set_anchor. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewSetAnchor {
  fn set_anchor(Self, TextView) -> Unit
}

///|
/// Implementation contract for TextView.toggle_overwrite. Self is the retained MoonBit state; the second parameter is the invoked TextView object.
pub(open) trait VTextViewToggleOverwrite {
  fn toggle_overwrite(Self, TextView) -> Unit
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.TextView.new.html).
pub extern "c" fn TextView::new() -> TextView = "moonbit_gtk_text_view_new"

///|
#borrow(buffer)
extern "c" fn moonbit_gtk_text_view_new_with_buffer(
  buffer : TextBuffer,
) -> TextView = "moonbit_gtk_text_view_new_with_buffer"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/ctor.TextView.new_with_buffer.html).
pub fn TextView::new_with_buffer(buffer : &ITextBuffer) -> TextView {
  moonbit_gtk_text_view_new_with_buffer(buffer.as_text_buffer())
}

///|
#borrow(self_, child, anchor)
extern "c" fn moonbit_gtk_text_view_add_child_at_anchor(
  self_ : TextView,
  child : Widget,
  anchor : TextChildAnchor,
) = "moonbit_gtk_text_view_add_child_at_anchor"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.add_child_at_anchor.html).
pub fn TextView::add_child_at_anchor(
  self : TextView,
  child : &IWidget,
  anchor : &ITextChildAnchor,
) -> Unit {
  moonbit_gtk_text_view_add_child_at_anchor(
    self,
    child.as_widget(),
    anchor.as_text_child_anchor(),
  )
}

///|
#borrow(self_, child)
extern "c" fn moonbit_gtk_text_view_add_overlay(
  self_ : TextView,
  child : Widget,
  xpos : Int,
  ypos : Int,
) = "moonbit_gtk_text_view_add_overlay"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.add_overlay.html).
pub fn TextView::add_overlay(
  self : TextView,
  child : &IWidget,
  xpos : Int,
  ypos : Int,
) -> Unit {
  moonbit_gtk_text_view_add_overlay(self, child.as_widget(), xpos, ypos)
}

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_backward_display_line(
  self_ : TextView,
  iter : TextIter,
) -> Bool = "moonbit_gtk_text_view_backward_display_line"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.backward_display_line.html).
pub fn TextView::backward_display_line(
  self : TextView,
  iter : TextIter,
) -> Bool {
  moonbit_gtk_text_view_backward_display_line(self, iter)
}

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_backward_display_line_start(
  self_ : TextView,
  iter : TextIter,
) -> Bool = "moonbit_gtk_text_view_backward_display_line_start"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.backward_display_line_start.html).
pub fn TextView::backward_display_line_start(
  self : TextView,
  iter : TextIter,
) -> Bool {
  moonbit_gtk_text_view_backward_display_line_start(self, iter)
}

///|
#borrow(self_, window_x, window_y)
extern "c" fn moonbit_gtk_text_view_buffer_to_window_coords(
  self_ : TextView,
  win : TextWindowType,
  buffer_x : Int,
  buffer_y : Int,
  window_x : Ref[Int],
  window_y : Ref[Int],
) = "moonbit_gtk_text_view_buffer_to_window_coords"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.buffer_to_window_coords.html).
pub fn TextView::buffer_to_window_coords(
  self : TextView,
  win : TextWindowType,
  buffer_x : Int,
  buffer_y : Int,
) -> (Int, Int) {
  let window_x = Ref(0)
  let window_y = Ref(0)
  moonbit_gtk_text_view_buffer_to_window_coords(
    self, win, buffer_x, buffer_y, window_x, window_y,
  )
  (window_x.val, window_y.val)
}

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_forward_display_line(
  self_ : TextView,
  iter : TextIter,
) -> Bool = "moonbit_gtk_text_view_forward_display_line"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.forward_display_line.html).
pub fn TextView::forward_display_line(self : TextView, iter : TextIter) -> Bool {
  moonbit_gtk_text_view_forward_display_line(self, iter)
}

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_forward_display_line_end(
  self_ : TextView,
  iter : TextIter,
) -> Bool = "moonbit_gtk_text_view_forward_display_line_end"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.forward_display_line_end.html).
pub fn TextView::forward_display_line_end(
  self : TextView,
  iter : TextIter,
) -> Bool {
  moonbit_gtk_text_view_forward_display_line_end(self, iter)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_accepts_tab.html).
#borrow(self)
pub extern "c" fn TextView::get_accepts_tab(self : TextView) -> Bool = "moonbit_gtk_text_view_get_accepts_tab"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_bottom_margin.html).
#borrow(self)
pub extern "c" fn TextView::get_bottom_margin(self : TextView) -> Int = "moonbit_gtk_text_view_get_bottom_margin"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_buffer.html).
#borrow(self)
pub extern "c" fn TextView::get_buffer(self : TextView) -> TextBuffer = "moonbit_gtk_text_view_get_buffer"

///|
#borrow(self_, iter, __out_weak)
extern "c" fn moonbit_gtk_text_view_get_cursor_locations(
  self_ : TextView,
  iter : @glib.Nullable[TextIter],
  __out_weak : Ref[@gdk.Rectangle],
) -> @gdk.Rectangle = "moonbit_gtk_text_view_get_cursor_locations"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_cursor_locations.html).
pub fn TextView::get_cursor_locations(
  self : TextView,
  iter : TextIter?,
) -> (@gdk.Rectangle, @gdk.Rectangle) {
  let __out_weak = Ref(@gdk.Rectangle::_zero())
  let __result = moonbit_gtk_text_view_get_cursor_locations(
    self,
    match iter {
      Some(v) => @glib.Nullable::some(v)
      None => @glib.Nullable::null()
    },
    __out_weak,
  )
  (__result, __out_weak.val)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_cursor_visible.html).
#borrow(self)
pub extern "c" fn TextView::get_cursor_visible(self : TextView) -> Bool = "moonbit_gtk_text_view_get_cursor_visible"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_editable.html).
#borrow(self)
pub extern "c" fn TextView::get_editable(self : TextView) -> Bool = "moonbit_gtk_text_view_get_editable"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_text_view_get_extra_menu(
  self_ : TextView,
) -> @glib.Nullable[@gio.MenuModel] = "moonbit_gtk_text_view_get_extra_menu"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_extra_menu.html).
pub fn TextView::get_extra_menu(self : TextView) -> @gio.MenuModel? {
  let raw_result = moonbit_gtk_text_view_get_extra_menu(self)
  raw_result.to_option()
}

///|
#borrow(self_)
extern "c" fn moonbit_gtk_text_view_get_gutter(
  self_ : TextView,
  win : TextWindowType,
) -> @glib.Nullable[Widget] = "moonbit_gtk_text_view_get_gutter"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_gutter.html).
pub fn TextView::get_gutter(self : TextView, win : TextWindowType) -> Widget? {
  let raw_result = moonbit_gtk_text_view_get_gutter(self, win)
  raw_result.to_option()
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_indent.html).
#borrow(self)
pub extern "c" fn TextView::get_indent(self : TextView) -> Int = "moonbit_gtk_text_view_get_indent"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_text_view_get_input_hints(self_ : TextView) -> Int = "moonbit_gtk_text_view_get_input_hints"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_input_hints.html).
pub fn TextView::get_input_hints(self : TextView) -> InputHints {
  InputHints::from_int(moonbit_gtk_text_view_get_input_hints(self))
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_input_purpose.html).
#borrow(self)
pub extern "c" fn TextView::get_input_purpose(self : TextView) -> InputPurpose = "moonbit_gtk_text_view_get_input_purpose"

///|
#borrow(self_, native_result)
extern "c" fn moonbit_gtk_text_view_get_iter_at_location(
  self_ : TextView,
  x : Int,
  y : Int,
  native_result : Ref[Int],
) -> TextIter = "moonbit_gtk_text_view_get_iter_at_location"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_iter_at_location.html).
pub fn TextView::get_iter_at_location(
  self : TextView,
  x : Int,
  y : Int,
) -> (TextIter, Bool) {
  let native_result = Ref(0)
  let __result = moonbit_gtk_text_view_get_iter_at_location(
    self, x, y, native_result,
  )
  (__result, native_result.val != 0)
}

///|
#borrow(self_, trailing, native_result)
extern "c" fn moonbit_gtk_text_view_get_iter_at_position(
  self_ : TextView,
  trailing : Ref[Int],
  x : Int,
  y : Int,
  native_result : Ref[Int],
) -> TextIter = "moonbit_gtk_text_view_get_iter_at_position"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_iter_at_position.html).
pub fn TextView::get_iter_at_position(
  self : TextView,
  x : Int,
  y : Int,
) -> (TextIter, Int, Bool) {
  let trailing = Ref(0)
  let native_result = Ref(0)
  let __result = moonbit_gtk_text_view_get_iter_at_position(
    self, trailing, x, y, native_result,
  )
  (__result, trailing.val, native_result.val != 0)
}

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_get_iter_location(
  self_ : TextView,
  iter : TextIter,
) -> @gdk.Rectangle = "moonbit_gtk_text_view_get_iter_location"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_iter_location.html).
pub fn TextView::get_iter_location(
  self : TextView,
  iter : TextIter,
) -> @gdk.Rectangle {
  let __result = moonbit_gtk_text_view_get_iter_location(self, iter)
  __result
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_justification.html).
#borrow(self)
pub extern "c" fn TextView::get_justification(self : TextView) -> Justification = "moonbit_gtk_text_view_get_justification"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_left_margin.html).
#borrow(self)
pub extern "c" fn TextView::get_left_margin(self : TextView) -> Int = "moonbit_gtk_text_view_get_left_margin"

///|
#borrow(self_, line_top)
extern "c" fn moonbit_gtk_text_view_get_line_at_y(
  self_ : TextView,
  y : Int,
  line_top : Ref[Int],
) -> TextIter = "moonbit_gtk_text_view_get_line_at_y"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_line_at_y.html).
pub fn TextView::get_line_at_y(self : TextView, y : Int) -> (TextIter, Int) {
  let line_top = Ref(0)
  let __result = moonbit_gtk_text_view_get_line_at_y(self, y, line_top)
  (__result, line_top.val)
}

///|
#borrow(self_, iter, y, height)
extern "c" fn moonbit_gtk_text_view_get_line_yrange(
  self_ : TextView,
  iter : TextIter,
  y : Ref[Int],
  height : Ref[Int],
) = "moonbit_gtk_text_view_get_line_yrange"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_line_yrange.html).
pub fn TextView::get_line_yrange(
  self : TextView,
  iter : TextIter,
) -> (Int, Int) {
  let y = Ref(0)
  let height = Ref(0)
  moonbit_gtk_text_view_get_line_yrange(self, iter, y, height)
  (y.val, height.val)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_ltr_context.html).
#borrow(self)
pub extern "c" fn TextView::get_ltr_context(self : TextView) -> @pango.Context = "moonbit_gtk_text_view_get_ltr_context"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_monospace.html).
#borrow(self)
pub extern "c" fn TextView::get_monospace(self : TextView) -> Bool = "moonbit_gtk_text_view_get_monospace"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_overwrite.html).
#borrow(self)
pub extern "c" fn TextView::get_overwrite(self : TextView) -> Bool = "moonbit_gtk_text_view_get_overwrite"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_pixels_above_lines.html).
#borrow(self)
pub extern "c" fn TextView::get_pixels_above_lines(self : TextView) -> Int = "moonbit_gtk_text_view_get_pixels_above_lines"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_pixels_below_lines.html).
#borrow(self)
pub extern "c" fn TextView::get_pixels_below_lines(self : TextView) -> Int = "moonbit_gtk_text_view_get_pixels_below_lines"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_pixels_inside_wrap.html).
#borrow(self)
pub extern "c" fn TextView::get_pixels_inside_wrap(self : TextView) -> Int = "moonbit_gtk_text_view_get_pixels_inside_wrap"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_right_margin.html).
#borrow(self)
pub extern "c" fn TextView::get_right_margin(self : TextView) -> Int = "moonbit_gtk_text_view_get_right_margin"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_rtl_context.html).
#borrow(self)
pub extern "c" fn TextView::get_rtl_context(self : TextView) -> @pango.Context = "moonbit_gtk_text_view_get_rtl_context"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_text_view_get_tabs(
  self_ : TextView,
) -> @glib.Nullable[@pango.TabArray] = "moonbit_gtk_text_view_get_tabs"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_tabs.html).
pub fn TextView::get_tabs(self : TextView) -> @pango.TabArray? {
  let raw_result = moonbit_gtk_text_view_get_tabs(self)
  raw_result.to_option()
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_top_margin.html).
#borrow(self)
pub extern "c" fn TextView::get_top_margin(self : TextView) -> Int = "moonbit_gtk_text_view_get_top_margin"

///|
#borrow(self_, x_offset, y_offset)
extern "c" fn moonbit_gtk_text_view_get_visible_offset(
  self_ : TextView,
  x_offset : Ref[Double],
  y_offset : Ref[Double],
) = "moonbit_gtk_text_view_get_visible_offset"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_visible_offset.html).
pub fn TextView::get_visible_offset(self : TextView) -> (Double, Double) {
  let x_offset = Ref(0.0)
  let y_offset = Ref(0.0)
  moonbit_gtk_text_view_get_visible_offset(self, x_offset, y_offset)
  (x_offset.val, y_offset.val)
}

///|
#borrow(self_)
extern "c" fn moonbit_gtk_text_view_get_visible_rect(
  self_ : TextView,
) -> @gdk.Rectangle = "moonbit_gtk_text_view_get_visible_rect"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_visible_rect.html).
pub fn TextView::get_visible_rect(self : TextView) -> @gdk.Rectangle {
  let __result = moonbit_gtk_text_view_get_visible_rect(self)
  __result
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.get_wrap_mode.html).
#borrow(self)
pub extern "c" fn TextView::get_wrap_mode(self : TextView) -> WrapMode = "moonbit_gtk_text_view_get_wrap_mode"

///|
#borrow(self_, mark)
extern "c" fn moonbit_gtk_text_view_move_mark_onscreen(
  self_ : TextView,
  mark : TextMark,
) -> Bool = "moonbit_gtk_text_view_move_mark_onscreen"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.move_mark_onscreen.html).
pub fn TextView::move_mark_onscreen(self : TextView, mark : &ITextMark) -> Bool {
  moonbit_gtk_text_view_move_mark_onscreen(self, mark.as_text_mark())
}

///|
#borrow(self_, child)
extern "c" fn moonbit_gtk_text_view_move_overlay(
  self_ : TextView,
  child : Widget,
  xpos : Int,
  ypos : Int,
) = "moonbit_gtk_text_view_move_overlay"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.move_overlay.html).
pub fn TextView::move_overlay(
  self : TextView,
  child : &IWidget,
  xpos : Int,
  ypos : Int,
) -> Unit {
  moonbit_gtk_text_view_move_overlay(self, child.as_widget(), xpos, ypos)
}

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_move_visually(
  self_ : TextView,
  iter : TextIter,
  count : Int,
) -> Bool = "moonbit_gtk_text_view_move_visually"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.move_visually.html).
pub fn TextView::move_visually(
  self : TextView,
  iter : TextIter,
  count : Int,
) -> Bool {
  moonbit_gtk_text_view_move_visually(self, iter, count)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.place_cursor_onscreen.html).
#borrow(self)
pub extern "c" fn TextView::place_cursor_onscreen(self : TextView) -> Bool = "moonbit_gtk_text_view_place_cursor_onscreen"

///|
#borrow(self_, child)
extern "c" fn moonbit_gtk_text_view_remove(self_ : TextView, child : Widget) = "moonbit_gtk_text_view_remove"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.remove.html).
pub fn TextView::remove(self : TextView, child : &IWidget) -> Unit {
  moonbit_gtk_text_view_remove(self, child.as_widget())
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.reset_cursor_blink.html).
#borrow(self)
pub extern "c" fn TextView::reset_cursor_blink(self : TextView) = "moonbit_gtk_text_view_reset_cursor_blink"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.reset_im_context.html).
#borrow(self)
pub extern "c" fn TextView::reset_im_context(self : TextView) = "moonbit_gtk_text_view_reset_im_context"

///|
#borrow(self_, mark)
extern "c" fn moonbit_gtk_text_view_scroll_mark_onscreen(
  self_ : TextView,
  mark : TextMark,
) = "moonbit_gtk_text_view_scroll_mark_onscreen"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.scroll_mark_onscreen.html).
pub fn TextView::scroll_mark_onscreen(
  self : TextView,
  mark : &ITextMark,
) -> Unit {
  moonbit_gtk_text_view_scroll_mark_onscreen(self, mark.as_text_mark())
}

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_scroll_to_iter(
  self_ : TextView,
  iter : TextIter,
  within_margin : Double,
  use_align : Bool,
  xalign : Double,
  yalign : Double,
) -> Bool = "moonbit_gtk_text_view_scroll_to_iter"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.scroll_to_iter.html).
pub fn TextView::scroll_to_iter(
  self : TextView,
  iter : TextIter,
  within_margin : Double,
  use_align : Bool,
  xalign : Double,
  yalign : Double,
) -> Bool {
  moonbit_gtk_text_view_scroll_to_iter(
    self, iter, within_margin, use_align, xalign, yalign,
  )
}

///|
#borrow(self_, mark)
extern "c" fn moonbit_gtk_text_view_scroll_to_mark(
  self_ : TextView,
  mark : TextMark,
  within_margin : Double,
  use_align : Bool,
  xalign : Double,
  yalign : Double,
) = "moonbit_gtk_text_view_scroll_to_mark"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.scroll_to_mark.html).
pub fn TextView::scroll_to_mark(
  self : TextView,
  mark : &ITextMark,
  within_margin : Double,
  use_align : Bool,
  xalign : Double,
  yalign : Double,
) -> Unit {
  moonbit_gtk_text_view_scroll_to_mark(
    self,
    mark.as_text_mark(),
    within_margin,
    use_align,
    xalign,
    yalign,
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_accepts_tab.html).
#borrow(self)
pub extern "c" fn TextView::set_accepts_tab(
  self : TextView,
  accepts_tab : Bool,
) = "moonbit_gtk_text_view_set_accepts_tab"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_bottom_margin.html).
#borrow(self)
pub extern "c" fn TextView::set_bottom_margin(
  self : TextView,
  bottom_margin : Int,
) = "moonbit_gtk_text_view_set_bottom_margin"

///|
#borrow(self_, buffer)
extern "c" fn moonbit_gtk_text_view_set_buffer(
  self_ : TextView,
  buffer : @glib.Nullable[TextBuffer],
) = "moonbit_gtk_text_view_set_buffer"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_buffer.html).
pub fn TextView::set_buffer(self : TextView, buffer : &ITextBuffer?) -> Unit {
  moonbit_gtk_text_view_set_buffer(
    self,
    match buffer {
      Some(v) => @glib.Nullable::some(v.as_text_buffer())
      None => @glib.Nullable::null()
    },
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_cursor_visible.html).
#borrow(self)
pub extern "c" fn TextView::set_cursor_visible(self : TextView, setting : Bool) = "moonbit_gtk_text_view_set_cursor_visible"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_editable.html).
#borrow(self)
pub extern "c" fn TextView::set_editable(self : TextView, setting : Bool) = "moonbit_gtk_text_view_set_editable"

///|
#borrow(self_, model)
extern "c" fn moonbit_gtk_text_view_set_extra_menu(
  self_ : TextView,
  model : @glib.Nullable[@gio.MenuModel],
) = "moonbit_gtk_text_view_set_extra_menu"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_extra_menu.html).
pub fn TextView::set_extra_menu(
  self : TextView,
  model : &@gio.IMenuModel?,
) -> Unit {
  moonbit_gtk_text_view_set_extra_menu(
    self,
    match model {
      Some(v) => @glib.Nullable::some(v.as_menu_model())
      None => @glib.Nullable::null()
    },
  )
}

///|
#borrow(self_, widget)
extern "c" fn moonbit_gtk_text_view_set_gutter(
  self_ : TextView,
  win : TextWindowType,
  widget : @glib.Nullable[Widget],
) = "moonbit_gtk_text_view_set_gutter"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_gutter.html).
pub fn TextView::set_gutter(
  self : TextView,
  win : TextWindowType,
  widget : &IWidget?,
) -> Unit {
  moonbit_gtk_text_view_set_gutter(
    self,
    win,
    match widget {
      Some(v) => @glib.Nullable::some(v.as_widget())
      None => @glib.Nullable::null()
    },
  )
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_indent.html).
#borrow(self)
pub extern "c" fn TextView::set_indent(self : TextView, indent : Int) = "moonbit_gtk_text_view_set_indent"

///|
#borrow(self_)
extern "c" fn moonbit_gtk_text_view_set_input_hints(
  self_ : TextView,
  hints : Int,
) = "moonbit_gtk_text_view_set_input_hints"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_input_hints.html).
pub fn TextView::set_input_hints(self : TextView, hints : InputHints) -> Unit {
  moonbit_gtk_text_view_set_input_hints(self, hints.to_int())
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_input_purpose.html).
#borrow(self)
pub extern "c" fn TextView::set_input_purpose(
  self : TextView,
  purpose : InputPurpose,
) = "moonbit_gtk_text_view_set_input_purpose"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_justification.html).
#borrow(self)
pub extern "c" fn TextView::set_justification(
  self : TextView,
  justification : Justification,
) = "moonbit_gtk_text_view_set_justification"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_left_margin.html).
#borrow(self)
pub extern "c" fn TextView::set_left_margin(self : TextView, left_margin : Int) = "moonbit_gtk_text_view_set_left_margin"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_monospace.html).
#borrow(self)
pub extern "c" fn TextView::set_monospace(self : TextView, monospace : Bool) = "moonbit_gtk_text_view_set_monospace"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_overwrite.html).
#borrow(self)
pub extern "c" fn TextView::set_overwrite(self : TextView, overwrite : Bool) = "moonbit_gtk_text_view_set_overwrite"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_pixels_above_lines.html).
#borrow(self)
pub extern "c" fn TextView::set_pixels_above_lines(
  self : TextView,
  pixels_above_lines : Int,
) = "moonbit_gtk_text_view_set_pixels_above_lines"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_pixels_below_lines.html).
#borrow(self)
pub extern "c" fn TextView::set_pixels_below_lines(
  self : TextView,
  pixels_below_lines : Int,
) = "moonbit_gtk_text_view_set_pixels_below_lines"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_pixels_inside_wrap.html).
#borrow(self)
pub extern "c" fn TextView::set_pixels_inside_wrap(
  self : TextView,
  pixels_inside_wrap : Int,
) = "moonbit_gtk_text_view_set_pixels_inside_wrap"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_right_margin.html).
#borrow(self)
pub extern "c" fn TextView::set_right_margin(
  self : TextView,
  right_margin : Int,
) = "moonbit_gtk_text_view_set_right_margin"

///|
#borrow(self_, tabs)
extern "c" fn moonbit_gtk_text_view_set_tabs(
  self_ : TextView,
  tabs : @pango.TabArray,
) = "moonbit_gtk_text_view_set_tabs"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_tabs.html).
pub fn TextView::set_tabs(self : TextView, tabs : @pango.TabArray) -> Unit {
  moonbit_gtk_text_view_set_tabs(self, tabs)
}

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_top_margin.html).
#borrow(self)
pub extern "c" fn TextView::set_top_margin(self : TextView, top_margin : Int) = "moonbit_gtk_text_view_set_top_margin"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.set_wrap_mode.html).
#borrow(self)
pub extern "c" fn TextView::set_wrap_mode(
  self : TextView,
  wrap_mode : WrapMode,
) = "moonbit_gtk_text_view_set_wrap_mode"

///|
#borrow(self_, iter)
extern "c" fn moonbit_gtk_text_view_starts_display_line(
  self_ : TextView,
  iter : TextIter,
) -> Bool = "moonbit_gtk_text_view_starts_display_line"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.starts_display_line.html).
pub fn TextView::starts_display_line(self : TextView, iter : TextIter) -> Bool {
  moonbit_gtk_text_view_starts_display_line(self, iter)
}

///|
#borrow(self_, buffer_x, buffer_y)
extern "c" fn moonbit_gtk_text_view_window_to_buffer_coords(
  self_ : TextView,
  win : TextWindowType,
  window_x : Int,
  window_y : Int,
  buffer_x : Ref[Int],
  buffer_y : Ref[Int],
) = "moonbit_gtk_text_view_window_to_buffer_coords"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/method.TextView.window_to_buffer_coords.html).
pub fn TextView::window_to_buffer_coords(
  self : TextView,
  win : TextWindowType,
  window_x : Int,
  window_y : Int,
) -> (Int, Int) {
  let buffer_x = Ref(0)
  let buffer_y = Ref(0)
  moonbit_gtk_text_view_window_to_buffer_coords(
    self, win, window_x, window_y, buffer_x, buffer_y,
  )
  (buffer_x.val, buffer_y.val)
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_backspace(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_backspace"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.backspace.html).
pub fn TextView::connect_backspace(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_backspace(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_copy_clipboard(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_copy_clipboard"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.copy-clipboard.html).
pub fn TextView::connect_copy_clipboard(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_copy_clipboard(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_cut_clipboard(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_cut_clipboard"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.cut-clipboard.html).
pub fn TextView::connect_cut_clipboard(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_cut_clipboard(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_delete_from_cursor(
  instance : TextView,
  function : FuncRef[
    (TextView, DeleteType, Int, (TextView, DeleteType, Int) -> Unit) -> Unit,
  ],
  closure : (TextView, DeleteType, Int) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_delete_from_cursor"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.delete-from-cursor.html).
pub fn TextView::connect_delete_from_cursor(
  self : TextView,
  f : (TextView, DeleteType, Int) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_delete_from_cursor(
    self,
    fn(instance_, type_, count, f) { f(instance_, type_, count) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_extend_selection(
  instance : TextView,
  function : FuncRef[
    (
      TextView,
      TextExtendSelection,
      TextIter,
      TextIter,
      TextIter,
      (TextView, TextExtendSelection, TextIter, TextIter, TextIter) -> Bool,
    ) -> Bool,
  ],
  closure : (TextView, TextExtendSelection, TextIter, TextIter, TextIter) -> Bool,
) -> UInt64 = "moonbit_gtk_text_view_connect_extend_selection"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.extend-selection.html).
pub fn TextView::connect_extend_selection(
  self : TextView,
  f : (TextView, TextExtendSelection, TextIter, TextIter, TextIter) -> Bool,
) -> UInt64 {
  gtk_text_view_connect_extend_selection(
    self,
    fn(instance_, granularity, location, start, end, f) {
      f(instance_, granularity, location, start, end)
    },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_insert_at_cursor(
  instance : TextView,
  function : FuncRef[(TextView, Bytes, (TextView, String) -> Unit) -> Unit],
  closure : (TextView, String) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_insert_at_cursor"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.insert-at-cursor.html).
pub fn TextView::connect_insert_at_cursor(
  self : TextView,
  f : (TextView, String) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_insert_at_cursor(
    self,
    fn(instance_, string, f) {
      f(instance_, @encoding/utf8.decode_lossy(string))
    },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_insert_emoji(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_insert_emoji"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.insert-emoji.html).
pub fn TextView::connect_insert_emoji(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_insert_emoji(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_move_cursor(
  instance : TextView,
  function : FuncRef[
    (
      TextView,
      MovementStep,
      Int,
      Bool,
      (TextView, MovementStep, Int, Bool) -> Unit,
    ) -> Unit,
  ],
  closure : (TextView, MovementStep, Int, Bool) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_move_cursor"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.move-cursor.html).
pub fn TextView::connect_move_cursor(
  self : TextView,
  f : (TextView, MovementStep, Int, Bool) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_move_cursor(
    self,
    fn(instance_, step, count, extend_selection, f) {
      f(instance_, step, count, extend_selection)
    },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_move_viewport(
  instance : TextView,
  function : FuncRef[
    (TextView, ScrollStep, Int, (TextView, ScrollStep, Int) -> Unit) -> Unit,
  ],
  closure : (TextView, ScrollStep, Int) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_move_viewport"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.move-viewport.html).
pub fn TextView::connect_move_viewport(
  self : TextView,
  f : (TextView, ScrollStep, Int) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_move_viewport(
    self,
    fn(instance_, step, count, f) { f(instance_, step, count) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_paste_clipboard(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_paste_clipboard"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.paste-clipboard.html).
pub fn TextView::connect_paste_clipboard(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_paste_clipboard(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_preedit_changed(
  instance : TextView,
  function : FuncRef[(TextView, Bytes, (TextView, String) -> Unit) -> Unit],
  closure : (TextView, String) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_preedit_changed"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.preedit-changed.html).
pub fn TextView::connect_preedit_changed(
  self : TextView,
  f : (TextView, String) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_preedit_changed(
    self,
    fn(instance_, preedit, f) {
      f(instance_, @encoding/utf8.decode_lossy(preedit))
    },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_select_all(
  instance : TextView,
  function : FuncRef[(TextView, Bool, (TextView, Bool) -> Unit) -> Unit],
  closure : (TextView, Bool) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_select_all"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.select-all.html).
pub fn TextView::connect_select_all(
  self : TextView,
  f : (TextView, Bool) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_select_all(
    self,
    fn(instance_, select, f) { f(instance_, select) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_set_anchor(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_set_anchor"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.set-anchor.html).
pub fn TextView::connect_set_anchor(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_set_anchor(self, fn(instance_, f) { f(instance_) }, f)
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_toggle_cursor_visible(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_toggle_cursor_visible"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.toggle-cursor-visible.html).
pub fn TextView::connect_toggle_cursor_visible(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_toggle_cursor_visible(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(instance)
extern "c" fn gtk_text_view_connect_toggle_overwrite(
  instance : TextView,
  function : FuncRef[(TextView, (TextView) -> Unit) -> Unit],
  closure : (TextView) -> Unit,
) -> UInt64 = "moonbit_gtk_text_view_connect_toggle_overwrite"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/signal.TextView.toggle-overwrite.html).
pub fn TextView::connect_toggle_overwrite(
  self : TextView,
  f : (TextView) -> Unit,
) -> UInt64 {
  gtk_text_view_connect_toggle_overwrite(
    self,
    fn(instance_, f) { f(instance_) },
    f,
  )
}

///|
#borrow(self_)
extern "c" fn moonbit_gtk_text_view_get_im_module(self_ : TextView) -> Bytes = "moonbit_gtk_text_view_get_im_module"

///|
/// [Upstream documentation](https://docs.gtk.org/gtk4/property.TextView.im-module.html).
pub fn TextView::get_im_module(self : TextView) -> String {
  @encoding/utf8.decode_lossy(moonbit_gtk_text_view_get_im_module(self))
}

///|
#borrow(self_, value)
extern "c" fn moonbit_gtk_text_view_set_im_module(
  self_ : TextView,
  value : Bytes,
) = "moonbit_gtk_text_view_set_im_module"

///|
pub fn TextView::set_im_module(self : TextView, value : String) -> Unit {
  moonbit_gtk_text_view_set_im_module(self, @encoding/utf8.encode(value))
}

///|
impl ITextView with fn add_child_at_anchor(self, child, anchor) -> Unit {
  self.as_text_view().add_child_at_anchor(child, anchor)
}

///|
impl ITextView with fn add_overlay(self, child, xpos, ypos) -> Unit {
  self.as_text_view().add_overlay(child, xpos, ypos)
}

///|
impl ITextView with fn backward_display_line(self, iter) -> Bool {
  self.as_text_view().backward_display_line(iter)
}

///|
impl ITextView with fn backward_display_line_start(self, iter) -> Bool {
  self.as_text_view().backward_display_line_start(iter)
}

///|
impl ITextView with fn buffer_to_window_coords(self, win, buffer_x, buffer_y) -> (
  Int,
  Int,
) {
  self.as_text_view().buffer_to_window_coords(win, buffer_x, buffer_y)
}

///|
impl ITextView with fn forward_display_line(self, iter) -> Bool {
  self.as_text_view().forward_display_line(iter)
}

///|
impl ITextView with fn forward_display_line_end(self, iter) -> Bool {
  self.as_text_view().forward_display_line_end(iter)
}

///|
impl ITextView with fn get_accepts_tab(self) -> Bool {
  self.as_text_view().get_accepts_tab()
}

///|
impl ITextView with fn get_bottom_margin(self) -> Int {
  self.as_text_view().get_bottom_margin()
}

///|
impl ITextView with fn get_buffer(self) -> TextBuffer {
  self.as_text_view().get_buffer()
}

///|
impl ITextView with fn get_cursor_locations(self, iter) -> (
  @gdk.Rectangle,
  @gdk.Rectangle,
) {
  self.as_text_view().get_cursor_locations(iter)
}

///|
impl ITextView with fn get_cursor_visible(self) -> Bool {
  self.as_text_view().get_cursor_visible()
}

///|
impl ITextView with fn get_editable(self) -> Bool {
  self.as_text_view().get_editable()
}

///|
impl ITextView with fn get_extra_menu(self) -> @gio.MenuModel? {
  self.as_text_view().get_extra_menu()
}

///|
impl ITextView with fn get_gutter(self, win) -> Widget? {
  self.as_text_view().get_gutter(win)
}

///|
impl ITextView with fn get_indent(self) -> Int {
  self.as_text_view().get_indent()
}

///|
impl ITextView with fn get_input_hints(self) -> InputHints {
  self.as_text_view().get_input_hints()
}

///|
impl ITextView with fn get_input_purpose(self) -> InputPurpose {
  self.as_text_view().get_input_purpose()
}

///|
impl ITextView with fn get_iter_at_location(self, x, y) -> (TextIter, Bool) {
  self.as_text_view().get_iter_at_location(x, y)
}

///|
impl ITextView with fn get_iter_at_position(self, x, y) -> (TextIter, Int, Bool) {
  self.as_text_view().get_iter_at_position(x, y)
}

///|
impl ITextView with fn get_iter_location(self, iter) -> @gdk.Rectangle {
  self.as_text_view().get_iter_location(iter)
}

///|
impl ITextView with fn get_justification(self) -> Justification {
  self.as_text_view().get_justification()
}

///|
impl ITextView with fn get_left_margin(self) -> Int {
  self.as_text_view().get_left_margin()
}

///|
impl ITextView with fn get_line_at_y(self, y) -> (TextIter, Int) {
  self.as_text_view().get_line_at_y(y)
}

///|
impl ITextView with fn get_line_yrange(self, iter) -> (Int, Int) {
  self.as_text_view().get_line_yrange(iter)
}

///|
impl ITextView with fn get_ltr_context(self) -> @pango.Context {
  self.as_text_view().get_ltr_context()
}

///|
impl ITextView with fn get_monospace(self) -> Bool {
  self.as_text_view().get_monospace()
}

///|
impl ITextView with fn get_overwrite(self) -> Bool {
  self.as_text_view().get_overwrite()
}

///|
impl ITextView with fn get_pixels_above_lines(self) -> Int {
  self.as_text_view().get_pixels_above_lines()
}

///|
impl ITextView with fn get_pixels_below_lines(self) -> Int {
  self.as_text_view().get_pixels_below_lines()
}

///|
impl ITextView with fn get_pixels_inside_wrap(self) -> Int {
  self.as_text_view().get_pixels_inside_wrap()
}

///|
impl ITextView with fn get_right_margin(self) -> Int {
  self.as_text_view().get_right_margin()
}

///|
impl ITextView with fn get_rtl_context(self) -> @pango.Context {
  self.as_text_view().get_rtl_context()
}

///|
impl ITextView with fn get_tabs(self) -> @pango.TabArray? {
  self.as_text_view().get_tabs()
}

///|
impl ITextView with fn get_top_margin(self) -> Int {
  self.as_text_view().get_top_margin()
}

///|
impl ITextView with fn get_visible_offset(self) -> (Double, Double) {
  self.as_text_view().get_visible_offset()
}

///|
impl ITextView with fn get_visible_rect(self) -> @gdk.Rectangle {
  self.as_text_view().get_visible_rect()
}

///|
impl ITextView with fn get_wrap_mode(self) -> WrapMode {
  self.as_text_view().get_wrap_mode()
}

///|
impl ITextView with fn move_mark_onscreen(self, mark) -> Bool {
  self.as_text_view().move_mark_onscreen(mark)
}

///|
impl ITextView with fn move_overlay(self, child, xpos, ypos) -> Unit {
  self.as_text_view().move_overlay(child, xpos, ypos)
}

///|
impl ITextView with fn move_visually(self, iter, count) -> Bool {
  self.as_text_view().move_visually(iter, count)
}

///|
impl ITextView with fn place_cursor_onscreen(self) -> Bool {
  self.as_text_view().place_cursor_onscreen()
}

///|
impl ITextView with fn remove(self, child) -> Unit {
  self.as_text_view().remove(child)
}

///|
impl ITextView with fn reset_cursor_blink(self) -> Unit {
  self.as_text_view().reset_cursor_blink()
}

///|
impl ITextView with fn reset_im_context(self) -> Unit {
  self.as_text_view().reset_im_context()
}

///|
impl ITextView with fn scroll_mark_onscreen(self, mark) -> Unit {
  self.as_text_view().scroll_mark_onscreen(mark)
}

///|
impl ITextView with fn scroll_to_iter(
  self,
  iter,
  within_margin,
  use_align,
  xalign,
  yalign,
) -> Bool {
  self
  .as_text_view()
  .scroll_to_iter(iter, within_margin, use_align, xalign, yalign)
}

///|
impl ITextView with fn scroll_to_mark(
  self,
  mark,
  within_margin,
  use_align,
  xalign,
  yalign,
) -> Unit {
  self
  .as_text_view()
  .scroll_to_mark(mark, within_margin, use_align, xalign, yalign)
}

///|
impl ITextView with fn set_accepts_tab(self, accepts_tab) -> Unit {
  self.as_text_view().set_accepts_tab(accepts_tab)
}

///|
impl ITextView with fn set_bottom_margin(self, bottom_margin) -> Unit {
  self.as_text_view().set_bottom_margin(bottom_margin)
}

///|
impl ITextView with fn set_buffer(self, buffer) -> Unit {
  self.as_text_view().set_buffer(buffer)
}

///|
impl ITextView with fn set_cursor_visible(self, setting) -> Unit {
  self.as_text_view().set_cursor_visible(setting)
}

///|
impl ITextView with fn set_editable(self, setting) -> Unit {
  self.as_text_view().set_editable(setting)
}

///|
impl ITextView with fn set_extra_menu(self, model) -> Unit {
  self.as_text_view().set_extra_menu(model)
}

///|
impl ITextView with fn set_gutter(self, win, widget) -> Unit {
  self.as_text_view().set_gutter(win, widget)
}

///|
impl ITextView with fn set_indent(self, indent) -> Unit {
  self.as_text_view().set_indent(indent)
}

///|
impl ITextView with fn set_input_hints(self, hints) -> Unit {
  self.as_text_view().set_input_hints(hints)
}

///|
impl ITextView with fn set_input_purpose(self, purpose) -> Unit {
  self.as_text_view().set_input_purpose(purpose)
}

///|
impl ITextView with fn set_justification(self, justification) -> Unit {
  self.as_text_view().set_justification(justification)
}

///|
impl ITextView with fn set_left_margin(self, left_margin) -> Unit {
  self.as_text_view().set_left_margin(left_margin)
}

///|
impl ITextView with fn set_monospace(self, monospace) -> Unit {
  self.as_text_view().set_monospace(monospace)
}

///|
impl ITextView with fn set_overwrite(self, overwrite) -> Unit {
  self.as_text_view().set_overwrite(overwrite)
}

///|
impl ITextView with fn set_pixels_above_lines(self, pixels_above_lines) -> Unit {
  self.as_text_view().set_pixels_above_lines(pixels_above_lines)
}

///|
impl ITextView with fn set_pixels_below_lines(self, pixels_below_lines) -> Unit {
  self.as_text_view().set_pixels_below_lines(pixels_below_lines)
}

///|
impl ITextView with fn set_pixels_inside_wrap(self, pixels_inside_wrap) -> Unit {
  self.as_text_view().set_pixels_inside_wrap(pixels_inside_wrap)
}

///|
impl ITextView with fn set_right_margin(self, right_margin) -> Unit {
  self.as_text_view().set_right_margin(right_margin)
}

///|
impl ITextView with fn set_tabs(self, tabs) -> Unit {
  self.as_text_view().set_tabs(tabs)
}

///|
impl ITextView with fn set_top_margin(self, top_margin) -> Unit {
  self.as_text_view().set_top_margin(top_margin)
}

///|
impl ITextView with fn set_wrap_mode(self, wrap_mode) -> Unit {
  self.as_text_view().set_wrap_mode(wrap_mode)
}

///|
impl ITextView with fn starts_display_line(self, iter) -> Bool {
  self.as_text_view().starts_display_line(iter)
}

///|
impl ITextView with fn window_to_buffer_coords(self, win, window_x, window_y) -> (
  Int,
  Int,
) {
  self.as_text_view().window_to_buffer_coords(win, window_x, window_y)
}

///|
impl ITextView with fn connect_backspace(self, f) -> UInt64 {
  self.as_text_view().connect_backspace(f)
}

///|
impl ITextView with fn connect_copy_clipboard(self, f) -> UInt64 {
  self.as_text_view().connect_copy_clipboard(f)
}

///|
impl ITextView with fn connect_cut_clipboard(self, f) -> UInt64 {
  self.as_text_view().connect_cut_clipboard(f)
}

///|
impl ITextView with fn connect_delete_from_cursor(self, f) -> UInt64 {
  self.as_text_view().connect_delete_from_cursor(f)
}

///|
impl ITextView with fn connect_extend_selection(self, f) -> UInt64 {
  self.as_text_view().connect_extend_selection(f)
}

///|
impl ITextView with fn connect_insert_at_cursor(self, f) -> UInt64 {
  self.as_text_view().connect_insert_at_cursor(f)
}

///|
impl ITextView with fn connect_insert_emoji(self, f) -> UInt64 {
  self.as_text_view().connect_insert_emoji(f)
}

///|
impl ITextView with fn connect_move_cursor(self, f) -> UInt64 {
  self.as_text_view().connect_move_cursor(f)
}

///|
impl ITextView with fn connect_move_viewport(self, f) -> UInt64 {
  self.as_text_view().connect_move_viewport(f)
}

///|
impl ITextView with fn connect_paste_clipboard(self, f) -> UInt64 {
  self.as_text_view().connect_paste_clipboard(f)
}

///|
impl ITextView with fn connect_preedit_changed(self, f) -> UInt64 {
  self.as_text_view().connect_preedit_changed(f)
}

///|
impl ITextView with fn connect_select_all(self, f) -> UInt64 {
  self.as_text_view().connect_select_all(f)
}

///|
impl ITextView with fn connect_set_anchor(self, f) -> UInt64 {
  self.as_text_view().connect_set_anchor(f)
}

///|
impl ITextView with fn connect_toggle_cursor_visible(self, f) -> UInt64 {
  self.as_text_view().connect_toggle_cursor_visible(f)
}

///|
impl ITextView with fn connect_toggle_overwrite(self, f) -> UInt64 {
  self.as_text_view().connect_toggle_overwrite(f)
}

///|
pub fn TextView::as_widget(self : TextView) -> Widget = "%identity"

///|
pub impl IWidget for TextView with fn as_widget(self) {
  self.as_widget()
}

///|
pub fn TextView::as_gobject_object(self : TextView) -> @gobject.Object = "%identity"

///|
pub impl @gobject.IObject for TextView with fn as_object(self) {
  self.as_gobject_object()
}