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

📄 gtkhscrollbar.c

📁 gtk是linux一款强大的夸平台的图形化开发工具
💻 C
📖 第 1 页 / 共 2 页
字号:
    attributes.x = 0;  attributes.y = widget->style->klass->ythickness;  attributes.width = RANGE_CLASS (widget)->min_slider_size;  attributes.height = RANGE_CLASS (widget)->slider_width;  attributes.event_mask |= (GDK_BUTTON_MOTION_MASK |                            GDK_POINTER_MOTION_HINT_MASK);    range->slider = gdk_window_new (range->trough, &attributes, attributes_mask);    gtk_hscrollbar_calc_slider_size (GTK_HSCROLLBAR (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_hscrollbar_size_allocate (GtkWidget     *widget,                              GtkAllocation *allocation){  GtkRange *range;    g_return_if_fail (widget != NULL);  g_return_if_fail (GTK_IS_HSCROLLBAR (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->y + (allocation->height - widget->requisition.height) / 2,                              allocation->width, widget->requisition.height);      gdk_window_move_resize (range->step_back,                              widget->style->klass->xthickness,                              widget->style->klass->ythickness,                              RANGE_CLASS (widget)->stepper_size,                              widget->requisition.height - widget->style->klass->ythickness * 2);      gdk_window_move_resize (range->step_forw,                              allocation->width - widget->style->klass->xthickness -                              RANGE_CLASS (widget)->stepper_size,                              widget->style->klass->ythickness,                              RANGE_CLASS (widget)->stepper_size,                              widget->requisition.height - widget->style->klass->ythickness * 2);      gdk_window_resize (range->slider,                         RANGE_CLASS (widget)->min_slider_size,                         widget->requisition.height - widget->style->klass->ythickness * 2);            gtk_range_slider_update (GTK_RANGE (widget));    }}static voidgtk_hscrollbar_draw_step_forw (GtkRange *range){  GtkStateType state_type;  GtkShadowType shadow_type;    g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_HSCROLLBAR (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), "hscrollbar",                       GTK_ARROW_RIGHT,                       TRUE, 0, 0, -1, -1);    }}static voidgtk_hscrollbar_draw_step_back (GtkRange *range){  GtkStateType state_type;  GtkShadowType shadow_type;    g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_HSCROLLBAR (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), "hscrollbar",                       GTK_ARROW_LEFT,                       TRUE, 0, 0, -1, -1);    }}static voidgtk_hscrollbar_slider_update (GtkRange *range){  g_return_if_fail (range != NULL);  g_return_if_fail (GTK_IS_HSCROLLBAR (range));    gtk_hscrollbar_calc_slider_size (GTK_HSCROLLBAR (range));  gtk_range_default_hslider_update (range);}static voidgtk_hscrollbar_calc_slider_size (GtkHScrollbar *hscrollbar){  GtkRange *range;  gint step_back_x;  gint step_back_width;  gint step_forw_x;  gint slider_width;  gint slider_height;  gint left, right;  gint width;    g_return_if_fail (hscrollbar != NULL);  g_return_if_fail (GTK_IS_HSCROLLBAR (hscrollbar));    if (GTK_WIDGET_REALIZED (hscrollbar))    {      range = GTK_RANGE (hscrollbar);            gdk_window_get_size (range->step_back, &step_back_width, NULL);      gdk_window_get_position (range->step_back, &step_back_x, NULL);      gdk_window_get_position (range->step_forw, &step_forw_x, NULL);            left = (step_back_x +              step_back_width +              RANGE_CLASS (hscrollbar)->stepper_slider_spacing);      right = step_forw_x - RANGE_CLASS (hscrollbar)->stepper_slider_spacing;      width = right - left;            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;                    width = (width * range->adjustment->page_size /                   (range->adjustment->upper - range->adjustment->lower));                    if (width < RANGE_CLASS (hscrollbar)->min_slider_size)            width = RANGE_CLASS (hscrollbar)->min_slider_size;        }            gdk_window_get_size (range->slider, &slider_width, &slider_height);            if (slider_width != width)        gdk_window_resize (range->slider, width, slider_height);    }}static gintgtk_hscrollbar_trough_keys(GtkRange *range,                           GdkEventKey *key,                           GtkScrollType *scroll,                           GtkTroughType *pos){  gint return_val = FALSE;  switch (key->keyval)    {    case GDK_Left:      return_val = TRUE;      *scroll = GTK_SCROLL_STEP_BACKWARD;      break;    case GDK_Right:      return_val = TRUE;      *scroll = GTK_SCROLL_STEP_FORWARD;      break;    case GDK_Home:      return_val = TRUE;      if (key->state & GDK_CONTROL_MASK)        *scroll = GTK_SCROLL_PAGE_BACKWARD;      else        *pos = GTK_TROUGH_START;      break;    case GDK_End:      return_val = TRUE;      if (key->state & GDK_CONTROL_MASK)        *scroll = GTK_SCROLL_PAGE_FORWARD;      else        *pos = GTK_TROUGH_END;      break;    }  return return_val;}

⌨️ 快捷键说明

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