diff options
author | Søren Sandmann <sandmann@redhat.com> | 2008-06-07 17:48:04 -0400 |
---|---|---|
committer | Søren Sandmann <sandmann@redhat.com> | 2008-06-07 17:48:04 -0400 |
commit | 7b9a2aa438c2eed48c81846750a02ba8be5cd1db (patch) | |
tree | c904c627ff6038daac4ff096695b9b68f502abfd | |
parent | 7f433ba31d6ec006fa4f7af81de3b6ac89c6355f (diff) |
Move more stuff to deck.[ch]
-rw-r--r-- | backingstore.c | 2 | ||||
-rwxr-xr-x | build.sh | 3 | ||||
-rw-r--r-- | deck.c | 91 | ||||
-rw-r--r-- | deck.h | 27 | ||||
-rw-r--r-- | main.c | 63 | ||||
-rw-r--r-- | scrollarea.c | 28 | ||||
-rw-r--r-- | scrollarea.h | 5 |
7 files changed, 159 insertions, 60 deletions
diff --git a/backingstore.c b/backingstore.c index 5e040c4..e52377b 100644 --- a/backingstore.c +++ b/backingstore.c @@ -81,6 +81,7 @@ backing_store_scroll (BackingStore *store, gdk_region_union_with_rect (store->update_region, &rect); } +#if 0 static void print_region (const char *header, GdkRegion *region) { @@ -100,6 +101,7 @@ print_region (const char *header, GdkRegion *region) g_free (rects); } +#endif void backing_store_invalidate_rect (BackingStore *store, @@ -5,4 +5,5 @@ gcc -Wall -g \ scrollarea.c \ foo-marshal.c \ main.c \ - backingstore.c
\ No newline at end of file + backingstore.c \ + deck.c @@ -0,0 +1,91 @@ +#include "deck.h" + +#define MARGIN 20 +#define RATIO 1.414 +#define N_SLIDES 10 + +struct Deck +{ + DeckChangeNotify notify; /* Called on slide add/delete/reorder */ + gpointer data; +}; + +Deck * +deck_new (DeckChangeNotify notify, + gpointer data) +{ + Deck *deck = g_new0 (Deck, 1); + + deck->notify = notify; + deck->data = data; + + return deck; +} + +static int +get_slide_height (Deck *deck, + GdkRectangle *viewport) +{ + return (viewport->width - 2 * MARGIN) / RATIO; +} + +void +deck_paint (Deck *deck, + FooScrollArea *area, + cairo_t *cr) +{ + int height; + int i; + GdkRectangle viewport; + + foo_scroll_area_get_viewport (area, &viewport); + + height = get_slide_height (deck, &viewport); + + cairo_move_to (cr, MARGIN, MARGIN); + + for (i = 0; i < N_SLIDES; ++i) + { + cairo_move_to (cr, MARGIN, MARGIN + i * (MARGIN + height)); + + cairo_set_source_rgba (cr, 1, 1, 1, 1); + + cairo_rel_line_to (cr, viewport.width - 2 * MARGIN, 0); + cairo_rel_line_to (cr, 0, height); + cairo_rel_line_to (cr, -(viewport.width - 2 * MARGIN), 0); + cairo_close_path (cr); + + cairo_fill_preserve (cr); + + cairo_set_source_rgba (cr, 0, 0, 0, 0.5); + cairo_set_line_width (cr, 2); + cairo_stroke (cr); + + } +} + +/* Returns the slide the user is likely looking + * at, given the viewport. + */ +int +deck_get_view_slide (Deck *deck, + GdkRectangle *viewport) +{ + int slide_height = get_slide_height (deck, viewport); + + /* Compute the y-coordinate of the first visible top edge of a slide */ + return (viewport->y - MARGIN) / (MARGIN + slide_height) + 1; +} + +/* Returns the y coordinate of the nth slide given + * the viewport + */ +int +deck_get_slide_location (Deck *deck, + GdkRectangle *viewport, + int nth_slide) +{ + int slide_height = get_slide_height (deck, viewport); + + return nth_slide * (MARGIN + slide_height) + MARGIN; +} @@ -3,10 +3,23 @@ typedef struct Deck Deck; typedef struct Slide Slide; -Deck *deck_new (void); -int deck_get_height (Deck *deck, - int width); -void deck_paint (Deck *deck, - FooScrollArea *area, - cairo_t *cr, - int width); +typedef void (* DeckChangeNotify) (gpointer data); + +Deck *deck_new (DeckChangeNotify notify, + gpointer data); +void deck_paint (Deck *deck, + FooScrollArea *area, + cairo_t *cr); +/* Returns the slide the user is likely looking + * at, given the viewport. + */ +int +deck_get_view_slide (Deck *deck, + GdkRectangle *viewport); +/* Returns the y coordinate of the nth slide given + * the width of the viewport + */ +int +deck_get_slide_location (Deck *deck, + GdkRectangle *viewport, + int nth_slide); @@ -5,12 +5,14 @@ #include <string.h> #include <math.h> #include "scrollarea.h" +#include "deck.h" typedef struct { GladeXML * xml; GtkWidget * main_area; GtkWidget * thumbnails; + Deck * deck; } App; static void * @@ -31,9 +33,17 @@ on_thumbs_paint (FooScrollArea *scroll_area, GdkRegion *region, gpointer data) { + g_print ("paint thumbs\n"); } - + +static void +on_thumbs_viewport_size_changed (FooScrollArea *scroll_area, + GdkRectangle *viewport, + GdkRectangle *old_viewport) +{ + g_print ("thumbs viewport changed size\n"); +} #define MARGIN 20 #define RATIO 1.414 @@ -49,32 +59,13 @@ on_main_paint (FooScrollArea *scroll_area, GdkRegion *region, gpointer data) { - int i; - - cairo_move_to (cr, MARGIN, MARGIN); + App *app = data; - for (i = 0; i < N_SLIDES; ++i) - { - cairo_move_to (cr, MARGIN, MARGIN + i * (MARGIN + slide_height)); - - cairo_set_source_rgba (cr, 1, 1, 1, 1); - - cairo_rel_line_to (cr, slide_width, 0); - cairo_rel_line_to (cr, 0, slide_height); - cairo_rel_line_to (cr, -slide_width, 0); - cairo_close_path (cr); - - cairo_fill_preserve (cr); - - cairo_set_source_rgba (cr, 0, 0, 0, 0.5); - cairo_set_line_width (cr, 2); - cairo_stroke (cr); - - } + deck_paint (app->deck, scroll_area, cr); } static void -on_viewport_size_changed (FooScrollArea *scroll_area, +on_main_viewport_size_changed (FooScrollArea *scroll_area, GdkRectangle *viewport, GdkRectangle *old_viewport) { @@ -84,7 +75,6 @@ on_viewport_size_changed (FooScrollArea *scroll_area, double new_y; /* Compute the y-coordinate of the first visible top edge of a slide */ - nth_slide = (old_viewport->y - MARGIN) / (MARGIN + (double)slide_height) + 1; @@ -112,6 +102,14 @@ on_viewport_changed (FooScrollArea *scroll_area, } static void +on_deck_changed (gpointer data) +{ + App *app = data; + + +} + +static void set_size (GtkWindow *window) { GdkScreen *screen; @@ -141,9 +139,11 @@ main (int argc, char **argv) app = g_new0 (App, 1); app->xml = glade_xml_new (GLADE_FILE, NULL, NULL); - app->main_area = (FooScrollArea *)foo_scroll_area_new(); - app->thumbnails = (FooScrollArea *)foo_scroll_area_new(); + app->main_area = (GtkWidget *)foo_scroll_area_new(); + app->thumbnails = (GtkWidget *)foo_scroll_area_new(); + app->deck = deck_new (on_deck_changed, app); + gtk_container_add ( GTK_CONTAINER (get_widget (app, "main_area_scrolled_window")), app->main_area); @@ -152,20 +152,25 @@ main (int argc, char **argv) GTK_CONTAINER (get_widget (app, "thumbnails_scrolled_window")), app->thumbnails); - foo_scroll_area_set_min_size (app->thumbnails, 200, -1); + foo_scroll_area_set_min_size (FOO_SCROLL_AREA (app->thumbnails), 200, -1); g_signal_connect (app->main_area, "paint", G_CALLBACK (on_main_paint), app); + g_signal_connect (app->main_area, "viewport_size_changed", + G_CALLBACK (on_main_viewport_size_changed), app); g_signal_connect (app->main_area, "viewport_changed", G_CALLBACK (on_viewport_changed), app); - g_signal_connect (app->main_area, "viewport_size_changed", - G_CALLBACK (on_viewport_size_changed), app); g_signal_connect (app->thumbnails, "paint", G_CALLBACK (on_thumbs_paint), app); + g_signal_connect (app->thumbnails, "viewport_size_changed", + G_CALLBACK (on_thumbs_viewport_size_changed), app); + set_size (get_widget (app, "main_window")); gtk_widget_show_all (get_widget (app, "main_window")); gtk_main (); + + return 0; } diff --git a/scrollarea.c b/scrollarea.c index f626308..d5514cd 100644 --- a/scrollarea.c +++ b/scrollarea.c @@ -118,26 +118,12 @@ static gboolean foo_scroll_area_crossing (GtkWidget *widget static void foo_scroll_area_map (GtkWidget *widget) { - FooScrollArea *area = FOO_SCROLL_AREA (widget); - GTK_WIDGET_CLASS (parent_class)->map (widget); - -#if 0 - if (area->priv->input_window) - gdk_window_show (area->priv->input_window); -#endif } static void foo_scroll_area_unmap (GtkWidget *widget) { - FooScrollArea *area = FOO_SCROLL_AREA (widget); - -#if 0 - if (area->priv->input_window) - gdk_window_hide (area->priv->input_window); -#endif - GTK_WIDGET_CLASS (parent_class)->unmap (widget); } @@ -476,8 +462,6 @@ static void canvas_to_window (FooScrollArea *area, GdkRegion *region) { - GtkWidget *widget = GTK_WIDGET (area); - gdk_region_offset (region, -area->priv->x_offset, -area->priv->y_offset); @@ -487,8 +471,6 @@ static void window_to_canvas (FooScrollArea *area, GdkRegion *region) { - GtkWidget *widget = GTK_WIDGET (area); - gdk_region_offset (region, area->priv->x_offset, area->priv->y_offset); @@ -578,6 +560,9 @@ do_exposes (cairo_t *cr, r = gdk_region_rectangle (&rect); gdk_region_intersect (region, r); gdk_region_destroy (r); + + cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height); + cairo_clip (cr); if (!gdk_region_empty (region)) { @@ -773,13 +758,14 @@ foo_scroll_area_unrealize (GtkWidget *widget) GTK_WIDGET_CLASS (parent_class)->unrealize (widget); } +#if 0 static void allocation_to_canvas_region (FooScrollArea *area, GdkRegion *region) { gdk_region_offset (region, area->priv->x_offset, area->priv->y_offset); } - +#endif static void foo_scroll_area_size_allocate (GtkWidget *widget, @@ -788,8 +774,6 @@ foo_scroll_area_size_allocate (GtkWidget *widget, FooScrollArea *scroll_area = FOO_SCROLL_AREA (widget); GdkRectangle new_viewport; GdkRectangle old_viewport; - GdkRegion *old_allocation; - GdkRegion *invalid; get_viewport (scroll_area, &old_viewport); @@ -1373,8 +1357,6 @@ add_path (FooScrollArea *area, #if 0 } #endif - - return path; } /* FIXME: we probably really want a diff --git a/scrollarea.h b/scrollarea.h index 5a5236f..1ce1528 100644 --- a/scrollarea.h +++ b/scrollarea.h @@ -1,3 +1,6 @@ +#ifndef SCROLL_AREA_H +#define SCROLL_AREA_H + #include <cairo/cairo.h> #include <gtk/gtk.h> @@ -110,3 +113,5 @@ void foo_scroll_area_begin_auto_scroll (FooScrollArea *scroll_area); void foo_scroll_area_auto_scroll (FooScrollArea *scroll_area, FooScrollAreaEvent *event); void foo_scroll_area_end_auto_scroll (FooScrollArea *scroll_area); + +#endif |