Instead of using gtk_style_context_get_font() in
pango_context_get_metrics(), use pango_context_get_font_description().
The context contains the font description we are about to use after all.
When set to PANGO_ALIGN_CENTER, text was rendered off-center
by the amount of 'free space' that the PangoLayout left (ie
the x returned by pango_layout_get_pixel_extents).
For ellipsize cells it's important to clip the result of get_size()
so that the returned required rectangle is indeed less than or equal
to the input rectangle... this is done so that GtkCellArea can accurately
paint focus on cells by calling gtk_cell_renderer_get_aligned_area().
Patch also adds assertions to gtk_cell_renderer_get_aligned_area() to
ensure this keeps working correctly.
Usually pango_layout_get_pixel_extents() is used, which uses
PANGO_PIXELS_CEIL on the rectangle's width. This commit makes the new
function gtk_cell_renderer_text_get_preferred_width() consistent with
this.
This fixes rounding errors on Mac OS X, where we were seeing tree views
with a double height for a single line of text, while the usual single
row height would have been sufficient.
This fixes a GTK+ 3.0 regression. In GTK+ 2, the render method
on GtkCellRenderer had a expose_area parameter, typically set to
cell_area. This parameter was used for clipping cell content to be
rendered to the cell area (and thus clipping to within the focus
rectangle). During the rendering clean up this parameter was removed
and no clipping put back into place.
Since expose_area was usually equal to cell_area anyway, it does not make
sense to reintroduce the expose_area parameter. Instead, we do clipping at
two levels:
- in gtk_cell_renderer_render() we clip to background_area. We cannot
clip to cell_area here because we want to allow cell renderers to
render in the background area (e.g. background color/effect).
- cell renderers should clip to clip_area when rendering cell
content individually (as they had to individually clip to expose_region
before).
Since parse() is a method of the Gdk.RGBA class, the GdkRGBA pointer
should be the first argument, and the string the second one, to allow a
more natural binding.
https://bugzilla.gnome.org/show_bug.cgi?id=635879
Since a cell renderer might use more space than the natural
size when recieving expand space it's impossible to know how
much space is actually used to render content.
Adding this virtual method to allow text renderers to implement
it, the base default method uses height-for-width apis and aligns
the cell assuming the renderer uses a fixed size.
This commit removes the similar code from gtkcellarea and
subclasses.
These properties use GdkRGBA to render the cell renderer's content.
Note that Pango attributes are used to render the foreground color,
so the alpha value is currently ignored.
This mostly goes to keep consistency with the changes to GtkSizeRequest
in the last patch, as GtkCellSizeRequest requires GtkCellRenderer and
GtkCellRenderer implements GtkCellSizeRequest there's no use in keeping
them separate.
This patch renames the functions:
gtk_cell_size_request_get_request_mode()
=> gtk_cell_renderer_get_request_mode()
gtk_cell_size_request_get_width()
=> gtk_cell_renderer_get_preferred_width()
gtk_cell_size_request_get_height()
=> gtk_cell_renderer_get_preferred_height()
gtk_cell_size_request_get_size()
=> gtk_cell_renderer_get_preferred_size()
gtk_cell_size_request_get_width_for_height()
=> gtk_cell_renderer_get_preferred_width_for_height()
gtk_cell_size_request_get_height_for_width()
=> gtk_cell_renderer_get_preferred_height_for_width()
... and moves the corresponding vfuncs to GtkCellRenderer.
The patch also renames the implementations of these functions in cell
renderers to include the word "preferrred".
It doesn't make sense to keep them separate as GtkSizeRequest requires a
GtkWidget and GtkWidget implements GtkSizeRequest, so you can never have
one without the other.
It also makes the code a lot easier because no casts are required when
calling functions.
Also, the names would translate to gtk_widget_get_width() and people
agreed that this would be a too generic name, so a "preferred" was added
to the names.
So this patch moves the functions:
gtk_size_request_get_request_mode() => gtk_widget_get_request_mode()
gtk_size_request_get_width() => gtk_widget_get_preferred_width()
gtk_size_request_get_height() => gtk_widget_get_preferred_height()
gtk_size_request_get_size() => gtk_widget_get_preferred_size()
gtk_size_request_get_width_for_height() =>
gtk_widget_get_preferred_width_for_height()
gtk_size_request_get_height_for_width() =>
gtk_widget_get_preferred_height_for_width()
... and moves the corresponding vfuncs to the GtkWidgetClass.
The patch also renames the implementations of the vfuncs in widgets to
include the word "preferrred".
This patch adds height-for-width geometry management
for cell renderers while still responding to the old
gtk_cell_renderer_get_size() apis with virtual return values
(obtained by soliciting the new height-for-width cell renderer
apis).
GtkCellEditable::editing-canceled property was added in 2.19 cycle,
so we should make the code that currently uses entry->editing_canceled
directly go through the property
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=599213
2007-12-27 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkcellrenderertext.c: Fix the default value for the
wrap-mode and font-scale properties.
svn path=/trunk/; revision=19256
2007-02-02 Mariano Suárez-Alvarez <mariano@gnome.org>
* gtk/gtkcellrenderertext.c(gtk_cell_renderer_text_class_init):
be a little more helpful with the docs on GtkCellRendererText:alignment.
Bug #403409.
svn path=/trunk/; revision=17250
2006-12-28 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkiconview.c: Use word wrapping by default, and
center multiline labels. (#318763, Ross Burton)
* gtk/gtkcellrenderertext.c (get_layout): Remove a special
case for single-line layouts.
2006-12-13 Benjamin Berg <benjamin@sipsolutions.net>
* engines/clearlooks/src/clearlooks_rc_style.c:
(clearlooks_rc_style_init), (clearlooks_gtk2_rc_parse_dummy),
(clearlooks_rc_style_parse), (clearlooks_rc_style_merge):
* engines/clearlooks/src/clearlooks_rc_style.h:
* engines/clearlooks/src/clearlooks_style.c:
(clearlooks_style_draw_box), (clearlooks_style_init_from_rc),
(clearlooks_style_copy):
* engines/clearlooks/src/clearlooks_style.h:
* engines/clearlooks/src/clearlooks_types.h:
- Remove unused code/options from the code. Warn about their usage
while parsing.
* themes/Clearlooks/gtk-2.0/gtkrc:
- Remove options that don't have any effect.
2006-12-10 Kristian Rietveld <kris@gtk.org>
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_focus_out_event):
cancel editing (ie. don't accept changes) when the entry loses
focus. (Fixes#164494, reported by Chris Rouch).
2006-09-24 Kristian Rietveld <kris@gtk.org>
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_class_init),
(gtk_cell_renderer_text_[sg]et_property): actually add align-set
property to the API (left-over patch from #157439).
2006-07-19 Kristian Rietveld <kris@imendio.com>
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_init),
(gtk_cell_renderer_text_[gs]et_property), (get_layout): add
align_set field to keep track whether the align property was
set by the user, if not we will use the alignment by looking
at the direction of the widget. (#157439)
2006-07-18 Kristian Rietveld <kris@imendio.com>
Fix for #335012, reported by Matteo Nastasi.
* gtk/gtktreeview.c (gtk_tree_view_real_start_editing): if the
requested space of the editable is smaller than the cell area,
put it up above the middle of the cell area.
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_start_editing):
configure the inner border to cover the cell area if the
entry requisition is smaller than the cell_area.
2006-03-14 Matthias Clasen <mclasen@redhat.com>
* tests/testcellrenderertext.c: Add test cases for alignment.
* gtk/gtkcellrenderertext.c: Add an alignment property,
and fix some cases where ellipsize_set was being used to
mean "we're ellipsizing" even when ellipsize was set to NONE.
(#318761, Ross Burton)
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_start_editing):
Use connect_after to connect to the focus_out event. This
ensures that the entry has already stopped blinking by the time
we emit the edited signal. (#315229, Thomas Leonard)
2005-09-01 Matthias Clasen <mclasen@redhat.com>
* gdk/*.c: Intern some more strings.
* gtk/gtkintl.h:
* gtk/*.c: Define an I_() macro and use it instead of the
bulky g_intern_static_string().
2005-08-31 Matthias Clasen <mclasen@redhat.com>
* gdk/Makefile.am:
* gtk/Makefile.am: Intern type names in code generated by
glib-mkenums, too.
* gtk/*.c:
* gdk/x11/*.c:
* gdk/*.c: Intern type names before registering the type to avoid
unnecessary copies.
2005-05-11 Owen Taylor <otaylor@redhat.com>
* gtk/gtkcolorbutton.c: Use a GtkAlignment rather than a GtkDrawingArea
to draw the swatch in to avoid having an extraneous window.
* gtk/gtkcolorsel.c (color_sample_draw_sample): Actually se tthe
color when !has_opacity.
2005-05-10 Owen Taylor <otaylor@redhat.com>
* gdk/gdkcairo.[ch] gdk/gdkcolor.[ch] gdk/Makefile.am: Add source
files for Cairo convenience functionality.
* gdk/gdkcairo.h (gdk_cairo_rectangle, gdk_cairo_region): Add a
convenience functions to add GdkRectangle, GdkRegion to a cairo path.
* gdk/gdkwindow.c gdk/gdkgc.c gtk/gtkcolorsel.c gtk/gtkiconview.c
gtk/gtkstyle.c: Use gdk_cairo_rectangle/region().
* gdk/gdkcairo.[ch] gdk/gdkdrawable.h gdk/gdkdraw.c: Rename
gdk_drawable_create_cairo_context() to gdk_cairo_create().
* gdk/gdkcairo.c gdk/gdkpixbuf.h gdk/gdkpixbuf-render.c:
Rename gdk_pixbuf_set_as_cairo_source() to
gdk_cairo_set_source_pixbuf().
* gdk/gdkdraw.c gdk/gdkpango.c gtk/gtkcolorsel.c gtk/gtkhruler.c
gtk/gtkhsv.c gtk/gtkiconview.c gtk/gtkstyle.c gtk/gtkvruler.c:
Adjust for renames.
* gdk/gdk.symbols: Update.
* gtk/gtkwidget.c (gtk_widget_queue_shallow_draw): Fix
coordinate system problem that was causing the wrong portions
to be invalidated.
* gtk/gtkcellrenderer.c (gtk_cell_renderer_render)
gtk/gtkcellrendererpixbuf.c (gtk_cell_renderer_pixbuf_render)
gtk/gtkcellrendererprogress.c (gtk_cell_renderer_progress_render)
gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_render)
gtk/gtkcellview.c (gtk_cell_view_expose)
gtk/gtkdnd.c (gtk_drag_highlight_expose)
gtk/gtkentry.c (gtk_entry_draw_text)
gtk/gtktextview.c (text_window_invalidate_rect): Some cairoization.
* gtk/gtkcalendar.[ch]: Beat into something roughly resembling
GTK+ style ... use instance-private data and standard names for
private structure, etc. Move function docs inline.
* gtk/gtkcalendar.[ch]: Switch to drawing everything in
expose. Switch drawing to Cairo.
* gtk/gtkcalendar.c (gtk_calendar_freeze): Deprecate
gtk_calendar_freeze/thaw
2005-05-02 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkcellrenderertext.c (get_size): Return a sufficient
width for cases where pango_layout_get_pixel_extents() returns
a rectangle with nonzero x.
2005-03-21 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkprivate.h: Define macros GTK_PARAM_READABLE,
GTK_PARAM_WRITABLE, GTK_PARAM_READWRITE which are like
their G_ counterparts, but also mark the name, nick
and blurb as static.
* gtk/*.c: Mark param spec strings as static, using
the new macros.
2005-03-20 Matthias Clasen <mclasen@redhat.com>
Make PLT-reduction work with gcc4, and don't include
everything in gdkalias.h:
* gtk/grk.symbols: Group symbols by header and source file.
* gtk/makegtkalias.pl: Protect definitions by the same
preprocessor symbols used to guard the headers. Move
the alias declarations to a separate file which is
produced when calling makegtkalias.pl -def
* gdk/Makefile.am (gtkaliasdef.c): Add a rule to generate
this file.
* gtk/*.c: Include gtkalias.h after the other headers,
include gtkaliasdef.c at the bottom.
* gtk/*.h: Small cleanups.
2005-01-20 Matthias Clasen <mclasen@redhat.com>
Support wrapping in GtkCellRendererText (#163608):
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_class_init):
Add wrap-mode and wrap-width properties which cause a
text cell to break to a specified width when set.
* gtk/gtkcellrenderertext.c (get_layout): Use wrap-mode
and wrap-width when they are set.
2005-01-09 Anders Carlsson <andersca@gnome.org>
* gtk/gtkcellrenderertext.c: (get_size):
* gtk/gtklabel.c: (gtk_label_size_request):
* gtk/gtkprogressbar.c: (gtk_progress_bar_size_request):
Don't pass NULL to pango_context_get_metrics. Use
pango_context_get_language instead, which is way faster.
2004-12-30 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_set_property):
Use g_value_get_boolean() for ellipsize_set. (#162447,
Brian Tarricone)
2004-12-09 Matthias Clasen <mclasen@redhat.com>
Fix#145463, reported by Michael Natterer.
* gtk/gtkcellrenderer.h (struct _GtkCellRenderer): Add an
editing flag to keep track of when editing is done.
* gtk/gtkcellrenderer.h:
* gtk/gtkcellrenderer.c (gtk_cell_renderer_stop_editing): New
function to replace gtk_cell_renderer_editing_canceled().
Deprecate gtk_cell_renderer_editing_canceled().
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_editing_done):
* gtk/gtkcellrenderercombo.c (gtk_cell_renderer_combo_editing_done):
* gtk/gtktreeview.c (gtk_tree_view_stop_editing):
Use gtk_cell_renderer_stop_editing().
2004-11-16 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkcellrenderertext.c (get_layout): Don't use the foreground
color for selected cells, Don't use the background color
in unfocused selected cells. Also avoid creating two PangoLayouts
per render call. (#154615, #154611, Billy Biggs)
2004-10-01 Matthias Clasen <mclasen@redhat.com>
Fix bug #150790:
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_get_size): Fix the
calculation of x_offset when ellipsized and in RTL mode.
(gtk_cell_renderer_text_render): Fix the calculation of the layout
width when ellipsized.
2004-09-17 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_render): Remove
leftover debug code.
Improve the behaviour of the file chooser in save mode. Fixes bugs
#151031, #151608, #151994 reported by Owen Taylor and Alexander
Larsson.
* gtk/gtkfilechooserdefault.c (gtk_file_chooser_default_set_property):
(location_entry_create): Propagate the action to the file
chooser entries.
(gtk_file_chooser_default_should_respond): Switch folders if
the user enters a directory name in the entry and clear the entry
after switching folders.
(gtk_file_chooser_default_should_respond, shortcuts_row_activated_cb):
Move focus to the file list when activating a shortcut.
(gtk_file_chooser_default_should_respond): Handle the case where the
user clicks on "Save" after selecting a folder in the file list.
* gtk/gtkfilechooserbutton.c (gtk_file_chooser_button_set_property):
Propagate the action to the file chooser entries.
* gtk/gtkfilechooserentry.h:
* gtk/gtkfilechooserentry.c (_gtk_file_chooser_entry_set_action):
(_gtk_file_chooser_entry_get_action): New functions to propagate
the GtkFileChooserAction of the file chooser to the file chooser
entry.
(check_completion_callback): If we are in save mode, only do
inline completion for directories.
Tue Aug 31 17:07:41 2004 Jonathan Blandford <jrb@redhat.com>
* gtk/gtktreeviewcolumn.c
(gtk_tree_view_column_cell_process_action): constrain cell area to
passed in cell_area, #147867
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_get_size): if
ellipsizing, get_size is only 3 chars wide.
* docs/tree-column-sizing.png: Add Matthias's excellent image.
Mon Aug 9 12:48:04 2004 Matthias Clasen <maclas@gmx.de>
Add hidden aliases for exported symbols which are
used internally in order to get rid of many PLT
entries. (#145519, Arjan van de Ven)
* gtk/Makefile.am: Add rules to generate gtk.def and
from gtk.symbols, and make make check check the abi
with abicheck.sh.
(gtk_private_h_sources): Add gtkinternals.h
(gtk_built_private_headers): Add gtkalias.h
(gtk_extra_sources): Add gtk.symbols
(EXTRA_DIST): Add makegtkalias.pl and abicheck.sh
* gtk/gtk.symbols: New file. Definition of the GTK+ ABI.
The file can be processed by cpp to filter out certain
subsets of symbols.
* gtk/abicheck.sh: New file. Script to check the actually
symbols exported from libgtk-x11.2.0.so against the symbols
found in gtk.symbols.
* gtk/makegtkalias.pl: New file. Perl script to generate the
header containing the alias definitions for internally used
exported symbols from a list of symbols.
* gtk/gtkinternals.h: New file. An uninstalled header listing
symbols which must be exported for some reason and do not appear
in any other header.
* gtk/*.c: Include gtkalias.h
Fri Jul 23 11:11:10 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_start_editing):
align the entry in the same way as the cell. (#136749)
Thu Jul 22 01:42:16 2004 Matthias Clasen <maclas@gmx.de>
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_class_init):
Add a new :ellipsize property which controls ellipsization of the
rendered text. (#144835, Vincent Untz, patch by Jonathan Blandford
and Anders Carlsson
* gtk/gtkfilechooserdefault.c (create_file_list): Use ellipsization
for the name column.
Sun Jun 6 23:57:21 2004 Matthias Clasen <maclas@gmx.de>
Make the entry context menu work in editable text cells. The changes are
based on a patch by Kristian Rietveld, which implemented an approach outlined
by Owen Taylor. (#50075)
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_focus_out_event): Ignore
focus out if the entry menu is posted.
(gtk_cell_renderer_text_populate_popup): Mark the entry menu as posted, and
set up a signal handler to clear the flag if the menu is unmapped.
(gtk_cell_renderer_text_popup_unmap): Clear the in_entry_menu flag, set up
a timeout to stop editing if the focus is lost.
(popdown_timeout): Stop editing if the entry doesn't have focus any more.
(gtk_cell_renderer_text_start_editing): Connect to the populate_popup signal
on the entry and keep a pointer to the entry.
(gtk_cell_renderer_text_editing_done): Disconnect from popuplate_popup, clear
the pointer to the entry.
2004-04-14 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkcombobox.c: Make the arrow and separator regular
children of an hbox inside the button, and propagate state
changes from the button to the cell view. (part of the fix
for #138650, should also fix#137535)
* gtk/gtkcellview.c (gtk_cell_view_expose): Pass the PRELIT
state to gtk_cell_renderer_render() when prelighted. (part
of the fix for #138650)
* gtk/gtkcellrenderertext.c (gtk_cell_renderer_text_render):
Use PRELIGHT state when appropriate. (part of the fix for
#138650)