* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
/* Original v1.0 -- December 26, 2006
fixture->tree_view = gtk_tree_view_new_with_model (model);
g_object_unref (model);
+ gtk_scrolled_window_set_min_content_width (GTK_SCROLLED_WINDOW (sw), VIEW_WIDTH);
+ gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (sw), VIEW_HEIGHT);
gtk_widget_set_size_request (fixture->tree_view, VIEW_WIDTH, VIEW_HEIGHT);
renderer = gtk_cell_renderer_text_new ();
get_pos_from_path (GtkTreeView *tree_view,
GtkTreePath *path,
gdouble row_height,
- GtkAdjustment *vadj)
+ GtkAdjustment *vadjustment)
{
int row_start;
row_start = get_row_start_for_index (tree_view,
gtk_tree_path_get_indices (path)[0]);
- if (row_start + row_height < vadj->page_size)
+ if (row_start + row_height < gtk_adjustment_get_page_size (vadjustment))
return POS_TOP;
- if (row_start >= vadj->upper - vadj->page_size)
+ if (row_start >= gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment))
return POS_BOTTOM;
return POS_CENTER;
}
-static gboolean
-test_position_with_align (GtkTreeView *tree_view,
- enum Pos pos,
- gint row_y,
- gint row_start,
- gdouble row_height,
- gdouble row_align)
+static void
+assert_position_with_align (GtkTreeView *tree_view,
+ enum Pos pos,
+ gint row_y,
+ gint row_start,
+ gdouble row_height,
+ gdouble row_align)
{
- gboolean passed = TRUE;
- GtkAdjustment *vadj = gtk_tree_view_get_vadjustment (tree_view);
+ GtkAdjustment *vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view));
/* Switch on row-align: 0.0, 0.5, 1.0 */
switch ((int)(row_align * 2.)) {
* - dy should be equal to the top
* y coordinate of the row.
*/
- if (row_y != 0)
- passed = FALSE;
- if (vadj->value != row_start)
- passed = FALSE;
+ g_assert (row_y == 0);
+ g_assert (gtk_adjustment_get_value (vadjustment) == row_start);
} else {
/* The row can be anywhere at the last
* page of the tree view.
* - dy is set to the start of the
* last page.
*/
- if (vadj->value != vadj->upper - vadj->page_size)
- passed = FALSE;
+ g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
}
break;
case 1:
/* 0.5 */
if (pos == POS_TOP
- && row_start < vadj->page_size / 2) {
+ && row_start < (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2) {
/* For the first half of the top view we can't
* center the row in the view, instead we
* show the first page.
* - dy should be zero
*/
- if (vadj->value != 0)
- passed = FALSE;
+ g_assert (gtk_adjustment_get_value (vadjustment) == 0);
} else if (pos == POS_BOTTOM
- && row_start >= vadj->upper - vadj->page_size / 2) {
+ && row_start + row_height >= gtk_adjustment_get_upper (vadjustment) - (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2) {
/* For the last half of the bottom view we
* can't center the row in the view, instead
* we show the last page.
* - dy should be the start of the
* last page.
*/
- if (vadj->value != vadj->upper - vadj->page_size)
- passed = FALSE;
+ g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
} else {
/* The row is located in the middle of
* the view.
* (ie. the row's center is at the
* center of the view).
*/
- gdouble middle = vadj->page_size / 2 - row_height / 2;
- if (row_y != ceil (middle) && row_y != floor (middle))
- passed = FALSE;
+ gdouble middle = (gtk_adjustment_get_page_size (vadjustment) - row_height) / 2.0;
+ g_assert (row_y == ceil (middle) || row_y == floor (middle));
}
break;
* first page of the tree view.
* - dy is zero.
*/
- if (vadj->value != 0)
- passed = FALSE;
+ g_assert (gtk_adjustment_get_value (vadjustment) == 0);
} else if (pos == POS_CENTER || pos == POS_BOTTOM) {
/* The row is the last row visible in the
* view.
* (ie we are not on the first page).
* - dy is greater than zero
*/
- if (row_start < vadj->page_size
- && row_start + row_height < vadj->page_size)
- passed = FALSE;
- if (vadj->value <= 0)
- passed = FALSE;
- if (row_y != vadj->page_size - row_height)
- passed = FALSE;
+ g_assert (row_start >= gtk_adjustment_get_page_size (vadjustment)
+ || row_start + row_height >= gtk_adjustment_get_page_size (vadjustment));
+ g_assert (row_y == gtk_adjustment_get_page_size (vadjustment) - row_height);
}
break;
}
-
- return passed;
}
-static gboolean
-test_position_without_align (GtkTreeView *tree_view,
- gdouble row_start,
- gdouble row_height)
+static void
+assert_position_without_align (GtkTreeView *tree_view,
+ gdouble row_start,
+ gdouble row_height)
{
- GtkAdjustment *vadj = gtk_tree_view_get_vadjustment (tree_view);
-
- /* Without align the tree view does as less work as possible,
- * so basically we only have to check whether the row
- * is visible on the screen.
- */
- if (vadj->value <= row_start
- && vadj->value + vadj->page_size >= row_start + row_height)
- return TRUE;
-
- return FALSE;
+ GtkAdjustment *vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view));
+
+ /* Without align the tree view does as less work as possible,
+ * so basically we only have to check whether the row
+ * is visible on the screen.
+ */
+ g_assert (gtk_adjustment_get_value (vadjustment) <= row_start);
+ g_assert (gtk_adjustment_get_value (vadjustment) + gtk_adjustment_get_page_size (vadjustment) >= row_start + row_height);
}
static void
test_position (GtkTreeView *tree_view,
GtkTreePath *path,
gboolean use_align,
- gdouble row_align,
- gdouble col_align)
+ gdouble row_align)
{
gint pos;
gchar *path_str;
/* Ugh */
pos = get_pos_from_path (GTK_TREE_VIEW (tree_view),
path, rect.height,
- gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (tree_view)));
+ gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (tree_view)));
/* This is only tested for during test_single() */
model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
path_str = gtk_tree_path_to_string (path);
if (use_align) {
- g_assert (test_position_with_align (tree_view, pos, rect.y,
- row_start, rect.height, row_align));
+ assert_position_with_align (tree_view, pos, rect.y,
+ row_start, rect.height, row_align);
} else {
- g_assert (test_position_without_align (tree_view, row_start, rect.height));
+ assert_position_without_align (tree_view, row_start, rect.height);
}
g_free (path_str);
/* Testing scrolling to various positions with various alignments */
+static void
+ensure_layout (void)
+{
+ /* HACK: sleep for more than one frame, to give the paint clock
+ * time to prepare the new layout */
+ g_usleep (100 * 1000);
+
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+}
+
static void
scroll (ScrollFixture *fixture,
GtkTreePath *path,
gtk_widget_show_all (fixture->window);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
+ ensure_layout ();
test_position (GTK_TREE_VIEW (fixture->tree_view), path,
- use_align, row_align, 0.0);
+ use_align, row_align);
}
static void
path, NULL,
use_align, row_align, 0.0);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
+ ensure_layout ();
test_position (GTK_TREE_VIEW (fixture->tree_view), path,
- use_align, row_align, 0.0);
+ use_align, row_align);
}
static void
path, NULL,
use_align, row_align, 0.0);
- while (gtk_events_pending ())
- gtk_main_iteration ();
-
+ ensure_layout ();
test_position (GTK_TREE_VIEW (fixture->tree_view), path,
- use_align, row_align, 0.0);
+ use_align, row_align);
}
static void
{
GtkAllocation allocation;
GdkRectangle rect;
- GtkAdjustment *vadj;
gtk_tree_view_get_background_area (GTK_TREE_VIEW (tree_view),
cursor_path, NULL, &rect);
- vadj = gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (tree_view));
-
/* There are all in bin_window coordinates */
gtk_widget_get_allocation (editable, &allocation);
g_assert (allocation.y == rect.y + ((rect.height - allocation.height) / 2));
column,
TRUE);
- while (gtk_events_pending ())
- gtk_main_iteration ();
+ ensure_layout ();
/* Test position */
test_position (GTK_TREE_VIEW (fixture->tree_view), scroll_path,
- FALSE, 0.0, 0.0);
+ FALSE, 0.0);
test_editable_position (fixture->tree_view, editable, scroll_path);
gtk_tree_path_free (scroll_path);
gtk_main_iteration ();
model = gtk_tree_view_get_model (GTK_TREE_VIEW (fixture->tree_view));
- vadjustment = gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (fixture->tree_view));
+ vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (fixture->tree_view));
for (i = 0; i < 5; i++) {
GtkTreeIter scroll_iter;
scroll_path, NULL, FALSE, 0.0, 0.0);
gtk_tree_path_free (scroll_path);
- while (gtk_events_pending ())
- gtk_main_iteration ();
+ ensure_layout ();
/* Test position, the scroll bar must be at the end */
- g_assert (vadjustment->value == vadjustment->upper - vadjustment->page_size);
+ g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
}
}
{
GtkTreeIter iter;
GtkTreePath *path;
- GtkAdjustment *vadj;
+ GtkAdjustment *vadjustment;
GtkTreeModel *model;
/* The aim of this test is to scroll to the bottom of a TreeView,
while (gtk_events_pending ())
gtk_main_iteration ();
- vadj = gtk_tree_view_get_vadjustment (GTK_TREE_VIEW (fixture->tree_view));
+ vadjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (fixture->tree_view));
- g_assert (vadj->value + vadj->page_size <= vadj->upper);
- g_assert (vadj->value == vadj->upper - vadj->page_size);
+ g_assert (gtk_adjustment_get_value (vadjustment) + gtk_adjustment_get_page_size (vadjustment) <= gtk_adjustment_get_upper (vadjustment));
+ g_assert (gtk_adjustment_get_value (vadjustment) == gtk_adjustment_get_upper (vadjustment) - gtk_adjustment_get_page_size (vadjustment));
}
row = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
row -= 20;
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+
path = gtk_tree_path_new_from_indices (row, -1);
scroll (fixture, path, TRUE, 0.5);
gtk_tree_path_free (path);
gtk_tree_path_down (path);
- scroll (fixture, path, TRUE, 0.5);
+ scroll (fixture, path, FALSE, 0.5);
gtk_tree_path_free (path);
}
gtk_tree_path_down (path);
- scroll (fixture, path, TRUE, 0.5);
+ scroll (fixture, path, FALSE, 0.5);
gtk_tree_path_free (path);
}