OSDN Git Service

Initial revision
[pf3gnuchains/gcc-fork.git] / libjava / classpath / native / jni / gtk-peer / gnu_java_awt_peer_gtk_GtkScrollPanePeer.c
1 /* gtkscrollpanepeer.c -- Native implementation of GtkScrollPanePeer
2    Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
3
4 This file is part of GNU Classpath.
5
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)
9 any later version.
10
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.
15
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., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301 USA.
20
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
24 combination.
25
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. */
37
38
39 #include "gtkpeer.h"
40 #include "gnu_java_awt_peer_gtk_GtkScrollPanePeer.h"
41
42 #define AWT_SCROLLPANE_SCROLLBARS_AS_NEEDED 0
43 #define AWT_SCROLLPANE_SCROLLBARS_ALWAYS 1
44 #define AWT_SCROLLPANE_SCROLLBARS_NEVER 2
45
46 JNIEXPORT void JNICALL 
47 Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_create 
48   (JNIEnv *env, jobject obj, int width, int height)
49 {
50   GtkWidget *sw;
51
52   gdk_threads_enter ();
53   
54   /* Create global reference and save it for future use */
55   NSA_SET_GLOBAL_REF (env, obj);
56
57   sw = gtk_scrolled_window_new (NULL, NULL);
58
59   gtk_widget_set_size_request (sw, width, height);
60
61   NSA_SET_PTR (env, obj, sw);
62
63   gdk_threads_leave ();
64 }
65
66 JNIEXPORT void JNICALL 
67 Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setScrollPosition
68   (JNIEnv *env, jobject obj, jint x, jint y)
69 {
70   GtkAdjustment *hadj, *vadj;
71   GtkScrolledWindow *sw;
72   void *ptr;
73
74   gdk_threads_enter ();
75
76   ptr = NSA_GET_PTR (env, obj);
77
78   sw = GTK_SCROLLED_WINDOW (ptr);
79
80   hadj = gtk_scrolled_window_get_hadjustment (sw);
81   vadj = gtk_scrolled_window_get_vadjustment (sw);
82
83   gtk_adjustment_set_value (hadj, x);
84   gtk_adjustment_set_value (vadj, y);
85
86   gdk_threads_leave ();
87 }
88
89 JNIEXPORT void JNICALL 
90 Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetHScrollIncrement
91   (JNIEnv *env, jobject obj, jint u)
92 {
93   GtkAdjustment *hadj;
94   GtkScrolledWindow *sw;
95   void *ptr;
96
97   gdk_threads_enter ();
98
99   ptr = NSA_GET_PTR (env, obj);
100
101   sw = GTK_SCROLLED_WINDOW(ptr);
102
103   hadj = gtk_scrolled_window_get_hadjustment (sw);
104   hadj->step_increment = u;
105
106   gdk_threads_leave ();
107 }
108
109 JNIEXPORT void JNICALL 
110 Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_gtkScrolledWindowSetVScrollIncrement
111   (JNIEnv *env, jobject obj, jint u)
112 {
113   GtkAdjustment *vadj;
114   GtkScrolledWindow *sw;
115   void *ptr;
116
117   gdk_threads_enter ();
118
119   ptr = NSA_GET_PTR (env, obj);
120
121   sw = GTK_SCROLLED_WINDOW(ptr);
122
123   vadj = gtk_scrolled_window_get_hadjustment (sw);
124   vadj->step_increment = u;
125
126   gdk_threads_leave ();
127 }
128
129 JNIEXPORT jint JNICALL 
130 Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getHScrollbarHeight
131   (JNIEnv *env, jobject obj)
132 {
133   void *ptr;
134   GtkScrolledWindow *sw;
135   GtkRequisition requisition;
136   jint height = 0;
137   jint spacing = 0;
138
139   gdk_threads_enter ();
140
141   ptr = NSA_GET_PTR (env, obj);
142
143   sw = GTK_SCROLLED_WINDOW (ptr);
144
145   gtk_widget_size_request (sw->hscrollbar, &requisition);
146   gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
147   height = requisition.height + spacing;
148
149   gdk_threads_leave ();
150
151   return height;
152 }
153
154 JNIEXPORT jint JNICALL 
155 Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_getVScrollbarWidth
156   (JNIEnv *env, jobject obj)
157 {
158   void *ptr;
159   GtkScrolledWindow *sw;
160   GtkRequisition requisition;
161   jint width = 0;
162   jint spacing = 0;
163
164   gdk_threads_enter ();
165
166   ptr = NSA_GET_PTR (env, obj);
167
168   sw = GTK_SCROLLED_WINDOW (ptr);
169
170   gtk_widget_size_request (sw->vscrollbar, &requisition);
171   gtk_widget_style_get (GTK_WIDGET (sw), "scrollbar_spacing", &spacing, NULL);
172   width = requisition.width + spacing;
173
174   gdk_threads_leave ();
175
176   return width;
177 }
178
179 JNIEXPORT void JNICALL
180 Java_gnu_java_awt_peer_gtk_GtkScrollPanePeer_setPolicy
181   (JNIEnv *env, jobject obj, jint policy)
182 {
183   void *ptr;
184
185   gdk_threads_enter ();
186
187   ptr = NSA_GET_PTR (env, obj);
188
189   switch (policy)
190     {
191     case AWT_SCROLLPANE_SCROLLBARS_AS_NEEDED:
192       policy = GTK_POLICY_AUTOMATIC;
193       break;
194     case AWT_SCROLLPANE_SCROLLBARS_ALWAYS:
195       policy = GTK_POLICY_ALWAYS;
196       break;
197     case AWT_SCROLLPANE_SCROLLBARS_NEVER:
198       policy = GTK_POLICY_NEVER;
199       break;
200     }
201
202   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (ptr), policy, policy);
203
204   gdk_threads_leave ();
205 }