diff options
Diffstat (limited to 'WebCore/platform/gtk/ScrollViewGtk.cpp')
-rw-r--r-- | WebCore/platform/gtk/ScrollViewGtk.cpp | 123 |
1 files changed, 26 insertions, 97 deletions
diff --git a/WebCore/platform/gtk/ScrollViewGtk.cpp b/WebCore/platform/gtk/ScrollViewGtk.cpp index b3b6dd9..0f066fc 100644 --- a/WebCore/platform/gtk/ScrollViewGtk.cpp +++ b/WebCore/platform/gtk/ScrollViewGtk.cpp @@ -1,7 +1,7 @@ /* * Copyright (C) 2006, 2007, 2008 Apple Computer, Inc. All rights reserved. * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com - * Copyright (C) 2007 Holger Hans Peter Freyther + * Copyright (C) 2007, 2009 Holger Hans Peter Freyther * Copyright (C) 2008 Collabora Ltd. * * All rights reserved. @@ -35,7 +35,6 @@ #include "GraphicsContext.h" #include "HostWindow.h" #include "IntRect.h" -#include "NotImplemented.h" #include "PlatformMouseEvent.h" #include "PlatformWheelEvent.h" #include "ScrollbarGtk.h" @@ -47,28 +46,6 @@ using namespace std; namespace WebCore { -static void adjustmentChanged(GtkAdjustment* adjustment, gpointer _that) -{ - ScrollView* that = reinterpret_cast<ScrollView*>(_that); - - // Figure out if we really moved. - IntSize newOffset = that->scrollOffset(); - if (adjustment == that->m_horizontalAdjustment) - newOffset.setWidth(static_cast<int>(gtk_adjustment_get_value(adjustment))); - else if (adjustment == that->m_verticalAdjustment) - newOffset.setHeight(static_cast<int>(gtk_adjustment_get_value(adjustment))); - - IntSize scrollDelta = newOffset - that->scrollOffset(); - if (scrollDelta == IntSize()) - return; - that->setScrollOffset(newOffset); - - if (that->scrollbarsSuppressed()) - return; - - that->scrollContents(scrollDelta); -} - void ScrollView::platformInit() { m_horizontalAdjustment = 0; @@ -77,15 +54,18 @@ void ScrollView::platformInit() void ScrollView::platformDestroy() { - if (m_horizontalAdjustment) { - g_signal_handlers_disconnect_by_func(G_OBJECT(m_horizontalAdjustment), (gpointer)adjustmentChanged, this); - g_object_unref(m_horizontalAdjustment); - } + m_horizontalAdjustment = 0; + m_verticalAdjustment = 0; +} - if (m_verticalAdjustment) { - g_signal_handlers_disconnect_by_func(G_OBJECT(m_verticalAdjustment), (gpointer)adjustmentChanged, this); - g_object_unref(m_verticalAdjustment); - } +PassRefPtr<Scrollbar> ScrollView::createScrollbar(ScrollbarOrientation orientation) +{ + if (orientation == HorizontalScrollbar && m_horizontalAdjustment) + return ScrollbarGtk::createScrollbar(this, orientation, m_horizontalAdjustment); + else if (orientation == VerticalScrollbar && m_verticalAdjustment) + return ScrollbarGtk::createScrollbar(this, orientation, m_verticalAdjustment); + else + return Scrollbar::createNativeScrollbar(this, orientation, RegularScrollbar); } /* @@ -96,30 +76,27 @@ void ScrollView::setGtkAdjustments(GtkAdjustment* hadj, GtkAdjustment* vadj) { ASSERT(!hadj == !vadj); - if (m_horizontalAdjustment) { - g_signal_handlers_disconnect_by_func(G_OBJECT(m_horizontalAdjustment), (gpointer)adjustmentChanged, this); - g_signal_handlers_disconnect_by_func(G_OBJECT(m_verticalAdjustment), (gpointer)adjustmentChanged, this); - g_object_unref(m_horizontalAdjustment); - g_object_unref(m_verticalAdjustment); - } - m_horizontalAdjustment = hadj; m_verticalAdjustment = vadj; + // Reset the adjustments to a sane default if (m_horizontalAdjustment) { - g_signal_connect(m_horizontalAdjustment, "value-changed", G_CALLBACK(adjustmentChanged), this); - g_signal_connect(m_verticalAdjustment, "value-changed", G_CALLBACK(adjustmentChanged), this); - - /* - * disable the scrollbars (if we have any) as the GtkAdjustment over - */ - setHasVerticalScrollbar(false); - setHasHorizontalScrollbar(false); + m_horizontalAdjustment->lower = 0; + m_horizontalAdjustment->upper = 0; + m_horizontalAdjustment->value = 0; + gtk_adjustment_changed(m_horizontalAdjustment); + gtk_adjustment_value_changed(m_horizontalAdjustment); - g_object_ref(m_horizontalAdjustment); - g_object_ref(m_verticalAdjustment); + m_verticalAdjustment->lower = 0; + m_verticalAdjustment->upper = 0; + m_verticalAdjustment->value = 0; + gtk_adjustment_changed(m_verticalAdjustment); + gtk_adjustment_value_changed(m_verticalAdjustment); } + /* reconsider having a scrollbar */ + setHasVerticalScrollbar(false); + setHasHorizontalScrollbar(false); updateScrollbars(m_scrollOffset); } @@ -144,52 +121,4 @@ void ScrollView::platformRemoveChild(Widget* child) gtk_container_remove(GTK_CONTAINER(parent), child->platformWidget()); } -bool ScrollView::platformHandleHorizontalAdjustment(const IntSize& scroll) -{ - if (m_horizontalAdjustment) { - m_horizontalAdjustment->page_size = visibleWidth(); - m_horizontalAdjustment->step_increment = visibleWidth() / 10.0; - m_horizontalAdjustment->page_increment = visibleWidth() * 0.9; - m_horizontalAdjustment->lower = 0; - m_horizontalAdjustment->upper = contentsWidth(); - gtk_adjustment_changed(m_horizontalAdjustment); - - if (m_horizontalAdjustment->value != scroll.width()) { - m_horizontalAdjustment->value = scroll.width(); - gtk_adjustment_value_changed(m_horizontalAdjustment); - } - return true; - } - return false; -} - -bool ScrollView::platformHandleVerticalAdjustment(const IntSize& scroll) -{ - if (m_verticalAdjustment) { - m_verticalAdjustment->page_size = visibleHeight(); - m_verticalAdjustment->step_increment = visibleHeight() / 10.0; - m_verticalAdjustment->page_increment = visibleHeight() * 0.9; - m_verticalAdjustment->lower = 0; - m_verticalAdjustment->upper = contentsHeight(); - gtk_adjustment_changed(m_verticalAdjustment); - - if (m_verticalAdjustment->value != scroll.height()) { - m_verticalAdjustment->value = scroll.height(); - gtk_adjustment_value_changed(m_verticalAdjustment); - } - return true; - } - return false; -} - -bool ScrollView::platformHasHorizontalAdjustment() const -{ - return m_horizontalAdjustment != 0; -} - -bool ScrollView::platformHasVerticalAdjustment() const -{ - return m_verticalAdjustment != 0; -} - } |