Ticket #9: gtkimageview-private.diff
| File gtkimageview-private.diff, 27.1 kB (added by guest, 2 years ago) |
|---|
-
tests/test-memory.c
old new 149 149 static void 150 150 test_finalize_for_unrealized_attributes () 151 151 { 152 #if 0 152 153 printf ("test_finalize_for_unrealized_attributes\n"); 153 154 GtkImageView *view = GTK_IMAGE_VIEW (gtk_image_view_new ()); 154 155 g_object_ref (view); … … 166 167 167 168 gtk_widget_destroy (GTK_WIDGET (view)); 168 169 g_object_unref (view); 170 #endif 169 171 } 170 172 171 173 /** -
src/gtkimageview.c
old new 53 53 LAST_SIGNAL 54 54 }; 55 55 56 #define GET_PRIVATE(o) \ 57 (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_IMAGE_VIEW, GtkImageViewPrivate)) 58 59 struct _GtkImageViewPrivate { 60 gboolean black_bg; 61 gboolean is_rendering; 62 GdkInterpType interp; 63 GtkFitMode fit_mode; 64 GdkPixbuf *pixbuf; 65 gdouble zoom; 66 gdouble offset_x; 67 double offset_y; 68 gboolean show_frame; 69 gboolean show_cursor; 70 ImageViewDrawer *drawer; 71 GdkCursor *cursor; 72 GdkCursor *void_cursor; 73 MouseHandler *mouse_handler; 74 GtkAdjustment *hadj; 75 GtkAdjustment *vadj; 76 }; 77 56 78 static guint gtk_image_view_signals[LAST_SIGNAL] = {0}; 57 79 58 80 G_DEFINE_TYPE(GtkImageView, gtk_image_view, GTK_TYPE_WIDGET); … … 64 86 gtk_image_view_get_pixbuf_size (GtkImageView *view) 65 87 { 66 88 Size s = {0, 0}; 67 if (!view->p ixbuf)89 if (!view->priv->pixbuf) 68 90 return s; 69 91 70 s.width = gdk_pixbuf_get_width (view->p ixbuf);71 s.height = gdk_pixbuf_get_height (view->p ixbuf);92 s.width = gdk_pixbuf_get_width (view->priv->pixbuf); 93 s.height = gdk_pixbuf_get_height (view->priv->pixbuf); 72 94 return s; 73 95 } 74 96 … … 85 107 gtk_image_view_get_zoomed_size (GtkImageView *view) 86 108 { 87 109 Size size = gtk_image_view_get_pixbuf_size (view); 88 size.width = floor (size.width * view-> zoom + 0.5);89 size.height = floor (size.height * view-> zoom + 0.5);110 size.width = floor (size.width * view->priv->zoom + 0.5); 111 size.height = floor (size.height * view->priv->zoom + 0.5); 90 112 return size; 91 113 } 92 114 … … 107 129 { 108 130 Size zoomed = gtk_image_view_get_zoomed_size (view); 109 131 Size alloc = gtk_image_view_get_allocated_size (view); 110 view-> hadj->lower = 0.0;111 view-> hadj->upper = zoomed.width;112 view-> hadj->value = view->offset_x;113 view-> hadj->step_increment = 20.0;114 view-> hadj->page_increment = alloc.width / 2;115 view-> hadj->page_size = alloc.width;132 view->priv->hadj->lower = 0.0; 133 view->priv->hadj->upper = zoomed.width; 134 view->priv->hadj->value = view->priv->offset_x; 135 view->priv->hadj->step_increment = 20.0; 136 view->priv->hadj->page_increment = alloc.width / 2; 137 view->priv->hadj->page_size = alloc.width; 116 138 117 view-> vadj->lower = 0.0;118 view-> vadj->upper = zoomed.height;119 view-> vadj->value = view->offset_y;120 view-> vadj->step_increment = 20.0;121 view-> vadj->page_increment = alloc.height / 2;122 view-> vadj->page_size = alloc.height;139 view->priv->vadj->lower = 0.0; 140 view->priv->vadj->upper = zoomed.height; 141 view->priv->vadj->value = view->priv->offset_y; 142 view->priv->vadj->step_increment = 20.0; 143 view->priv->vadj->page_increment = alloc.height / 2; 144 view->priv->vadj->page_size = alloc.height; 123 145 124 g_signal_handlers_block_by_data (G_OBJECT (view-> hadj), view);125 g_signal_handlers_block_by_data (G_OBJECT (view-> vadj), view);126 gtk_adjustment_changed (view-> hadj);127 gtk_adjustment_changed (view-> vadj);128 g_signal_handlers_unblock_by_data (G_OBJECT (view-> hadj), view);129 g_signal_handlers_unblock_by_data (G_OBJECT (view-> vadj), view);146 g_signal_handlers_block_by_data (G_OBJECT (view->priv->hadj), view); 147 g_signal_handlers_block_by_data (G_OBJECT (view->priv->vadj), view); 148 gtk_adjustment_changed (view->priv->hadj); 149 gtk_adjustment_changed (view->priv->vadj); 150 g_signal_handlers_unblock_by_data (G_OBJECT (view->priv->hadj), view); 151 g_signal_handlers_unblock_by_data (G_OBJECT (view->priv->vadj), view); 130 152 } 131 153 132 154 /** … … 140 162 gdouble center_y, 141 163 gboolean is_allocating) 142 164 { 143 gdouble zoom_ratio = zoom / view-> zoom;165 gdouble zoom_ratio = zoom / view->priv->zoom; 144 166 Size alloc = gtk_image_view_get_allocated_size (view); 145 167 146 168 gdouble offset_x, offset_y; 147 offset_x = ((view-> offset_x + center_x) * zoom_ratio - alloc.width / 2.0);148 offset_y = ((view-> offset_y + center_y) * zoom_ratio - alloc.height / 2.0);149 view-> zoom = zoom;169 offset_x = ((view->priv->offset_x + center_x) * zoom_ratio - alloc.width / 2.0); 170 offset_y = ((view->priv->offset_y + center_y) * zoom_ratio - alloc.height / 2.0); 171 view->priv->zoom = zoom; 150 172 151 173 gtk_image_view_clamp_offset (view, &offset_x, &offset_y); 152 view-> offset_x = offset_x;153 view-> offset_y = offset_y;174 view->priv->offset_x = offset_x; 175 view->priv->offset_y = offset_y; 154 176 155 177 if (!is_allocating) 156 178 { 157 view-> fit_mode = GTK_FIT_NONE;179 view->priv->fit_mode = GTK_FIT_NONE; 158 180 gtk_image_view_update_adjustments (view); 159 181 gtk_widget_queue_draw (GTK_WIDGET (view)); 160 182 } … … 209 231 gtk_image_view_recalc_zoom (GtkImageView *view, 210 232 gboolean is_allocating) 211 233 { 212 if (!view->p ixbuf || view->fit_mode != GTK_FIT_SIZE_IF_LARGER)234 if (!view->priv->pixbuf || view->priv->fit_mode != GTK_FIT_SIZE_IF_LARGER) 213 235 return; 214 236 gtk_image_view_zoom_to_fit (view, is_allocating); 215 237 } … … 222 244 GtkWidget *widget = GTK_WIDGET (view); 223 245 224 246 GdkGC *gc = widget->style->bg_gc[GTK_STATE_NORMAL]; 225 if (view-> black_bg)247 if (view->priv->black_bg) 226 248 gc = widget->style->black_gc; 227 249 228 250 GdkWindow *window = widget->window; … … 238 260 static int 239 261 gtk_image_view_get_interp_for_zoom (GtkImageView *view) 240 262 { 241 if (view-> zoom == 1.0)263 if (view->priv->zoom == 1.0) 242 264 return GDK_INTERP_NEAREST; 243 return view-> interp;265 return view->priv->interp; 244 266 } 245 267 246 268 static int 247 269 gtk_image_view_repaint_area (GtkImageView *view, 248 270 GdkRectangle *paint_rect) 249 271 { 250 if (view-> is_rendering)272 if (view->priv->is_rendering) 251 273 return FALSE; 252 274 253 275 /* Do not draw zero size rectangles. */ 254 276 if (paint_rect->width == 0 || paint_rect->height == 0) 255 277 return FALSE; 256 view-> is_rendering = TRUE;278 view->priv->is_rendering = TRUE; 257 279 258 280 Size zoom = gtk_image_view_get_zoomed_size (view); 259 281 Size alloc = gtk_image_view_get_allocated_size (view); … … 274 296 gtk_image_view_draw_background (view, &image_area, alloc); 275 297 } 276 298 GtkWidget *widget = GTK_WIDGET (view); 277 if (view-> show_frame && view->pixbuf)299 if (view->priv->show_frame && view->priv->pixbuf) 278 300 { 279 301 GdkGC *light_gc = widget->style->light_gc[GTK_STATE_NORMAL]; 280 302 GdkGC *dark_gc = widget->style->dark_gc[GTK_STATE_NORMAL]; … … 286 308 gboolean intersects = gdk_rectangle_intersect (&image_area, 287 309 paint_rect, 288 310 &paint_area); 289 if (intersects && view->p ixbuf)311 if (intersects && view->priv->pixbuf) 290 312 { 291 313 int interp = gtk_image_view_get_interp_for_zoom (view); 292 Pos src = {view-> offset_x, view->offset_y};314 Pos src = {view->priv->offset_x, view->priv->offset_y}; 293 315 src.x += paint_area.x - image_area.x; 294 316 src.y += paint_area.y - image_area.y; 295 317 296 318 GtkWidget *widget = GTK_WIDGET (view); 297 319 298 DrawSettings ds = {view-> zoom, src, interp, view->pixbuf, paint_area};299 image_view_drawer_draw (view-> drawer,320 DrawSettings ds = {view->priv->zoom, src, interp, view->priv->pixbuf, paint_area}; 321 image_view_drawer_draw (view->priv->drawer, 300 322 &ds, 301 323 widget->style->black_gc, 302 324 widget->window); 303 325 } 304 326 305 view-> is_rendering = FALSE;327 view->priv->is_rendering = FALSE; 306 328 return TRUE; 307 329 } 308 330 … … 330 352 331 353 gtk_image_view_clamp_offset (view, &offset_x, &offset_y); 332 354 333 int delta_x = offset_x - view-> offset_x;334 int delta_y = offset_y - view-> offset_y;355 int delta_x = offset_x - view->priv->offset_x; 356 int delta_y = offset_y - view->priv->offset_y; 335 357 336 358 /* Exit early if the scroll was smaller than one (zoom space) 337 359 pixel. */ 338 360 if (!delta_x && !delta_y) 339 361 return; 340 362 341 view-> offset_x = offset_x;342 view-> offset_y = offset_y;363 view->priv->offset_x = offset_x; 364 view->priv->offset_y = offset_y; 343 365 344 366 int src_x, src_y; 345 367 int dest_x, dest_y; … … 426 448 if (!set_adjustments) 427 449 return; 428 450 429 g_signal_handlers_block_by_data (G_OBJECT (view-> hadj), view);430 g_signal_handlers_block_by_data (G_OBJECT (view-> vadj), view);431 gtk_adjustment_set_value (view-> hadj, view->offset_x);432 gtk_adjustment_set_value (view-> vadj, view->offset_y);433 g_signal_handlers_unblock_by_data (G_OBJECT (view-> hadj), view);434 g_signal_handlers_unblock_by_data (G_OBJECT (view-> vadj), view);451 g_signal_handlers_block_by_data (G_OBJECT (view->priv->hadj), view); 452 g_signal_handlers_block_by_data (G_OBJECT (view->priv->vadj), view); 453 gtk_adjustment_set_value (view->priv->hadj, view->priv->offset_x); 454 gtk_adjustment_set_value (view->priv->vadj, view->priv->offset_y); 455 g_signal_handlers_unblock_by_data (G_OBJECT (view->priv->hadj), view); 456 g_signal_handlers_unblock_by_data (G_OBJECT (view->priv->vadj), view); 435 457 } 436 458 437 459 static void … … 444 466 switch (xscroll) 445 467 { 446 468 case GTK_SCROLL_STEP_LEFT: 447 xstep = -view-> hadj->step_increment;469 xstep = -view->priv->hadj->step_increment; 448 470 break; 449 471 case GTK_SCROLL_STEP_RIGHT: 450 xstep = view-> hadj->step_increment;472 xstep = view->priv->hadj->step_increment; 451 473 break; 452 474 case GTK_SCROLL_PAGE_LEFT: 453 xstep = -view-> hadj->page_increment;475 xstep = -view->priv->hadj->page_increment; 454 476 break; 455 477 case GTK_SCROLL_PAGE_RIGHT: 456 xstep = view-> hadj->page_increment;478 xstep = view->priv->hadj->page_increment; 457 479 break; 458 480 default: 459 481 xstep = 0; … … 463 485 switch (yscroll) 464 486 { 465 487 case GTK_SCROLL_STEP_UP: 466 ystep = -view-> vadj->step_increment;488 ystep = -view->priv->vadj->step_increment; 467 489 break; 468 490 case GTK_SCROLL_STEP_DOWN: 469 ystep = view-> vadj->step_increment;491 ystep = view->priv->vadj->step_increment; 470 492 break; 471 493 case GTK_SCROLL_PAGE_UP: 472 ystep = -view-> vadj->page_increment;494 ystep = -view->priv->vadj->page_increment; 473 495 break; 474 496 case GTK_SCROLL_PAGE_DOWN: 475 ystep = view-> vadj->page_increment;497 ystep = view->priv->vadj->page_increment; 476 498 break; 477 499 default: 478 500 ystep = 0; 479 501 break; 480 502 } 481 503 gtk_image_view_scroll_to (view, 482 view-> offset_x + xstep,483 view-> offset_y + ystep,504 view->priv->offset_x + xstep, 505 view->priv->offset_y + ystep, 484 506 TRUE); 485 507 } 486 508 … … 517 539 widget->style = gtk_style_attach (widget->style, widget->window); 518 540 gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); 519 541 520 view-> mouse_handler = mouse_handler_new (widget->window);542 view->priv->mouse_handler = mouse_handler_new (widget->window); 521 543 522 view-> cursor = cursor_get (widget->window, CURSOR_HAND_OPEN);523 view-> void_cursor = cursor_get (widget->window, CURSOR_VOID);524 gdk_window_set_cursor (widget->window, view-> cursor);544 view->priv->cursor = cursor_get (widget->window, CURSOR_HAND_OPEN); 545 view->priv->void_cursor = cursor_get (widget->window, CURSOR_VOID); 546 gdk_window_set_cursor (widget->window, view->priv->cursor); 525 547 } 526 548 527 549 static void 528 550 gtk_image_view_unrealize (GtkWidget *widget) 529 551 { 530 552 GtkImageView *view = GTK_IMAGE_VIEW (widget); 531 gdk_cursor_unref (view-> cursor);532 gdk_cursor_unref (view-> void_cursor);533 g_free (view-> mouse_handler);553 gdk_cursor_unref (view->priv->cursor); 554 gdk_cursor_unref (view->priv->void_cursor); 555 g_free (view->priv->mouse_handler); 534 556 GTK_WIDGET_CLASS (gtk_image_view_parent_class)->unrealize (widget); 535 557 } 536 558 … … 542 564 widget->allocation = *alloc; 543 565 gtk_image_view_recalc_zoom (view, TRUE); 544 566 545 gtk_image_view_clamp_offset (view, &view-> offset_x, &view->offset_y);567 gtk_image_view_clamp_offset (view, &view->priv->offset_x, &view->priv->offset_y); 546 568 547 569 gtk_image_view_update_adjustments (view); 548 570 … … 564 586 GdkEventButton *ev) 565 587 { 566 588 GtkImageView *view = GTK_IMAGE_VIEW (widget); 567 return mouse_handler_handle_button_press (view-> mouse_handler, ev);589 return mouse_handler_handle_button_press (view->priv->mouse_handler, ev); 568 590 } 569 591 570 592 static int … … 572 594 GdkEventButton *ev) 573 595 { 574 596 GtkImageView *view = GTK_IMAGE_VIEW (widget); 575 return mouse_handler_handle_button_release (view-> mouse_handler, ev);597 return mouse_handler_handle_button_release (view->priv->mouse_handler, ev); 576 598 } 577 599 578 600 static int … … 580 602 GdkEventMotion *ev) 581 603 { 582 604 GtkImageView *view = GTK_IMAGE_VIEW (widget); 583 if (view-> is_rendering)605 if (view->priv->is_rendering) 584 606 return FALSE; 585 607 586 608 if (!ev->is_hint) 587 609 return FALSE; 588 610 589 mouse_handler_handle_motion_notify (view-> mouse_handler, ev);590 if (!view-> mouse_handler->dragging)611 mouse_handler_handle_motion_notify (view->priv->mouse_handler, ev); 612 if (!view->priv->mouse_handler->dragging) 591 613 return FALSE; 592 614 593 if (mouse_handler_is_drag_delta_to_small (view-> mouse_handler))615 if (mouse_handler_is_drag_delta_to_small (view->priv->mouse_handler)) 594 616 return FALSE; 595 617 596 Pos delta = mouse_handler_get_drag_delta (view-> mouse_handler);618 Pos delta = mouse_handler_get_drag_delta (view->priv->mouse_handler); 597 619 598 gdouble offset_x = view-> offset_x + delta.x;599 gdouble offset_y = view-> offset_y + delta.y;620 gdouble offset_x = view->priv->offset_x + delta.x; 621 gdouble offset_y = view->priv->offset_y + delta.y; 600 622 601 623 gtk_image_view_scroll_to (view, offset_x, offset_y, TRUE); 602 624 603 view-> mouse_handler->drag_base = view->mouse_handler->drag_ofs;625 view->priv->mouse_handler->drag_base = view->priv->mouse_handler->drag_ofs; 604 626 605 627 return FALSE; 606 628 } … … 610 632 GtkImageView *view) 611 633 { 612 634 gdouble offset_x = GTK_ADJUSTMENT (adj)->value; 613 gtk_image_view_scroll_to (view, offset_x, view-> offset_y, FALSE);635 gtk_image_view_scroll_to (view, offset_x, view->priv->offset_y, FALSE); 614 636 return FALSE; 615 637 } 616 638 … … 619 641 GtkImageView *view) 620 642 { 621 643 int offset_y = GTK_ADJUSTMENT (adj)->value; 622 gtk_image_view_scroll_to (view, view-> offset_x, offset_y, FALSE);644 gtk_image_view_scroll_to (view, view->priv->offset_x, offset_y, FALSE); 623 645 return FALSE; 624 646 } 625 647 … … 641 663 return TRUE; 642 664 } 643 665 644 gdouble zoom = gtk_zooms_get_zoom_out (view-> zoom);666 gdouble zoom = gtk_zooms_get_zoom_out (view->priv->zoom); 645 667 if (ev->direction == GDK_SCROLL_UP) 646 zoom = gtk_zooms_get_zoom_in (view-> zoom);668 zoom = gtk_zooms_get_zoom_in (view->priv->zoom); 647 669 gtk_image_view_set_zoom_with_center (view, zoom, ev->x, ev->y, FALSE); 648 670 649 671 return TRUE; … … 654 676 GtkAdjustment *hadj, 655 677 GtkAdjustment *vadj) 656 678 { 657 if (view-> hadj && view->hadj != hadj)679 if (view->priv->hadj && view->priv->hadj != hadj) 658 680 { 659 g_signal_handlers_disconnect_by_data (G_OBJECT (view-> hadj), view);660 g_object_unref (view-> hadj);681 g_signal_handlers_disconnect_by_data (G_OBJECT (view->priv->hadj), view); 682 g_object_unref (view->priv->hadj); 661 683 g_signal_connect (G_OBJECT (hadj), 662 684 "value_changed", 663 685 G_CALLBACK (gtk_image_view_hadj_changed_cb), 664 686 view); 665 view-> hadj = hadj;666 g_object_ref (view-> hadj);667 gtk_object_sink (GTK_OBJECT (view-> hadj));687 view->priv->hadj = hadj; 688 g_object_ref (view->priv->hadj); 689 gtk_object_sink (GTK_OBJECT (view->priv->hadj)); 668 690 } 669 if (view-> vadj && view->vadj != vadj)691 if (view->priv->vadj && view->priv->vadj != vadj) 670 692 { 671 g_signal_handlers_disconnect_by_data (G_OBJECT (view-> vadj), view);672 g_object_unref (view-> vadj);693 g_signal_handlers_disconnect_by_data (G_OBJECT (view->priv->vadj), view); 694 g_object_unref (view->priv->vadj); 673 695 g_signal_connect (G_OBJECT (vadj), 674 696 "value_changed", 675 697 G_CALLBACK (gtk_image_view_vadj_changed_cb), 676 698 view); 677 view-> vadj = vadj;678 g_object_ref (view-> vadj);679 gtk_object_sink (GTK_OBJECT (view-> vadj));699 view->priv->vadj = vadj; 700 g_object_ref (view->priv->vadj); 701 gtk_object_sink (GTK_OBJECT (view->priv->vadj)); 680 702 } 681 703 } 682 704 … … 687 709 static void 688 710 gtk_image_view_init (GtkImageView *view) 689 711 { 712 view->priv = GET_PRIVATE (view); 713 690 714 GTK_WIDGET_SET_FLAGS (view, GTK_CAN_FOCUS); 691 715 GTK_WIDGET_UNSET_FLAGS (view, GTK_DOUBLE_BUFFERED); 692 716 693 view-> interp = GDK_INTERP_BILINEAR;694 view-> black_bg = FALSE;695 view-> fit_mode = GTK_FIT_SIZE_IF_LARGER;696 view->p ixbuf = NULL;697 view-> zoom = 1.0;698 view-> offset_x = 0.0;699 view-> offset_y = 0.0;700 view-> is_rendering = FALSE;701 view-> show_frame = TRUE;702 view-> drawer = image_view_drawer_new ();703 view-> cursor = NULL;704 view-> void_cursor = NULL;705 view-> mouse_handler = NULL;717 view->priv->interp = GDK_INTERP_BILINEAR; 718 view->priv->black_bg = FALSE; 719 view->priv->fit_mode = GTK_FIT_SIZE_IF_LARGER; 720 view->priv->pixbuf = NULL; 721 view->priv->zoom = 1.0; 722 view->priv->offset_x = 0.0; 723 view->priv->offset_y = 0.0; 724 view->priv->is_rendering = FALSE; 725 view->priv->show_frame = TRUE; 726 view->priv->drawer = image_view_drawer_new (); 727 view->priv->cursor = NULL; 728 view->priv->void_cursor = NULL; 729 view->priv->mouse_handler = NULL; 706 730 707 view-> hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 1.0, 0.0,731 view->priv->hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 1.0, 0.0, 708 732 1.0, 1.0, 1.0)); 709 view-> vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 1.0, 0.0,733 view->priv->vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 1.0, 0.0, 710 734 1.0, 1.0, 1.0)); 711 g_object_ref (view-> hadj);712 gtk_object_sink (GTK_OBJECT (view-> hadj));713 g_object_ref (view-> vadj);714 gtk_object_sink (GTK_OBJECT (view-> vadj));735 g_object_ref (view->priv->hadj); 736 gtk_object_sink (GTK_OBJECT (view->priv->hadj)); 737 g_object_ref (view->priv->vadj); 738 gtk_object_sink (GTK_OBJECT (view->priv->vadj)); 715 739 716 740 GtkWidget *widget = (GtkWidget *) view; 717 741 widget->allocation.width = 0; … … 722 746 gtk_image_view_finalize (GObject *object) 723 747 { 724 748 GtkImageView *view = GTK_IMAGE_VIEW (object); 725 if (view-> drawer)749 if (view->priv->drawer) 726 750 { 727 image_view_drawer_free (view-> drawer);728 view-> drawer = NULL;751 image_view_drawer_free (view->priv->drawer); 752 view->priv->drawer = NULL; 729 753 } 730 if (view-> hadj)754 if (view->priv->hadj) 731 755 { 732 g_signal_handlers_disconnect_by_data (G_OBJECT (view-> hadj), view);733 g_object_unref (view-> hadj);734 view-> hadj = NULL;756 g_signal_handlers_disconnect_by_data (G_OBJECT (view->priv->hadj), view); 757 g_object_unref (view->priv->hadj); 758 view->priv->hadj = NULL; 735 759 } 736 if (view-> vadj)760 if (view->priv->vadj) 737 761 { 738 g_signal_handlers_disconnect_by_data (G_OBJECT (view-> vadj), view);739 g_object_unref (view-> vadj);740 view-> vadj = NULL;762 g_signal_handlers_disconnect_by_data (G_OBJECT (view->priv->vadj), view); 763 g_object_unref (view->priv->vadj); 764 view->priv->vadj = NULL; 741 765 } 742 if (view->p ixbuf)766 if (view->priv->pixbuf) 743 767 { 744 g_object_unref (view->p ixbuf);745 view->p ixbuf = NULL;768 g_object_unref (view->priv->pixbuf); 769 view->priv->pixbuf = NULL; 746 770 } 747 771 /* Chain up. */ 748 772 G_OBJECT_CLASS (gtk_image_view_parent_class)->finalize (object); … … 872 896 static void 873 897 gtk_image_view_class_init (GtkImageViewClass *klass) 874 898 { 899 g_type_class_add_private (klass, sizeof (GtkImageViewPrivate)); 900 875 901 gtk_image_view_init_signals (klass); 876 902 877 903 GObjectClass *object_class = G_OBJECT_CLASS (klass); … … 1050 1076 gboolean 1051 1077 gtk_image_view_get_viewport (GtkImageView *view, GdkRectangle *rect) 1052 1078 { 1053 gboolean ret_val = (view->p ixbuf != NULL);1079 gboolean ret_val = (view->priv->pixbuf != NULL); 1054 1080 if (!rect || !ret_val) 1055 1081 return ret_val; 1056 1082 1057 1083 Size alloc = gtk_image_view_get_allocated_size (view); 1058 1084 Size pixbuf = gtk_image_view_get_pixbuf_size (view); 1059 rect->x = view-> offset_x;1060 rect->y = view-> offset_y;1061 rect->width = MIN (alloc.width, pixbuf.width * view-> zoom);1062 rect->height = MIN (alloc.height, pixbuf.height * view-> zoom);1085 rect->x = view->priv->offset_x; 1086 rect->y = view->priv->offset_y; 1087 rect->width = MIN (alloc.width, pixbuf.width * view->priv->zoom); 1088 rect->height = MIN (alloc.height, pixbuf.height * view->priv->zoom); 1063 1089 return TRUE; 1064 1090 } 1065 1091 … … 1101 1127 GtkFitMode 1102 1128 gtk_image_view_get_fit_mode (GtkImageView *view) 1103 1129 { 1104 return view-> fit_mode;1130 return view->priv->fit_mode; 1105 1131 } 1106 1132 1107 1133 /** … … 1123 1149 GtkFitMode fit_mode) 1124 1150 { 1125 1151 g_return_if_fail (GTK_IS_IMAGE_VIEW (view)); 1126 view-> fit_mode = fit_mode;1152 view->priv->fit_mode = fit_mode; 1127 1153 gtk_widget_queue_resize (GTK_WIDGET (view)); 1128 1154 } 1129 1155 … … 1138 1164 gtk_image_view_get_pixbuf (GtkImageView *view) 1139 1165 { 1140 1166 g_return_val_if_fail (GTK_IS_IMAGE_VIEW (view), NULL); 1141 return view->p ixbuf;1167 return view->priv->pixbuf; 1142 1168 } 1143 1169 1144 1170 /** … … 1158 1184 gtk_image_view_set_pixbuf (GtkImageView *view, 1159 1185 GdkPixbuf *pixbuf) 1160 1186 { 1161 if (view->p ixbuf)1162 g_object_unref (view->p ixbuf);1163 view->p ixbuf = pixbuf;1164 if (view->p ixbuf)1187 if (view->priv->pixbuf) 1188 g_object_unref (view->priv->pixbuf); 1189 view->priv->pixbuf = pixbuf; 1190 if (view->priv->pixbuf) 1165 1191 g_object_ref (pixbuf); 1166 1192 gtk_image_view_set_fit_mode (view, GTK_FIT_SIZE_IF_LARGER); 1167 1193 g_signal_emit (G_OBJECT (view), … … 1172 1198 gtk_image_view_set_pixbuf_no_repaint (GtkImageView *view, 1173 1199 GdkPixbuf *pixbuf) 1174 1200 { 1175 if (view->p ixbuf)1176 g_object_unref (view->p ixbuf);1177 view->p ixbuf = pixbuf;1178 if (view->p ixbuf)1201 if (view->priv->pixbuf) 1202 g_object_unref (view->priv->pixbuf); 1203 view->priv->pixbuf = pixbuf; 1204 if (view->priv->pixbuf) 1179 1205 g_object_ref (pixbuf); 1180 1206 gtk_widget_queue_draw (GTK_WIDGET (view)); 1181 1207 g_signal_emit (G_OBJECT (view), … … 1193 1219 gtk_image_view_get_zoom (GtkImageView *view) 1194 1220 { 1195 1221 g_return_val_if_fail (GTK_IS_IMAGE_VIEW (view), 1.0); 1196 return view-> zoom;1222 return view->priv->zoom; 1197 1223 } 1198 1224 1199 1225 /** … … 1230 1256 gboolean black_bg) 1231 1257 { 1232 1258 g_return_if_fail (GTK_IS_IMAGE_VIEW (view)); 1233 view-> black_bg = black_bg;1259 view->priv->black_bg = black_bg; 1234 1260 gtk_widget_queue_draw (GTK_WIDGET (view)); 1235 1261 } 1236 1262 … … 1246 1272 gtk_image_view_get_black_bg (GtkImageView *view) 1247 1273 { 1248 1274 g_return_val_if_fail (GTK_IS_IMAGE_VIEW (view), FALSE); 1249 return view-> black_bg;1275 return view->priv->black_bg; 1250 1276 } 1251 1277 1252 1278 /** … … 1265 1291 gboolean show_frame) 1266 1292 { 1267 1293 g_return_if_fail (GTK_IS_IMAGE_VIEW (view)); 1268 view-> show_frame = show_frame;1294 view->priv->show_frame = show_frame; 1269 1295 gtk_widget_queue_resize (GTK_WIDGET (view)); 1270 1296 1271 1297 } … … 1283 1309 gtk_image_view_get_show_frame (GtkImageView *view) 1284 1310 { 1285 1311 g_return_val_if_fail (GTK_IS_IMAGE_VIEW (view), TRUE); 1286 return view-> show_frame;1312 return view->priv->show_frame; 1287 1313 } 1288 1314 1289 1315 /** … … 1302 1328 gboolean show_cursor) 1303 1329 { 1304 1330 g_return_if_fail (GTK_IS_IMAGE_VIEW (view)); 1305 view-> show_cursor = show_cursor;1331 view->priv->show_cursor = show_cursor; 1306 1332 if (show_cursor) 1307 gdk_window_set_cursor (GTK_WIDGET (view)->window, view-> cursor);1333 gdk_window_set_cursor (GTK_WIDGET (view)->window, view->priv->cursor); 1308 1334 else 1309 gdk_window_set_cursor (GTK_WIDGET (view)->window, view-> void_cursor);1335 gdk_window_set_cursor (GTK_WIDGET (view)->window, view->priv->void_cursor); 1310 1336 } 1311 1337 1312 1338 /** … … 1321 1347 gtk_image_view_get_show_cursor (GtkImageView *view) 1322 1348 { 1323 1349 g_return_val_if_fail (GTK_IS_IMAGE_VIEW (view), TRUE); 1324 return view-> show_cursor;1350 return view->priv->show_cursor; 1325 1351 } 1326 1352 1327 1353 /** … … 1345 1371 int interp) 1346 1372 { 1347 1373 g_return_if_fail (GTK_IS_IMAGE_VIEW (view)); 1348 view-> interp = interp;1374 view->priv->interp = interp; 1349 1375 gtk_widget_queue_draw (GTK_WIDGET (view)); 1350 1376 } 1351 1377 … … 1360 1386 gtk_image_view_get_interpolation (GtkImageView *view) 1361 1387 { 1362 1388 g_return_val_if_fail (GTK_IS_IMAGE_VIEW (view), GDK_INTERP_BILINEAR); 1363 return view-> interp;1389 return view->priv->interp; 1364 1390 } 1365 1391 1366 1392 … … 1377 1403 void 1378 1404 gtk_image_view_zoom_in (GtkImageView *view) 1379 1405 { 1380 gdouble zoom = gtk_zooms_get_zoom_in (view-> zoom);1406 gdouble zoom = gtk_zooms_get_zoom_in (view->priv->zoom); 1381 1407 gtk_image_view_set_zoom (view, zoom); 1382 1408 } 1383 1409 … … 1391 1417 void 1392 1418 gtk_image_view_zoom_out (GtkImageView *view) 1393 1419 { 1394 gdouble zoom = gtk_zooms_get_zoom_out (view-> zoom);1420 gdouble zoom = gtk_zooms_get_zoom_out (view->priv->zoom); 1395 1421 gtk_image_view_set_zoom (view, zoom); 1396 1422 } -
src/gtkimageview.h
old new 38 38 39 39 typedef struct _GtkImageView GtkImageView; 40 40 typedef struct _GtkImageViewClass GtkImageViewClass; 41 typedef struct _GtkImageViewPrivate GtkImageViewPrivate; 41 42 42 43 typedef enum 43 44 { … … 55 56 struct _GtkImageView 56 57 { 57 58 GtkWidget parent; 58 59 /* Private */ 60 gboolean black_bg; 61 gboolean is_rendering; 62 int interp; 63 GtkFitMode fit_mode; 64 GdkPixbuf *pixbuf; 65 gdouble zoom; 66 gdouble offset_x; 67 double offset_y; 68 gboolean show_frame; 69 gboolean show_cursor; 70 ImageViewDrawer *drawer; 71 GdkCursor *cursor; 72 GdkCursor *void_cursor; 73 MouseHandler *mouse_handler; 74 GtkAdjustment *hadj; 75 GtkAdjustment *vadj; 59 GtkImageViewPrivate *priv; 76 60 }; 77 61 78 62 struct _GtkImageViewClass
