1 /* gtktextareapeer.c -- Native implementation of GtkTextAreaPeer
2 Copyright (C) 1998, 1999, 2003 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING. If not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library. Thus, the terms and
23 conditions of the GNU General Public License cover the whole
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module. An independent module is a module which is not derived from
33 or based on this library. If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so. If you do not wish to do so, delete this
36 exception statement from your version. */
40 #include "gnu_java_awt_peer_gtk_GtkTextAreaPeer.h"
42 #define TEXT_FROM_SW(obj) (GTK_TEXT_VIEW(GTK_SCROLLED_WINDOW (obj)->container.child))
43 JNIEXPORT void JNICALL
44 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_create
45 (JNIEnv *env, jobject obj,
46 jint textview_width, jint textview_height, jint scroll)
50 /* Create global reference and save it for future use */
51 NSA_SET_GLOBAL_REF (env, obj);
55 text = gtk_text_view_new ();
56 gtk_widget_set_size_request (text, textview_width, textview_height);
57 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW (text), TRUE);
59 gtk_widget_show (text);
61 sw = gtk_scrolled_window_new (NULL, NULL);
62 gtk_container_add (GTK_CONTAINER (sw), text);
64 gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
65 /* horizontal scrollbar */
66 (scroll == AWT_TEXTAREA_SCROLLBARS_BOTH
67 || scroll == AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY) ?
68 GTK_POLICY_ALWAYS : GTK_POLICY_NEVER,
69 /* vertical scrollbar */
70 (scroll == AWT_TEXTAREA_SCROLLBARS_BOTH
71 || scroll == AWT_TEXTAREA_SCROLLBARS_VERTICAL_ONLY) ?
72 GTK_POLICY_ALWAYS : GTK_POLICY_NEVER);
74 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text),
75 (scroll == AWT_TEXTAREA_SCROLLBARS_BOTH
76 || scroll == AWT_TEXTAREA_SCROLLBARS_HORIZONTAL_ONLY)
77 ? GTK_WRAP_NONE : GTK_WRAP_WORD);
81 NSA_SET_PTR (env, obj, sw);
84 JNIEXPORT void JNICALL
85 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_insert
86 (JNIEnv *env, jobject obj, jstring contents, jint position)
95 ptr = NSA_GET_PTR (env, obj);
96 str = (*env)->GetStringUTFChars (env, contents, NULL);
100 text = GTK_WIDGET (TEXT_FROM_SW (ptr));
102 buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
103 gtk_text_buffer_get_iter_at_offset (buf, &iter, pos);
104 gtk_text_buffer_insert (buf, &iter, str, strlen (str));
106 gdk_threads_leave ();
108 (*env)->ReleaseStringUTFChars (env, contents, str);
111 JNIEXPORT void JNICALL
112 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_replaceRange
113 (JNIEnv *env, jobject obj, jstring contents, jint start, jint end)
117 GtkTextIter iter, startIter, endIter;
123 ptr = NSA_GET_PTR (env, obj);
124 str = (*env)->GetStringUTFChars (env, contents, NULL);
126 gdk_threads_enter ();
128 text = GTK_WIDGET (TEXT_FROM_SW (ptr));
130 buf = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
132 gtk_text_buffer_get_iter_at_offset (buf, &startIter, mystart);
133 gtk_text_buffer_get_iter_at_offset (buf, &endIter, myend);
134 gtk_text_buffer_delete (buf, &startIter, &endIter);
136 gtk_text_buffer_get_iter_at_offset (buf, &iter, mystart);
137 gtk_text_buffer_insert(buf, &iter, str, strlen (str));
139 gdk_threads_leave ();
140 (*env)->ReleaseStringUTFChars (env, contents, str);
143 JNIEXPORT void JNICALL
144 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont
145 (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
147 const char *font_name;
150 PangoFontDescription *font_desc;
152 ptr = NSA_GET_PTR (env, obj);
154 text = GTK_WIDGET (TEXT_FROM_SW (ptr));
156 font_name = (*env)->GetStringUTFChars (env, name, NULL);
160 font_desc = pango_font_description_from_string (font_name);
161 pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
163 if (style & AWT_STYLE_BOLD)
164 pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
166 if (style & AWT_STYLE_ITALIC)
167 pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
169 gtk_widget_modify_font (GTK_WIDGET (text), font_desc);
171 pango_font_description_free (font_desc);
175 (*env)->ReleaseStringUTFChars (env, name, font_name);
178 JNIEXPORT void JNICALL
179 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetRequestFocus
180 (JNIEnv *env, jobject obj)
185 ptr = NSA_GET_PTR (env, obj);
187 gdk_threads_enter ();
189 text = GTK_WIDGET (TEXT_FROM_SW (ptr));
191 gtk_widget_grab_focus (text);
193 gdk_threads_leave ();
196 JNIEXPORT jint JNICALL
197 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getHScrollbarHeight
198 (JNIEnv *env, jobject obj)
201 GtkScrolledWindow *sw;
202 GtkRequisition requisition;
206 ptr = NSA_GET_PTR (env, obj);
208 gdk_threads_enter ();
209 sw = GTK_SCROLLED_WINDOW (ptr);
213 gtk_widget_size_request (sw->hscrollbar, &requisition);
214 gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
215 height = requisition.height + spacing;
218 gdk_threads_leave ();
223 JNIEXPORT jint JNICALL
224 Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_getVScrollbarWidth
225 (JNIEnv *env, jobject obj)
228 GtkScrolledWindow *sw;
229 GtkRequisition requisition;
233 ptr = NSA_GET_PTR (env, obj);
235 gdk_threads_enter ();
236 sw = GTK_SCROLLED_WINDOW (ptr);
240 gtk_widget_size_request (sw->vscrollbar, &requisition);
241 gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
242 width = requisition.width + spacing;
245 gdk_threads_leave ();