mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-03-21 22:28:37 -05:00
Move more functions into the new gtkmisc.c.
Several utility functions I've written over the last few weeks were in rather random places because I didn't have a central gtkmisc.c to put them in. Now I've got one, put them there!
This commit is contained in:
parent
dc11417aee
commit
49ff9f480e
@ -1077,15 +1077,6 @@ static void set_transient_window_pos(GtkWidget *parent, GtkWidget *child)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void align_label_left(GtkLabel *label)
|
|
||||||
{
|
|
||||||
#if GTK_CHECK_VERSION(3,16,0)
|
|
||||||
gtk_label_set_xalign(label, 0.0);
|
|
||||||
#else
|
|
||||||
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void dlg_error_msg(void *dlg, const char *msg)
|
void dlg_error_msg(void *dlg, const char *msg)
|
||||||
{
|
{
|
||||||
struct dlgparam *dp = (struct dlgparam *)dlg;
|
struct dlgparam *dp = (struct dlgparam *)dlg;
|
||||||
@ -3413,13 +3404,6 @@ int messagebox(GtkWidget *parentwin, const char *title, const char *msg,
|
|||||||
return dp.retval;
|
return dp.retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
int string_width(const char *text)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
get_label_text_dimensions(text, &ret, NULL);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int reallyclose(void *frontend)
|
int reallyclose(void *frontend)
|
||||||
{
|
{
|
||||||
char *title = dupcat(appname, " Exit Confirmation", NULL);
|
char *title = dupcat(appname, " Exit Confirmation", NULL);
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "putty.h"
|
#include "putty.h"
|
||||||
#include "gtkfont.h"
|
#include "gtkfont.h"
|
||||||
#include "gtkcompat.h"
|
#include "gtkcompat.h"
|
||||||
|
#include "gtkmisc.h"
|
||||||
#include "tree234.h"
|
#include "tree234.h"
|
||||||
|
|
||||||
#ifndef NOT_X_WINDOWS
|
#ifndef NOT_X_WINDOWS
|
||||||
@ -1992,46 +1993,6 @@ static void multifont_draw_text(unifont_drawctx *ctx, unifont *font, int x,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
|
||||||
* Utility routine used by the code below, and also gtkdlg.c.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void get_label_text_dimensions(const char *text, int *width, int *height)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Determine the dimensions of a piece of text in the standard
|
|
||||||
* font used in GTK interface elements like labels. We do this by
|
|
||||||
* instantiating an actual GtkLabel, and then querying its size.
|
|
||||||
*
|
|
||||||
* But GTK2 and GTK3 require us to query the size completely
|
|
||||||
* differently. I'm sure there ought to be an easier approach than
|
|
||||||
* the way I'm doing this in GTK3, too!
|
|
||||||
*/
|
|
||||||
GtkWidget *label = gtk_label_new(text);
|
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(3,0,0)
|
|
||||||
PangoLayout *layout = gtk_label_get_layout(GTK_LABEL(label));
|
|
||||||
PangoRectangle logrect;
|
|
||||||
pango_layout_get_extents(layout, NULL, &logrect);
|
|
||||||
if (width)
|
|
||||||
*width = logrect.width / PANGO_SCALE;
|
|
||||||
if (height)
|
|
||||||
*height = logrect.height / PANGO_SCALE;
|
|
||||||
#else
|
|
||||||
GtkRequisition req;
|
|
||||||
gtk_widget_size_request(label, &req);
|
|
||||||
if (width)
|
|
||||||
*width = req.width;
|
|
||||||
if (height)
|
|
||||||
*height = req.height;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
g_object_ref_sink(G_OBJECT(label));
|
|
||||||
#if GTK_CHECK_VERSION(2,10,0)
|
|
||||||
g_object_unref(label);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#if GTK_CHECK_VERSION(2,0,0)
|
#if GTK_CHECK_VERSION(2,0,0)
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
@ -15,6 +15,58 @@
|
|||||||
#include "putty.h"
|
#include "putty.h"
|
||||||
#include "gtkcompat.h"
|
#include "gtkcompat.h"
|
||||||
|
|
||||||
|
void get_label_text_dimensions(const char *text, int *width, int *height)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Determine the dimensions of a piece of text in the standard
|
||||||
|
* font used in GTK interface elements like labels. We do this by
|
||||||
|
* instantiating an actual GtkLabel, and then querying its size.
|
||||||
|
*
|
||||||
|
* But GTK2 and GTK3 require us to query the size completely
|
||||||
|
* differently. I'm sure there ought to be an easier approach than
|
||||||
|
* the way I'm doing this in GTK3, too!
|
||||||
|
*/
|
||||||
|
GtkWidget *label = gtk_label_new(text);
|
||||||
|
|
||||||
|
#if GTK_CHECK_VERSION(3,0,0)
|
||||||
|
PangoLayout *layout = gtk_label_get_layout(GTK_LABEL(label));
|
||||||
|
PangoRectangle logrect;
|
||||||
|
pango_layout_get_extents(layout, NULL, &logrect);
|
||||||
|
if (width)
|
||||||
|
*width = logrect.width / PANGO_SCALE;
|
||||||
|
if (height)
|
||||||
|
*height = logrect.height / PANGO_SCALE;
|
||||||
|
#else
|
||||||
|
GtkRequisition req;
|
||||||
|
gtk_widget_size_request(label, &req);
|
||||||
|
if (width)
|
||||||
|
*width = req.width;
|
||||||
|
if (height)
|
||||||
|
*height = req.height;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
g_object_ref_sink(G_OBJECT(label));
|
||||||
|
#if GTK_CHECK_VERSION(2,10,0)
|
||||||
|
g_object_unref(label);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int string_width(const char *text)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
get_label_text_dimensions(text, &ret, NULL);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void align_label_left(GtkLabel *label)
|
||||||
|
{
|
||||||
|
#if GTK_CHECK_VERSION(3,16,0)
|
||||||
|
gtk_label_set_xalign(label, 0.0);
|
||||||
|
#else
|
||||||
|
gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
* Functions to arrange controls in a basically dialog-like window.
|
* Functions to arrange controls in a basically dialog-like window.
|
||||||
*
|
*
|
||||||
|
@ -5,6 +5,11 @@
|
|||||||
#ifndef PUTTY_GTKMISC_H
|
#ifndef PUTTY_GTKMISC_H
|
||||||
#define PUTTY_GTKMISC_H
|
#define PUTTY_GTKMISC_H
|
||||||
|
|
||||||
|
int string_width(const char *text);
|
||||||
|
void get_label_text_dimensions(const char *text, int *width, int *height);
|
||||||
|
|
||||||
|
void align_label_left(GtkLabel *label);
|
||||||
|
|
||||||
GtkWidget *our_dialog_new(void);
|
GtkWidget *our_dialog_new(void);
|
||||||
void our_dialog_add_to_content_area(GtkWindow *dlg, GtkWidget *w,
|
void our_dialog_add_to_content_area(GtkWindow *dlg, GtkWidget *w,
|
||||||
gboolean expand, gboolean fill,
|
gboolean expand, gboolean fill,
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "terminal.h"
|
#include "terminal.h"
|
||||||
#include "gtkcompat.h"
|
#include "gtkcompat.h"
|
||||||
#include "gtkfont.h"
|
#include "gtkfont.h"
|
||||||
|
#include "gtkmisc.h"
|
||||||
|
|
||||||
#ifndef NOT_X_WINDOWS
|
#ifndef NOT_X_WINDOWS
|
||||||
#include <gdk/gdkx.h>
|
#include <gdk/gdkx.h>
|
||||||
|
@ -109,7 +109,6 @@ int reallyclose(void *frontend);
|
|||||||
#ifdef MAY_REFER_TO_GTK_IN_HEADERS
|
#ifdef MAY_REFER_TO_GTK_IN_HEADERS
|
||||||
int messagebox(GtkWidget *parentwin, const char *title,
|
int messagebox(GtkWidget *parentwin, const char *title,
|
||||||
const char *msg, int minwid, ...);
|
const char *msg, int minwid, ...);
|
||||||
int string_width(const char *text);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Things pterm.c needs from {ptermm,uxputty}.c */
|
/* Things pterm.c needs from {ptermm,uxputty}.c */
|
||||||
@ -151,13 +150,6 @@ void unix_setup_config_box(struct controlbox *b, int midsession, int protocol);
|
|||||||
/* gtkcfg.c */
|
/* gtkcfg.c */
|
||||||
void gtk_setup_config_box(struct controlbox *b, int midsession, void *window);
|
void gtk_setup_config_box(struct controlbox *b, int midsession, void *window);
|
||||||
|
|
||||||
/* General GTK helper functions, which could be in any source file and
|
|
||||||
* it doesn't really matter */
|
|
||||||
void get_label_text_dimensions(const char *text, int *width, int *height);
|
|
||||||
#ifdef MAY_REFER_TO_GTK_IN_HEADERS
|
|
||||||
void align_label_left(GtkLabel *label);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* In the Unix Unicode layer, DEFAULT_CODEPAGE is a special value
|
* In the Unix Unicode layer, DEFAULT_CODEPAGE is a special value
|
||||||
* which causes mb_to_wc and wc_to_mb to call _libc_ rather than
|
* which causes mb_to_wc and wc_to_mb to call _libc_ rather than
|
||||||
|
Loading…
x
Reference in New Issue
Block a user