static gboolean bytes_view_scroll(GtkWidget *widget, GdkEventScroll *event) { BytesView *bv = BYTES_VIEW(widget); gdouble new_value; if (event->direction == GDK_SCROLL_UP) { /* mouse wheel pageUp */ bytes_view_ensure_vadj(bv); new_value = gtk_adjustment_get_value(bv->vadj) - (gtk_adjustment_get_page_increment(bv->vadj) / 10); if (new_value < gtk_adjustment_get_lower(bv->vadj)) new_value = gtk_adjustment_get_lower(bv->vadj); gtk_adjustment_set_value(bv->vadj, new_value); } else if (event->direction == GDK_SCROLL_DOWN) { /* mouse wheel pageDn */ bytes_view_ensure_vadj(bv); new_value = gtk_adjustment_get_value(bv->vadj) + (gtk_adjustment_get_page_increment(bv->vadj) / 10); if (new_value > (gtk_adjustment_get_upper(bv->vadj) - gtk_adjustment_get_page_size(bv->vadj))) new_value = gtk_adjustment_get_upper(bv->vadj) - gtk_adjustment_get_page_size(bv->vadj); gtk_adjustment_set_value(bv->vadj, new_value); } return FALSE; }
static void gimp_navigation_editor_scroll (GimpNavigationView *view, GdkScrollDirection direction, GimpNavigationEditor *editor) { if (editor->shell) { GtkAdjustment *adj = NULL; gdouble value; switch (direction) { case GDK_SCROLL_LEFT: case GDK_SCROLL_RIGHT: adj = editor->shell->hsbdata; break; case GDK_SCROLL_UP: case GDK_SCROLL_DOWN: adj = editor->shell->vsbdata; break; } g_assert (adj != NULL); value = gtk_adjustment_get_value (adj); switch (direction) { case GDK_SCROLL_LEFT: case GDK_SCROLL_UP: value -= gtk_adjustment_get_page_increment (adj) / 2; break; case GDK_SCROLL_RIGHT: case GDK_SCROLL_DOWN: value += gtk_adjustment_get_page_increment (adj) / 2; break; } value = CLAMP (value, gtk_adjustment_get_lower (adj), gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj)); gtk_adjustment_set_value (adj, value); } }
/** * Scroll page down (via shortcut key) * * Copied from gtkhtml/gtkhtml.c */ static gboolean liferea_webkit_scroll_pagedown (GtkWidget *scrollpane) { GtkScrolledWindow *itemview; GtkAdjustment *vertical_adjustment; gdouble old_value; gdouble new_value; gdouble limit; itemview = GTK_SCROLLED_WINDOW (scrollpane); g_assert (NULL != itemview); vertical_adjustment = gtk_scrolled_window_get_vadjustment (itemview); old_value = gtk_adjustment_get_value (vertical_adjustment); new_value = old_value + gtk_adjustment_get_page_increment (vertical_adjustment); limit = gtk_adjustment_get_upper (vertical_adjustment) - gtk_adjustment_get_page_size (vertical_adjustment); if (new_value > limit) { new_value = limit; } gtk_adjustment_set_value (vertical_adjustment, new_value); gtk_scrolled_window_set_vadjustment ( GTK_SCROLLED_WINDOW (itemview), vertical_adjustment ); return (new_value > old_value); }
JNIEXPORT jdouble JNICALL Java_org_gnome_gtk_GtkAdjustment_gtk_1adjustment_1get_1page_1increment ( JNIEnv* env, jclass cls, jlong _self ) { gdouble result; jdouble _result; GtkAdjustment* self; // convert parameter self self = (GtkAdjustment*) _self; // call function result = gtk_adjustment_get_page_increment(self); // cleanup parameter self // translate return value to JNI type _result = (jdouble) result; // and finally return _result; }
static void dma_chunk_view_move_cursor (GtkTextView *text_view, GtkMovementStep step, gint count, gboolean extend_selection) { DmaChunkView *view = DMA_CHUNK_VIEW (text_view); GtkTextMark *mark; GtkTextBuffer *buffer; GtkTextIter cur; gint line; gdouble value, step_increment; switch (step) { case GTK_MOVEMENT_LOGICAL_POSITIONS: case GTK_MOVEMENT_VISUAL_POSITIONS: case GTK_MOVEMENT_WORDS: case GTK_MOVEMENT_DISPLAY_LINE_ENDS: case GTK_MOVEMENT_HORIZONTAL_PAGES: break; case GTK_MOVEMENT_DISPLAY_LINES: case GTK_MOVEMENT_PARAGRAPHS: case GTK_MOVEMENT_PARAGRAPH_ENDS: buffer = gtk_text_view_get_buffer (text_view); mark = gtk_text_buffer_get_insert (buffer); gtk_text_buffer_get_iter_at_mark (buffer, &cur, mark); line = gtk_text_iter_get_line (&cur); step_increment = gtk_adjustment_get_step_increment (view->vadjustment); if ((count < 0) && (line == 0)) { value += count * step_increment; set_adjustment_clamped (view->vadjustment, value); return; } else if ((count > 0) && (line == gtk_text_buffer_get_line_count(buffer) - 1)) { value += count * step_increment; set_adjustment_clamped (view->vadjustment, value); return; } break; case GTK_MOVEMENT_PAGES: value += count * gtk_adjustment_get_page_increment (view->vadjustment); set_adjustment_clamped (view->vadjustment, value); return; case GTK_MOVEMENT_BUFFER_ENDS: set_adjustment_clamped (view->vadjustment, count < 0 ? gtk_adjustment_get_lower (view->vadjustment) : gtk_adjustment_get_upper (view->vadjustment)); return; default: break; } GTK_TEXT_VIEW_CLASS (parent_class)->move_cursor (text_view, step, count, extend_selection); }
gdouble nsgtk_adjustment_get_page_increment(GtkAdjustment *adjustment) { #if GTK_CHECK_VERSION(2,14,0) return gtk_adjustment_get_page_increment(adjustment); #else return adjustment->page_increment; #endif }
GtkAdjustment* zathura_adjustment_clone(GtkAdjustment* adjustment) { gdouble value = gtk_adjustment_get_value(adjustment); gdouble lower = gtk_adjustment_get_lower(adjustment); gdouble upper = gtk_adjustment_get_upper(adjustment); gdouble step_increment = gtk_adjustment_get_step_increment(adjustment); gdouble page_increment = gtk_adjustment_get_page_increment(adjustment); gdouble page_size = gtk_adjustment_get_page_size(adjustment); return GTK_ADJUSTMENT(gtk_adjustment_new(value, lower, upper, step_increment, page_increment, page_size)); }
/* Auxiliary methods */ static gboolean update_grid_scroll_position (GcalWeekView *self) { g_autoptr(GDateTime) week_start = NULL; g_autoptr(GDateTime) week_end = NULL; g_autoptr(GDateTime) now = NULL; GtkAdjustment *vadjustment; gdouble minutes, real_value; gdouble max, page, page_increment, value; /* While the scrolled window is not mapped, we keep waiting */ if (!gtk_widget_get_realized (self->scrolled_window) || !gtk_widget_get_mapped (self->scrolled_window)) { GCAL_RETURN (G_SOURCE_CONTINUE); } now = g_date_time_new_now_local (); week_start = get_start_of_week (self->date); week_end = get_end_of_week (self->date); /* Don't animate when not today */ if (datetime_compare_date (now, week_start) < 0 || datetime_compare_date (now, week_end) >= 0) GCAL_GOTO (out); vadjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (self->scrolled_window)); minutes = g_date_time_get_hour (now) * 60 + g_date_time_get_minute (now); page = gtk_adjustment_get_page_size (vadjustment); max = gtk_adjustment_get_upper (vadjustment); real_value = max / MINUTES_PER_DAY * minutes - (page / 2.0); page_increment = gtk_adjustment_get_page_increment (vadjustment); value = gtk_adjustment_get_value (vadjustment); gtk_adjustment_set_page_increment (vadjustment, real_value - value); g_signal_emit_by_name (self->scrolled_window, "scroll-child", GTK_SCROLL_PAGE_FORWARD, FALSE); gtk_adjustment_set_page_increment (vadjustment, page_increment); out: self->scroll_grid_timeout_id = 0; GCAL_RETURN (G_SOURCE_REMOVE); }
static void scroll_pages (WebKitWebView *web_view, int num_pages) { #ifdef HAVE_WEBKIT2 /* TODO: Scroll API */ #else GtkScrolledWindow *scrolled_window; GtkAdjustment *vadj; gdouble value; scrolled_window = GTK_SCROLLED_WINDOW (gtk_widget_get_parent (GTK_WIDGET (web_view))); vadj = gtk_scrolled_window_get_vadjustment (scrolled_window); value = gtk_adjustment_get_value (vadj) + (num_pages * gtk_adjustment_get_page_increment (vadj)); gtk_adjustment_set_value (vadj, value); #endif }
static GtkAdjustment * scaled_adjustment (GtkAdjustment *a, gdouble scale) { GtkAdjustment *as; as = gtk_adjustment_new (gtk_adjustment_get_value (a) * scale, gtk_adjustment_get_lower (a) * scale, gtk_adjustment_get_upper (a) * scale, gtk_adjustment_get_step_increment (a) * scale, gtk_adjustment_get_page_increment (a) * scale, gtk_adjustment_get_page_size (a) * scale); g_signal_connect (a, "value-changed", G_CALLBACK (value_changed), as); g_signal_connect (as, "value-changed", G_CALLBACK (value_changed), a); return as; }
void view_scroll_vertical_cmd_callback (GtkAction *action, gint value, gpointer data) { GimpDisplayShell *shell; gdouble offset; return_if_no_shell (shell, data); offset = action_select_value ((GimpActionSelectType) value, gtk_adjustment_get_value (shell->vsbdata), gtk_adjustment_get_lower (shell->vsbdata), gtk_adjustment_get_upper (shell->vsbdata) - gtk_adjustment_get_page_size (shell->vsbdata), gtk_adjustment_get_lower (shell->vsbdata), 1, gtk_adjustment_get_step_increment (shell->vsbdata), gtk_adjustment_get_page_increment (shell->vsbdata), 0, FALSE); gtk_adjustment_set_value (shell->vsbdata, offset); }
static void gtk_value_changed(GtkRange* range, wxSlider* win) { const double value = gtk_range_get_value(range); const double oldPos = win->m_pos; win->m_pos = value; if (!win->m_hasVMT || g_blockEventsOnDrag) return; if (win->GTKEventsDisabled()) { win->m_scrollEventType = GTK_SCROLL_NONE; return; } wxEventType eventType = wxEVT_NULL; if (win->m_isScrolling) { eventType = wxEVT_SCROLL_THUMBTRACK; } else if (win->m_scrollEventType != GTK_SCROLL_NONE) { // Scroll event from "move-slider" (keyboard) eventType = GtkScrollTypeToWx(win->m_scrollEventType); } else if (win->m_mouseButtonDown) { // Difference from last change event const double diff = value - oldPos; const bool isDown = diff > 0; GtkAdjustment* adj = gtk_range_get_adjustment(range); if (IsScrollIncrement(gtk_adjustment_get_page_increment(adj), diff)) { eventType = isDown ? wxEVT_SCROLL_PAGEDOWN : wxEVT_SCROLL_PAGEUP; } else if (wxIsSameDouble(value, 0)) { eventType = wxEVT_SCROLL_PAGEUP; } else if (wxIsSameDouble(value, gtk_adjustment_get_upper(adj))) { eventType = wxEVT_SCROLL_PAGEDOWN; } else { // Assume track event eventType = wxEVT_SCROLL_THUMBTRACK; // Remember that we're tracking win->m_isScrolling = true; } } win->m_scrollEventType = GTK_SCROLL_NONE; // If integral position has changed if (wxRound(oldPos) != wxRound(value)) { ProcessScrollEvent(win, eventType); win->m_needThumbRelease = eventType == wxEVT_SCROLL_THUMBTRACK; } }
static gboolean gwy_scroller_scroll_child(GwyScroller *scroller, GtkScrollType scroll, gboolean horizontal) { Scroller *priv = scroller->priv; switch (scroll) { case GTK_SCROLL_STEP_UP: scroll = GTK_SCROLL_STEP_BACKWARD; horizontal = FALSE; break; case GTK_SCROLL_STEP_DOWN: scroll = GTK_SCROLL_STEP_FORWARD; horizontal = FALSE; break; case GTK_SCROLL_STEP_LEFT: scroll = GTK_SCROLL_STEP_BACKWARD; horizontal = TRUE; break; case GTK_SCROLL_STEP_RIGHT: scroll = GTK_SCROLL_STEP_FORWARD; horizontal = TRUE; break; case GTK_SCROLL_PAGE_UP: scroll = GTK_SCROLL_PAGE_BACKWARD; horizontal = FALSE; break; case GTK_SCROLL_PAGE_DOWN: scroll = GTK_SCROLL_PAGE_FORWARD; horizontal = FALSE; break; case GTK_SCROLL_PAGE_LEFT: scroll = GTK_SCROLL_STEP_BACKWARD; horizontal = TRUE; break; case GTK_SCROLL_PAGE_RIGHT: scroll = GTK_SCROLL_STEP_FORWARD; horizontal = TRUE; break; case GTK_SCROLL_STEP_BACKWARD: case GTK_SCROLL_STEP_FORWARD: case GTK_SCROLL_PAGE_BACKWARD: case GTK_SCROLL_PAGE_FORWARD: case GTK_SCROLL_START: case GTK_SCROLL_END: break; default: g_warning("Invalid scroll type %u for GwyScroller::scroll-child", scroll); return FALSE; } GtkAdjustment *adjustment = (horizontal ? priv->hadjustment : priv->vadjustment); gdouble value = gtk_adjustment_get_value(adjustment); switch (scroll) { case GTK_SCROLL_STEP_FORWARD: value += gtk_adjustment_get_step_increment(adjustment); break; case GTK_SCROLL_STEP_BACKWARD: value -= gtk_adjustment_get_step_increment(adjustment); break; case GTK_SCROLL_PAGE_FORWARD: value += gtk_adjustment_get_page_increment(adjustment); break; case GTK_SCROLL_PAGE_BACKWARD: value -= gtk_adjustment_get_page_increment(adjustment); break; case GTK_SCROLL_START: value = gtk_adjustment_get_lower(adjustment); break; case GTK_SCROLL_END: value = gtk_adjustment_get_upper(adjustment); break; default: g_assert_not_reached(); break; } gtk_adjustment_set_value(adjustment, value); return TRUE; }
int wxSlider::GetPageSize() const { GtkAdjustment* adj = gtk_range_get_adjustment(GTK_RANGE(m_scale)); return int(gtk_adjustment_get_page_increment(adj)); }
static gboolean gimp_scrolled_preview_area_event (GtkWidget *area, GdkEvent *event, GimpScrolledPreview *preview) { GimpScrolledPreviewPrivate *priv = GIMP_SCROLLED_PREVIEW_GET_PRIVATE (preview); GdkEventButton *button_event = (GdkEventButton *) event; GdkCursor *cursor; switch (event->type) { case GDK_BUTTON_PRESS: switch (button_event->button) { case 1: case 2: cursor = gdk_cursor_new_for_display (gtk_widget_get_display (area), GDK_FLEUR); if (gdk_pointer_grab (gtk_widget_get_window (area), TRUE, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK, NULL, cursor, gdk_event_get_time (event)) == GDK_GRAB_SUCCESS) { gtk_widget_get_pointer (area, &priv->drag_x, &priv->drag_y); priv->drag_xoff = GIMP_PREVIEW (preview)->xoff; priv->drag_yoff = GIMP_PREVIEW (preview)->yoff; priv->in_drag = TRUE; gtk_grab_add (area); } gdk_cursor_unref (cursor); break; case 3: return TRUE; } break; case GDK_BUTTON_RELEASE: if (priv->in_drag && (button_event->button == 1 || button_event->button == 2)) { gdk_display_pointer_ungrab (gtk_widget_get_display (area), gdk_event_get_time (event)); gtk_grab_remove (area); priv->in_drag = FALSE; } break; case GDK_MOTION_NOTIFY: if (priv->in_drag) { GdkEventMotion *mevent = (GdkEventMotion *) event; GtkAdjustment *hadj; GtkAdjustment *vadj; gint x, y; hadj = gtk_range_get_adjustment (GTK_RANGE (preview->hscr)); vadj = gtk_range_get_adjustment (GTK_RANGE (preview->vscr)); gtk_widget_get_pointer (area, &x, &y); x = priv->drag_xoff - (x - priv->drag_x); y = priv->drag_yoff - (y - priv->drag_y); x = CLAMP (x, gtk_adjustment_get_lower (hadj), gtk_adjustment_get_upper (hadj) - gtk_adjustment_get_page_size (hadj)); y = CLAMP (y, gtk_adjustment_get_lower (vadj), gtk_adjustment_get_upper (vadj) - gtk_adjustment_get_page_size (vadj)); if (GIMP_PREVIEW (preview)->xoff != x || GIMP_PREVIEW (preview)->yoff != y) { gtk_adjustment_set_value (hadj, x); gtk_adjustment_set_value (vadj, y); gimp_preview_draw (GIMP_PREVIEW (preview)); gimp_preview_invalidate (GIMP_PREVIEW (preview)); } gdk_event_request_motions (mevent); } break; case GDK_SCROLL: { GdkEventScroll *sevent = (GdkEventScroll *) event; GdkScrollDirection direction = sevent->direction; GtkAdjustment *adj; gfloat value; /* Ctrl-Scroll is reserved for zooming */ if (sevent->state & GDK_CONTROL_MASK) return FALSE; if (sevent->state & GDK_SHIFT_MASK) switch (direction) { case GDK_SCROLL_UP: direction = GDK_SCROLL_LEFT; break; case GDK_SCROLL_DOWN: direction = GDK_SCROLL_RIGHT; break; case GDK_SCROLL_LEFT: direction = GDK_SCROLL_UP; break; case GDK_SCROLL_RIGHT: direction = GDK_SCROLL_DOWN; break; } switch (direction) { case GDK_SCROLL_UP: case GDK_SCROLL_DOWN: default: adj = gtk_range_get_adjustment (GTK_RANGE (preview->vscr)); break; case GDK_SCROLL_RIGHT: case GDK_SCROLL_LEFT: adj = gtk_range_get_adjustment (GTK_RANGE (preview->hscr)); break; } value = gtk_adjustment_get_value (adj); switch (direction) { case GDK_SCROLL_UP: case GDK_SCROLL_LEFT: value -= gtk_adjustment_get_page_increment (adj) / 2; break; case GDK_SCROLL_DOWN: case GDK_SCROLL_RIGHT: value += gtk_adjustment_get_page_increment (adj) / 2; break; } gtk_adjustment_set_value (adj, CLAMP (value, gtk_adjustment_get_lower (adj), gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj))); } break; default: break; } return FALSE; }
static gint moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget, GdkDrawable* drawable, GdkRectangle* rect, GdkRectangle* cliprect, GtkWidgetState* state, GtkTextDirection direction) { GtkStateType state_type = (state->inHover || state->active) ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL; GtkShadowType shadow_type = GTK_SHADOW_OUT; GtkStyle* style; GtkScrollbar *scrollbar; GtkAdjustment *adj; gboolean activate_slider; ensure_scrollbar_widget(); if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) scrollbar = GTK_SCROLLBAR(gParts->horizScrollbarWidget); else scrollbar = GTK_SCROLLBAR(gParts->vertScrollbarWidget); gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction); /* Make sure to set the scrollbar range before painting so that everything is drawn properly. At least the bluecurve (and maybe other) themes don't draw the top or bottom black line surrounding the scrollbar if the theme thinks that it's butted up against the scrollbar arrows. Note the increases of the clip rect below. */ /* Changing the cliprect is pretty bogus. This lets themes draw outside the frame, which means we don't invalidate them correctly. See bug 297508. But some themes do seem to need it. So we modify the frame's overflow area to account for what we're doing here; see nsNativeThemeGTK::GetWidgetOverflow. */ adj = gtk_range_get_adjustment(GTK_RANGE(scrollbar)); if (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) { cliprect->x -= 1; cliprect->width += 2; gtk_adjustment_set_page_size(adj, rect->width); } else { cliprect->y -= 1; cliprect->height += 2; gtk_adjustment_set_page_size(adj, rect->height); } #if GTK_CHECK_VERSION(2, 14, 0) gtk_adjustment_configure(adj, state->curpos, 0, state->maxpos, gtk_adjustment_get_step_increment(adj), gtk_adjustment_get_page_increment(adj), gtk_adjustment_get_page_size(adj)); #else adj->lower = 0; adj->value = state->curpos; adj->upper = state->maxpos; gtk_adjustment_changed(adj); #endif style = gtk_widget_get_style(GTK_WIDGET(scrollbar)); gtk_widget_style_get(GTK_WIDGET(scrollbar), "activate-slider", &activate_slider, NULL); if (activate_slider && state->active) { shadow_type = GTK_SHADOW_IN; state_type = GTK_STATE_ACTIVE; } TSOffsetStyleGCs(style, rect->x, rect->y); gtk_paint_slider(style, drawable, state_type, shadow_type, cliprect, GTK_WIDGET(scrollbar), "slider", rect->x, rect->y, rect->width, rect->height, (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); return MOZ_GTK_SUCCESS; }
/** * gimp_scale_entry_set_logarithmic: * @adjustment: a #GtkAdjustment as returned by gimp_scale_entry_new() * @logarithmic: a boolean value to set or reset logarithmic behaviour * of the scale widget * * Sets whether the scale_entry's scale widget will behave in a linear * or logharithmic fashion. Useful when an entry has to attend large * ranges, but smaller selections on that range require a finer * adjustment. * * Since: GIMP 2.2 **/ void gimp_scale_entry_set_logarithmic (GtkObject *adjustment, gboolean logarithmic) { GtkAdjustment *adj; GtkAdjustment *scale_adj; g_return_if_fail (GTK_IS_ADJUSTMENT (adjustment)); adj = GTK_ADJUSTMENT (adjustment); scale_adj = GIMP_SCALE_ENTRY_SCALE_ADJ (adjustment); if (logarithmic == gimp_scale_entry_get_logarithmic (adjustment)) return; if (logarithmic) { gdouble correction; gdouble log_value, log_lower, log_upper; gdouble log_step_increment, log_page_increment; correction = (gtk_adjustment_get_lower (scale_adj) > 0 ? 0 : 0.1 + - gtk_adjustment_get_lower (scale_adj)); log_value = log (gtk_adjustment_get_value (scale_adj) + correction); log_lower = log (gtk_adjustment_get_lower (scale_adj) + correction); log_upper = log (gtk_adjustment_get_upper (scale_adj) + correction); log_step_increment = (log_upper - log_lower) / ((gtk_adjustment_get_upper (scale_adj) - gtk_adjustment_get_lower (scale_adj)) / gtk_adjustment_get_step_increment (scale_adj)); log_page_increment = (log_upper - log_lower) / ((gtk_adjustment_get_upper (scale_adj) - gtk_adjustment_get_lower (scale_adj)) / gtk_adjustment_get_page_increment (scale_adj)); if (scale_adj == adj) { GtkObject *new_adj; new_adj = gtk_adjustment_new (gtk_adjustment_get_value (scale_adj), gtk_adjustment_get_lower (scale_adj), gtk_adjustment_get_upper (scale_adj), gtk_adjustment_get_step_increment (scale_adj), gtk_adjustment_get_page_increment (scale_adj), 0.0); gtk_range_set_adjustment (GTK_RANGE (GIMP_SCALE_ENTRY_SCALE (adj)), GTK_ADJUSTMENT (new_adj)); scale_adj = (GtkAdjustment *) new_adj; } else { g_signal_handlers_disconnect_by_func (adj, gimp_scale_entry_unconstrained_adjustment_callback, scale_adj); g_signal_handlers_disconnect_by_func (scale_adj, gimp_scale_entry_unconstrained_adjustment_callback, adj); } gtk_adjustment_configure (scale_adj, log_value, log_lower, log_upper, log_step_increment, log_page_increment, 0.0); g_signal_connect (scale_adj, "value-changed", G_CALLBACK (gimp_scale_entry_exp_adjustment_callback), adj); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_scale_entry_log_adjustment_callback), scale_adj); g_object_set_data (G_OBJECT (adjustment), "logarithmic", GINT_TO_POINTER (TRUE)); } else { gdouble lower, upper; g_signal_handlers_disconnect_by_func (adj, gimp_scale_entry_log_adjustment_callback, scale_adj); g_signal_handlers_disconnect_by_func (scale_adj, gimp_scale_entry_exp_adjustment_callback, adj); lower = exp (gtk_adjustment_get_lower (scale_adj)); upper = exp (gtk_adjustment_get_upper (scale_adj)); if (gtk_adjustment_get_lower (adj) <= 0.0) { lower += - 0.1 + gtk_adjustment_get_lower (adj); upper += - 0.1 + gtk_adjustment_get_lower (adj); } gtk_adjustment_configure (scale_adj, gtk_adjustment_get_value (adj), lower, upper, gtk_adjustment_get_step_increment (adj), gtk_adjustment_get_page_increment (adj), 0.0); g_signal_connect (scale_adj, "value-changed", G_CALLBACK (gimp_scale_entry_unconstrained_adjustment_callback), adj); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_scale_entry_unconstrained_adjustment_callback), scale_adj); g_object_set_data (G_OBJECT (adjustment), "logarithmic", GINT_TO_POINTER (FALSE)); } }