⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkvscrollbar.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
    attributes.x = widget->style->klass->ythickness;  attributes.y = 0;  attributes.width = RANGE_CLASS (widget)->slider_width;  attributes.height = RANGE_CLASS (widget)->min_slider_size;  attributes.event_mask |= (GDK_BUTTON_MOTION_MASK |                            GDK_POINTER_MOTION_HINT_MASK);    range->slider = gdk_window_new (range->trough, &attributes, attributes_mask);    gtk_vscrollbar_calc_slider_size (GTK_VSCROLLBAR (widget));  gtk_range_slider_update (GTK_RANGE (widget));    widget->style = gtk_style_attach (widget->style, widget->window);    gdk_window_set_user_data (range->trough, widget);  gdk_window_set_user_data (range->slider, widget);  gdk_window_set_user_data (range->step_forw, widget);  gdk_window_set_user_data (range->step_back, widget);    gtk_style_set_background (widget->style, range->trough, GTK_STATE_ACTIVE);  gtk_style_set_background (widget->style, range->slider, GTK_STATE_NORMAL);  gtk_style_set_background (widget->style, range->step_forw, GTK_STATE_ACTIVE);  gtk_style_set_background (widget->style, range->step_back, GTK_STATE_ACTIVE);    gdk_window_show (range->slider);  gdk_window_show (range->step_forw);  gdk_window_show (range->step_back);}static voidgtk_vscrollbar_size_allocate (GtkWidget     *widget,                              GtkAllocation *allocation){  GtkRange *range;    g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_VSCROLLBAR (widget));  g_return_if_fail (allocation != NULL);    widget->allocation = *allocation;  if (GTK_WIDGET_REALIZED (widget))    {      range = GTK_RANGE (widget);            gdk_window_move_resize (range->trough,                              allocation->x + (allocation->width - widget->requisition.width) / 2,                              allocation->y,                              widget->requisition.width, allocation->height);      gdk_window_move_resize (range->step_back,                              widget->style->klass->xthickness,                              widget->style->klass->ythickness,                              widget->requisition.width - widget->style->klass->xthickness * 2,                              RANGE_CLASS (widget)->stepper_size);      gdk_window_move_resize (range->step_forw,                              widget->style->klass->xthickness,                              allocation->height - widget->style->klass->ythickness -                              RANGE_CLASS (widget)->stepper_size,                              widget->requisition.width - widget->style->klass->xthickness * 2,                              RANGE_CLASS (widget)->stepper_size);      gdk_window_resize (range->slider,                         widget->requisition.width - widget->style->klass->xthickness * 2,                         RANGE_CLASS (range)->min_slider_size);            gtk_range_slider_update (GTK_RANGE (widget));    }}static voidgtk_vscrollbar_draw_step_forw (GtkRange *range){  GtkStateType state_type;  GtkShadowType shadow_type;    g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_VSCROLLBAR (range));    if (GTK_WIDGET_DRAWABLE (range))    {      if (range->in_child == RANGE_CLASS (range)->step_forw)        {          if (range->click_child == RANGE_CLASS (range)->step_forw)            state_type = GTK_STATE_ACTIVE;          else            state_type = GTK_STATE_PRELIGHT;        }      else        state_type = GTK_STATE_NORMAL;            if (range->click_child == RANGE_CLASS (range)->step_forw)        shadow_type = GTK_SHADOW_IN;      else        shadow_type = GTK_SHADOW_OUT;            gtk_paint_arrow (GTK_WIDGET (range)->style, range->step_forw,                       state_type, shadow_type,                        NULL, GTK_WIDGET (range), "vscrollbar",                       GTK_ARROW_DOWN,                       TRUE, 0, 0, -1, -1);    }}static voidgtk_vscrollbar_draw_step_back (GtkRange *range){  GtkStateType state_type;  GtkShadowType shadow_type;    g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_VSCROLLBAR (range));    if (GTK_WIDGET_DRAWABLE (range))    {      if (range->in_child == RANGE_CLASS (range)->step_back)        {          if (range->click_child == RANGE_CLASS (range)->step_back)            state_type = GTK_STATE_ACTIVE;          else            state_type = GTK_STATE_PRELIGHT;        }      else        state_type = GTK_STATE_NORMAL;            if (range->click_child == RANGE_CLASS (range)->step_back)        shadow_type = GTK_SHADOW_IN;      else        shadow_type = GTK_SHADOW_OUT;            gtk_paint_arrow (GTK_WIDGET (range)->style, range->step_back,                       state_type, shadow_type,                        NULL, GTK_WIDGET (range), "vscrollbar",                       GTK_ARROW_UP,                       TRUE, 0, 0, -1, -1);    }}static voidgtk_vscrollbar_slider_update (GtkRange *range){  g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_VSCROLLBAR (range));    gtk_vscrollbar_calc_slider_size (GTK_VSCROLLBAR (range));  gtk_range_default_vslider_update (range);}static voidgtk_vscrollbar_calc_slider_size (GtkVScrollbar *vscrollbar){  GtkRange *range;  gint step_back_y;  gint step_back_height;  gint step_forw_y;  gint slider_width;  gint slider_height;  gint top, bottom;  gint height;    g_return_if_fail (vscrollbar != NULL);  g_return_if_fail (GTK_IS_VSCROLLBAR (vscrollbar));    if (GTK_WIDGET_REALIZED (vscrollbar))    {      range = GTK_RANGE (vscrollbar);            gdk_window_get_size (range->step_back, NULL, &step_back_height);      gdk_window_get_position (range->step_back, NULL, &step_back_y);      gdk_window_get_position (range->step_forw, NULL, &step_forw_y);            top = (step_back_y +             step_back_height +             RANGE_CLASS (vscrollbar)->stepper_slider_spacing);      bottom = step_forw_y - RANGE_CLASS (vscrollbar)->stepper_slider_spacing;      height = bottom - top;            if ((range->adjustment->page_size > 0) &&          (range->adjustment->lower != range->adjustment->upper))        {          if (range->adjustment->page_size >              (range->adjustment->upper - range->adjustment->lower))            range->adjustment->page_size = range->adjustment->upper - range->adjustment->lower;                    height = (height * range->adjustment->page_size /                    (range->adjustment->upper - range->adjustment->lower));                    if (height < RANGE_CLASS (vscrollbar)->min_slider_size)            height = RANGE_CLASS (vscrollbar)->min_slider_size;        }            gdk_window_get_size (range->slider, &slider_width, &slider_height);            if (slider_height != height)        gdk_window_resize (range->slider, slider_width, height);    }}static gintgtk_vscrollbar_trough_keys(GtkRange *range,                           GdkEventKey *key,                           GtkScrollType *scroll,                           GtkTroughType *pos){  gint return_val = FALSE;  switch (key->keyval)    {    case GDK_Up:      return_val = TRUE;      *scroll = GTK_SCROLL_STEP_BACKWARD;      break;    case GDK_Down:      return_val = TRUE;      *scroll = GTK_SCROLL_STEP_FORWARD;      break;    case GDK_Page_Up:      return_val = TRUE;      if (key->state & GDK_CONTROL_MASK)        *pos = GTK_TROUGH_START;      else        *scroll = GTK_SCROLL_PAGE_BACKWARD;      break;    case GDK_Page_Down:      return_val = TRUE;      if (key->state & GDK_CONTROL_MASK)        *pos = GTK_TROUGH_END;      else        *scroll = GTK_SCROLL_PAGE_FORWARD;      break;    }  return return_val;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -