📄 gtkrange.c
字号:
break; case GTK_SCROLL_STEP_FORWARD: gtk_range_draw_step_forw (range); break; } } } if (pos != GTK_TROUGH_NONE) { if (pos == GTK_TROUGH_START) range->adjustment->value = range->adjustment->lower; else if (pos == GTK_TROUGH_END) range->adjustment->value = range->adjustment->upper - range->adjustment->page_size; if (range->old_value != range->adjustment->value) { gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed"); gtk_range_slider_update (range); gtk_range_clear_background (range); } } } return return_val;}static gintgtk_range_enter_notify (GtkWidget *widget, GdkEventCrossing *event){ GtkRange *range; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); range = GTK_RANGE (widget); if (event->window == range->trough) { range->in_child = RANGE_CLASS (range)->trough; } else if (event->window == range->slider) { range->in_child = RANGE_CLASS (range)->slider; if ((range->click_child == 0) || (range->click_child == RANGE_CLASS (range)->trough)) gtk_range_draw_slider (range); } else if (event->window == range->step_forw) { range->in_child = RANGE_CLASS (range)->step_forw; if ((range->click_child == 0) || (range->click_child == RANGE_CLASS (range)->trough)) gtk_range_draw_step_forw (range); } else if (event->window == range->step_back) { range->in_child = RANGE_CLASS (range)->step_back; if ((range->click_child == 0) || (range->click_child == RANGE_CLASS (range)->trough)) gtk_range_draw_step_back (range); } return FALSE;}static gintgtk_range_leave_notify (GtkWidget *widget, GdkEventCrossing *event){ GtkRange *range; g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); range = GTK_RANGE (widget); range->in_child = 0; if (event->window == range->trough) { } else if (event->window == range->slider) { if ((range->click_child == 0) || (range->click_child == RANGE_CLASS (range)->trough)) gtk_range_draw_slider (range); } else if (event->window == range->step_forw) { if ((range->click_child == 0) || (range->click_child == RANGE_CLASS (range)->trough)) gtk_range_draw_step_forw (range); } else if (event->window == range->step_back) { if ((range->click_child == 0) || (range->click_child == RANGE_CLASS (range)->trough)) gtk_range_draw_step_back (range); } return FALSE;}static gintgtk_range_focus_in (GtkWidget *widget, GdkEventFocus *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); GTK_WIDGET_SET_FLAGS (widget, GTK_HAS_FOCUS); gtk_widget_draw_focus (widget); return FALSE;}static gintgtk_range_focus_out (GtkWidget *widget, GdkEventFocus *event){ g_return_val_if_fail (widget != NULL, FALSE); g_return_val_if_fail (GTK_IS_RANGE (widget), FALSE); g_return_val_if_fail (event != NULL, FALSE); GTK_WIDGET_UNSET_FLAGS (widget, GTK_HAS_FOCUS); gtk_widget_draw_focus (widget); return FALSE;}static voidgtk_real_range_draw_trough (GtkRange *range){ g_return_if_fail (range != NULL); g_return_if_fail (GTK_IS_RANGE (range)); if (range->trough) { gtk_paint_box (GTK_WIDGET (range)->style, range->trough, GTK_STATE_ACTIVE, GTK_SHADOW_IN, NULL, GTK_WIDGET(range), "trough", 0, 0, -1, -1); if (GTK_WIDGET_HAS_FOCUS (range)) gtk_paint_focus (GTK_WIDGET (range)->style, range->trough, NULL, GTK_WIDGET(range), "trough", 0, 0, -1, -1); }}static voidgtk_real_range_draw_slider (GtkRange *range){ GtkStateType state_type; g_return_if_fail (range != NULL); g_return_if_fail (GTK_IS_RANGE (range)); if (range->slider) { if ((range->in_child == RANGE_CLASS (range)->slider) || (range->click_child == RANGE_CLASS (range)->slider)) state_type = GTK_STATE_PRELIGHT; else state_type = GTK_STATE_NORMAL; gtk_paint_box (GTK_WIDGET (range)->style, range->slider, state_type, GTK_SHADOW_OUT, NULL, GTK_WIDGET (range), "slider", 0, 0, -1, -1); }}static gintgtk_real_range_timer (GtkRange *range){ gint return_val; GDK_THREADS_ENTER (); return_val = TRUE; if (range->click_child == RANGE_CLASS (range)->slider) { if (range->policy == GTK_UPDATE_DELAYED) gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed"); return_val = FALSE; } else { GdkModifierType mods, mask; if (!range->timer) { return_val = FALSE; if (range->need_timer) range->timer = gtk_timeout_add (SCROLL_TIMER_LENGTH, (GtkFunction) RANGE_CLASS (range)->timer, (gpointer) range); else { GDK_THREADS_LEAVE (); return FALSE; } range->need_timer = FALSE; } switch (range->button) { case 1: mask = GDK_BUTTON1_MASK; break; case 2: mask = GDK_BUTTON2_MASK; break; case 3: mask = GDK_BUTTON3_MASK; break; default: mask = 0; break; } gdk_window_get_pointer (range->slider, NULL, NULL, &mods); if (mods & mask) return_val = gtk_range_scroll (range, -1); } GDK_THREADS_LEAVE (); return return_val;}static gintgtk_range_scroll (GtkRange *range, gfloat jump_perc){ gfloat new_value; gint return_val; g_return_val_if_fail (range != NULL, FALSE); g_return_val_if_fail (GTK_IS_RANGE (range), FALSE); new_value = range->adjustment->value; return_val = TRUE; switch (range->scroll_type) { case GTK_SCROLL_NONE: break; case GTK_SCROLL_JUMP: if (jump_perc >= 0 && jump_perc <= 1) { new_value = (range->adjustment->lower + (range->adjustment->upper - range->adjustment->page_size - range->adjustment->lower) * jump_perc); } break; case GTK_SCROLL_STEP_BACKWARD: new_value -= range->adjustment->step_increment; if (new_value <= range->adjustment->lower) { new_value = range->adjustment->lower; return_val = FALSE; range->timer = 0; } break; case GTK_SCROLL_STEP_FORWARD: new_value += range->adjustment->step_increment; if (new_value >= (range->adjustment->upper - range->adjustment->page_size)) { new_value = range->adjustment->upper - range->adjustment->page_size; return_val = FALSE; range->timer = 0; } break; case GTK_SCROLL_PAGE_BACKWARD: new_value -= range->adjustment->page_increment; if (new_value <= range->adjustment->lower) { new_value = range->adjustment->lower; return_val = FALSE; range->timer = 0; } break; case GTK_SCROLL_PAGE_FORWARD: new_value += range->adjustment->page_increment; if (new_value >= (range->adjustment->upper - range->adjustment->page_size)) { new_value = range->adjustment->upper - range->adjustment->page_size; return_val = FALSE; range->timer = 0; } break; } if (new_value != range->adjustment->value) { range->adjustment->value = new_value; if ((range->policy == GTK_UPDATE_CONTINUOUS) || (!return_val && (range->policy == GTK_UPDATE_DELAYED))) { gtk_signal_emit_by_name (GTK_OBJECT (range->adjustment), "value_changed"); } else { gtk_range_slider_update (range); gtk_range_clear_background (range); } } return return_val;}static voidgtk_range_add_timer (GtkRange *range){ g_return_if_fail (range != NULL); g_return_if_fail (GTK_IS_RANGE (range)); if (!range->timer) { range->need_timer = TRUE; range->timer = gtk_timeout_add (SCROLL_INITIAL_DELAY, (GtkFunction) RANGE_CLASS (range)->timer, (gpointer) range); }}static voidgtk_range_remove_timer (GtkRange *range){ g_return_if_fail (range != NULL); g_return_if_fail (GTK_IS_RANGE (range)); if (range->timer) { gtk_timeout_remove (range->timer); range->timer = 0; } range->need_timer = FALSE;}static voidgtk_range_adjustment_changed (GtkAdjustment *adjustment, gpointer data){ GtkRange *range; g_return_if_fail (adjustment != NULL); g_return_if_fail (data != NULL); range = GTK_RANGE (data); if (((range->old_lower != adjustment->lower) || (range->old_upper != adjustment->upper) || (range->old_page_size != adjustment->page_size)) && (range->old_value == adjustment->value)) { if ((adjustment->lower == adjustment->upper) || (range->old_lower == (range->old_upper - range->old_page_size))) { adjustment->value = adjustment->lower; gtk_signal_emit_by_name (GTK_OBJECT (adjustment), "value_changed"); } } if ((range->old_value != adjustment->value) || (range->old_lower != adjustment->lower) || (range->old_upper != adjustment->upper) || (range->old_page_size != adjustment->page_size)) { gtk_range_slider_update (range); gtk_range_clear_background (range); range->old_value = adjustment->value; range->old_lower = adjustment->lower; range->old_upper = adjustment->upper; range->old_page_size = adjustment->page_size; }}static voidgtk_range_adjustment_value_changed (GtkAdjustment *adjustment, gpointer data){ GtkRange *range; g_return_if_fail (adjustment != NULL); g_return_if_fail (data != NULL); range = GTK_RANGE (data); if (range->old_value != adjustment->value) { gtk_range_slider_update (range); gtk_range_clear_background (range); range->old_value = adjustment->value; }}static voidgtk_range_trough_hdims (GtkRange *range, gint *left, gint *right){ gint trough_width; gint slider_length; gint tmp_width; gint tleft; gint tright; g_return_if_fail (range != NULL); gdk_window_get_size (range->trough, &trough_width, NULL); gdk_window_get_size (range->slider, &slider_length, NULL); tleft = GTK_WIDGET (range)->style->klass->xthickness; tright = trough_width - slider_length - GTK_WIDGET (range)->style->klass->xthickness; if (range->step_back) { gdk_window_get_size (range->step_back, &tmp_width, NULL); tleft += (tmp_width + RANGE_CLASS (range)->stepper_slider_spacing); } if (range->step_forw) { gdk_window_get_size (range->step_forw, &tmp_width, NULL); tright -= (tmp_width + RANGE_CLASS (range)->stepper_slider_spacing); } if (left) *left = tleft; if (right) *right = tright;}static voidgtk_range_trough_vdims (GtkRange *range, gint *top, gint *bottom){ gint trough_height; gint slider_length; gint tmp_height; gint ttop; gint tbottom; g_return_if_fail (range != NULL); gdk_window_get_size (range->trough, NULL, &trough_height); gdk_window_get_size (range->slider, NULL, &slider_length); ttop = GTK_WIDGET (range)->style->klass->ythickness; tbottom = trough_height - slider_length - GTK_WIDGET (range)->style->klass->ythickness; if (range->step_back) { gdk_window_get_size (range->step_back, NULL, &tmp_height); ttop += (tmp_height + RANGE_CLASS (range)->stepper_slider_spacing); } if (range->step_forw) { gdk_window_get_size (range->step_forw, NULL, &tmp_height); tbottom -= (tmp_height + RANGE_CLASS (range)->stepper_slider_spacing); } if (top) *top = ttop; if (bottom) *bottom = tbottom;}static voidgtk_range_style_set (GtkWidget *widget, GtkStyle *previous_style){ GtkRange *range; g_return_if_fail (widget != NULL); g_return_if_fail (GTK_IS_RANGE (widget)); range = GTK_RANGE (widget); if (GTK_WIDGET_REALIZED (widget)) { if (range->trough) gtk_style_set_background (widget->style, range->trough, GTK_STATE_ACTIVE); if (range->slider) gtk_style_set_background (widget->style, range->slider, GTK_STATE_NORMAL); /* The backgrounds of the step_forw and step_back never actually * get drawn in draw calls, so we call gdk_window_clear() here * so they get the correct colors. This is a hack. OWT. */ if (range->step_forw) { gtk_style_set_background (widget->style, range->step_forw, GTK_STATE_ACTIVE); gdk_window_clear (range->step_forw); } if (range->step_back) { gtk_style_set_background (widget->style, range->step_back, GTK_STATE_ACTIVE); gdk_window_clear (range->step_back); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -