summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/gtk/ScrollViewGtk.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/gtk/ScrollViewGtk.cpp')
-rw-r--r--WebCore/platform/gtk/ScrollViewGtk.cpp123
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;
-}
-
}