Commit 4a8e884afc36cf962af227b7c07a5fe737c7787d
1 parent
3504b016
Exists in
master
and in
5 other branches
Ajustando tamanho mínimo da janela do terminal
Showing
2 changed files
with
101 additions
and
19 deletions
Show diff stats
src/gtk/v3270/v3270.h
src/gtk/v3270/widget.c
... | ... | @@ -116,7 +116,6 @@ static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolea |
116 | 116 | break; |
117 | 117 | |
118 | 118 | case LIB3270_TOGGLE_BOLD: |
119 | - widget->font_weight = lib3270_get_toggle(widget->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; | |
120 | 119 | v3270_reload(GTK_WIDGET(widget)); |
121 | 120 | gtk_widget_queue_draw(GTK_WIDGET(widget)); |
122 | 121 | break; |
... | ... | @@ -150,6 +149,70 @@ static gboolean v3270_popup_menu(GtkWidget * widget) |
150 | 149 | return TRUE; |
151 | 150 | } |
152 | 151 | |
152 | +#if GTK_CHECK_VERSION(3,0,0) | |
153 | + | |
154 | +static GtkSizeRequestMode get_request_mode(GtkWidget *widget) | |
155 | +{ | |
156 | + int rows, cols; | |
157 | + | |
158 | + trace("%s",__FUNCTION__); | |
159 | + | |
160 | + lib3270_get_screen_size(GTK_V3270(widget)->host,&rows,&cols); | |
161 | + | |
162 | + return rows > cols ? GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT : GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH; | |
163 | + | |
164 | +} | |
165 | + | |
166 | +void get_preferred_height(GtkWidget *widget, gint *minimum_height, gint *natural_height) | |
167 | +{ | |
168 | + int height = GTK_V3270(widget)->minimum_height; | |
169 | + | |
170 | + if(minimum_height) | |
171 | + *minimum_height = height ? height : 10; | |
172 | + | |
173 | + if(natural_height) | |
174 | + *natural_height = height ? height : 200; | |
175 | + | |
176 | +} | |
177 | + | |
178 | +void get_preferred_width(GtkWidget *widget, gint *minimum_width, gint *natural_width) | |
179 | +{ | |
180 | + int width = GTK_V3270(widget)->minimum_width; | |
181 | + | |
182 | + if(minimum_width) | |
183 | + *minimum_width = width ? width : 10; | |
184 | + | |
185 | + if(natural_width) | |
186 | + *natural_width = width ? width : 320; | |
187 | +} | |
188 | + | |
189 | +/* | |
190 | +void get_preferred_height_for_width(GtkWidget *widget, gint width, gint *minimum_height, gint *natural_height) | |
191 | +{ | |
192 | + trace("%s",__FUNCTION__); | |
193 | + | |
194 | + if(minimum_height) | |
195 | + *minimum_height = 10; | |
196 | + | |
197 | + if(natural_height) | |
198 | + *natural_height = 10; | |
199 | +} | |
200 | + | |
201 | +static void get_preferred_width_for_height(GtkWidget *widget,gint height, gint *minimum_width, gint *natural_width) | |
202 | +{ | |
203 | + trace("%s",__FUNCTION__); | |
204 | + | |
205 | + if(minimum_width) | |
206 | + *minimum_width = 10; | |
207 | + | |
208 | + if(natural_width) | |
209 | + *natural_width = 10; | |
210 | + | |
211 | +} | |
212 | +*/ | |
213 | + | |
214 | +#endif // GTK(3,0,0) | |
215 | + | |
153 | 216 | static void v3270_class_init(v3270Class *klass) |
154 | 217 | { |
155 | 218 | GObjectClass * gobject_class = G_OBJECT_CLASS(klass); |
... | ... | @@ -157,26 +220,31 @@ static void v3270_class_init(v3270Class *klass) |
157 | 220 | |
158 | 221 | lib3270_set_log_handler(loghandler); |
159 | 222 | |
160 | - widget_class->realize = v3270_realize; | |
161 | - widget_class->size_allocate = v3270_size_allocate; | |
162 | - widget_class->key_press_event = v3270_key_press_event; | |
163 | - widget_class->key_release_event = v3270_key_release_event; | |
164 | - widget_class->focus_in_event = v3270_focus_in_event; | |
165 | - widget_class->focus_out_event = v3270_focus_out_event; | |
166 | - widget_class->button_press_event = v3270_button_press_event; | |
167 | - widget_class->button_release_event = v3270_button_release_event; | |
168 | - widget_class->motion_notify_event = v3270_motion_notify_event; | |
169 | - widget_class->popup_menu = v3270_popup_menu; | |
170 | - | |
171 | - klass->activate = v3270_activate; | |
172 | - klass->toggle_changed = v3270_toggle_changed; | |
173 | - klass->message_changed = v3270_update_message; | |
174 | - klass->luname_changed = v3270_update_luname; | |
223 | + widget_class->realize = v3270_realize; | |
224 | + widget_class->size_allocate = v3270_size_allocate; | |
225 | + widget_class->key_press_event = v3270_key_press_event; | |
226 | + widget_class->key_release_event = v3270_key_release_event; | |
227 | + widget_class->focus_in_event = v3270_focus_in_event; | |
228 | + widget_class->focus_out_event = v3270_focus_out_event; | |
229 | + widget_class->button_press_event = v3270_button_press_event; | |
230 | + widget_class->button_release_event = v3270_button_release_event; | |
231 | + widget_class->motion_notify_event = v3270_motion_notify_event; | |
232 | + widget_class->popup_menu = v3270_popup_menu; | |
233 | + | |
234 | + klass->activate = v3270_activate; | |
235 | + klass->toggle_changed = v3270_toggle_changed; | |
236 | + klass->message_changed = v3270_update_message; | |
237 | + klass->luname_changed = v3270_update_luname; | |
175 | 238 | |
176 | 239 | #if GTK_CHECK_VERSION(3,0,0) |
177 | 240 | |
178 | - widget_class->destroy = v3270_destroy; | |
179 | - widget_class->draw = v3270_draw; | |
241 | + widget_class->get_preferred_height = get_preferred_height; | |
242 | + widget_class->get_preferred_width = get_preferred_width; | |
243 | +// widget_class->get_preferred_width_for_height = get_preferred_width_for_height; | |
244 | +// widget_class->get_preferred_height_for_width = get_preferred_height_for_width; | |
245 | + | |
246 | + widget_class->destroy = v3270_destroy; | |
247 | + widget_class->draw = v3270_draw; | |
180 | 248 | |
181 | 249 | #else |
182 | 250 | |
... | ... | @@ -193,7 +261,6 @@ static void v3270_class_init(v3270Class *klass) |
193 | 261 | |
194 | 262 | v3270_register_io_handlers(klass); |
195 | 263 | |
196 | - | |
197 | 264 | // Cursors |
198 | 265 | v3270_cursor[LIB3270_CURSOR_NORMAL] = gdk_cursor_new(GDK_XTERM); |
199 | 266 | v3270_cursor[LIB3270_CURSOR_WAITING] = gdk_cursor_new(GDK_WATCH); |
... | ... | @@ -329,6 +396,8 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig |
329 | 396 | |
330 | 397 | lib3270_get_screen_size(terminal->host,&rows,&cols); |
331 | 398 | |
399 | + terminal->font_weight = lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_BOLD) ? CAIRO_FONT_WEIGHT_BOLD : CAIRO_FONT_WEIGHT_NORMAL; | |
400 | + | |
332 | 401 | cairo_select_font_face(cr, terminal->font_family, CAIRO_FONT_SLANT_NORMAL,terminal->font_weight); |
333 | 402 | |
334 | 403 | for(f=0;font_size[f];f++) |
... | ... | @@ -336,12 +405,22 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig |
336 | 405 | cairo_set_font_size(cr,font_size[f]); |
337 | 406 | cairo_font_extents(cr,&extents); |
338 | 407 | |
408 | + if(f == 0) | |
409 | + { | |
410 | + terminal->minimum_width = (cols * extents.max_x_advance); | |
411 | + terminal->minimum_height = ((rows+1) * (extents.height + extents.descent)) + (OIA_TOP_MARGIN+2); | |
412 | + } | |
413 | + | |
339 | 414 | if( HEIGHT_IN_PIXELS(terminal,(extents.height+extents.descent)) < height && WIDTH_IN_PIXELS(terminal,extents.max_x_advance) < width ) |
340 | 415 | size = font_size[f]; |
341 | 416 | } |
342 | 417 | |
343 | 418 | cairo_set_font_size(cr,size); |
344 | 419 | |
420 | +#if !GTK_CHECK_VERSION(3,0,0) | |
421 | + gtk_widget_set_size_request(GTK_WIDGET(terminal),terminal->minimum_width,terminal->minimum_height); | |
422 | +#endif // !GTK(3,0,0) | |
423 | + | |
345 | 424 | /* |
346 | 425 | double sx, sy; |
347 | 426 | cairo_matrix_t font_matrix; | ... | ... |