mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-20 02:10:12 +00:00
implement extended layout for GtkCellRendererText
This commit is contained in:
parent
5e62f81196
commit
d99742e1cb
@ -21,6 +21,7 @@
|
||||
#include <stdlib.h>
|
||||
#include "gtkcellrenderertext.h"
|
||||
#include "gtkeditable.h"
|
||||
#include "gtkextendedlayout.h"
|
||||
#include "gtkentry.h"
|
||||
#include "gtkmarshalers.h"
|
||||
#include "gtkintl.h"
|
||||
@ -61,6 +62,8 @@ static GtkCellEditable *gtk_cell_renderer_text_start_editing (GtkCellRenderer
|
||||
GdkRectangle *cell_area,
|
||||
GtkCellRendererState flags);
|
||||
|
||||
static void gtk_cell_renderer_text_extended_layout_init (GtkExtendedLayoutIface *iface);
|
||||
|
||||
enum {
|
||||
EDITED,
|
||||
LAST_SIGNAL
|
||||
@ -148,9 +151,12 @@ struct _GtkCellRendererTextPrivate
|
||||
gint wrap_width;
|
||||
|
||||
GtkWidget *entry;
|
||||
GtkWidget *owner;
|
||||
};
|
||||
|
||||
G_DEFINE_TYPE (GtkCellRendererText, gtk_cell_renderer_text, GTK_TYPE_CELL_RENDERER)
|
||||
G_DEFINE_TYPE_WITH_CODE (GtkCellRendererText, gtk_cell_renderer_text, GTK_TYPE_CELL_RENDERER,
|
||||
G_IMPLEMENT_INTERFACE (GTK_TYPE_EXTENDED_LAYOUT,
|
||||
gtk_cell_renderer_text_extended_layout_init))
|
||||
|
||||
static void
|
||||
gtk_cell_renderer_text_init (GtkCellRendererText *celltext)
|
||||
@ -1494,6 +1500,7 @@ get_size (GtkCellRenderer *cell,
|
||||
GtkCellRendererTextPrivate *priv;
|
||||
|
||||
priv = GTK_CELL_RENDERER_TEXT_GET_PRIVATE (cell);
|
||||
priv->owner = widget;
|
||||
|
||||
if (celltext->calc_fixed_height)
|
||||
{
|
||||
@ -1930,5 +1937,42 @@ gtk_cell_renderer_text_set_fixed_height_from_font (GtkCellRendererText *renderer
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_cell_renderer_text_extended_layout_get_desired_size (GtkExtendedLayout *layout,
|
||||
GtkRequisition *minimal_size,
|
||||
GtkRequisition *desired_size)
|
||||
{
|
||||
GtkCellRendererTextPrivate *priv;
|
||||
|
||||
priv = GTK_CELL_RENDERER_TEXT_GET_PRIVATE (layout);
|
||||
|
||||
if (minimal_size)
|
||||
{
|
||||
get_size (GTK_CELL_RENDERER (layout),
|
||||
priv->owner, NULL, NULL, NULL, NULL,
|
||||
&minimal_size->width, &minimal_size->height);
|
||||
}
|
||||
|
||||
if (desired_size)
|
||||
{
|
||||
PangoEllipsizeMode ellipsize;
|
||||
|
||||
ellipsize = priv->ellipsize;
|
||||
priv->ellipsize = PANGO_ELLIPSIZE_NONE;
|
||||
|
||||
get_size (GTK_CELL_RENDERER (layout),
|
||||
priv->owner, NULL, NULL, NULL, NULL,
|
||||
&desired_size->width, &desired_size->height);
|
||||
|
||||
priv->ellipsize = ellipsize;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_cell_renderer_text_extended_layout_init (GtkExtendedLayoutIface *iface)
|
||||
{
|
||||
iface->get_desired_size = gtk_cell_renderer_text_extended_layout_get_desired_size;
|
||||
}
|
||||
|
||||
#define __GTK_CELL_RENDERER_TEXT_C__
|
||||
#include "gtkaliasdef.c"
|
||||
|
Loading…
Reference in New Issue
Block a user