libxputty 0.1
Loading...
Searching...
No Matches
Functions
xslider_private.c File Reference

Go to the source code of this file.

Functions

void _pattern_vslider (Widget_t *w, Color_state st, int width)
 _pattern_vslider - set pattern for the slider base
 
void _pattern_hslider (Widget_t *w, Color_state st, int height)
 _pattern_hslider - set pattern for the slider base
 
void _draw_image_slider (Widget_t *w, int width_t, int height_t)
 _draw_image_slider - draw slider from a horizontal sprite image
 
void _draw_vslider (void *w_, void *user_data)
 _draw_vslider - internal draw the slider to the buffer
 
void _draw_hslider (void *w_, void *user_data)
 _draw_hslider - internal draw the slider to the buffer
 
void _slider_released (void *w_, void *button_, void *user_data)
 _slider_released - redraw the slider when button released
 

Function Documentation

◆ _draw_hslider()

void _draw_hslider ( void *  w_,
void *  user_data 
)

_draw_hslider - internal draw the slider to the buffer

Parameters
*w_- void pointer to the Widget_t button
*user_data- void pointer to attached user_data

Definition at line 143 of file xslider_private.c.

143 {
144 Widget_t *w = (Widget_t*)w_;
145 Metrics_t metrics;
146 os_get_window_metrics(w, &metrics);
147 int width = metrics.width-2;
148 int height = metrics.height-2;
149 if (!metrics.visible) return;
150 float center = (float)height/2;
151 float upcenter = (float)height;
152
153 if (w->image) {
154 _draw_image_slider(w, width, height);
155 } else {
156 float sliderstate = adj_get_state(w->adj_x);
157 _pattern_hslider(w, get_color_state(w), height);
158 cairo_move_to (w->crb, center, center);
159 cairo_line_to(w->crb,width-center-10,center);
160 cairo_set_line_cap (w->crb,CAIRO_LINE_CAP_ROUND);
161 cairo_set_line_width(w->crb,center);
162 cairo_stroke(w->crb);
163
165 cairo_move_to (w->crb, center, center);
166 cairo_line_to(w->crb,width-center-10,center);
167 cairo_set_line_width(w->crb,center/10);
168 cairo_stroke(w->crb);
169
171 cairo_arc(w->crb, (center) +
172 ((width-10-upcenter) * sliderstate),center, center/2, 0, 2 * M_PI );
173 cairo_fill_preserve(w->crb);
174 cairo_set_line_width(w->crb,1);
175 cairo_stroke(w->crb);
176
178 cairo_arc(w->crb, (center) +
179 ((width-10-upcenter) * sliderstate),center, center/3, 0, 2 * M_PI );
180 cairo_fill_preserve(w->crb);
182 cairo_set_line_width(w->crb,center/15);
183 cairo_stroke(w->crb);
184 cairo_new_path (w->crb);
185 }
186 cairo_text_extents_t extents;
188 cairo_set_font_size (w->crb, w->app->normal_font/w->scale.ascale);
189 cairo_text_extents(w->crb,w->label , &extents);
190
191 cairo_move_to (w->crb, width/2-extents.width/2, height );
192 cairo_show_text(w->crb, w->label);
193 cairo_new_path (w->crb);
194
195 cairo_set_font_size (w->crb, w->app->small_font/w->scale.ascale);
196 char s[64];
197 const char* format[] = {"%.1f", "%.2f", "%.3f"};
198 float value = adj_get_value(w->adj);
199 if (fabs(w->adj->step)>0.99) {
200 snprintf(s, 63,"%d", (int) value);
201 } else if (fabs(w->adj->step)>0.09) {
202 snprintf(s, 63, format[1-1], value);
203 } else {
204 snprintf(s, 63, format[2-1], value);
205 }
206 cairo_text_extents(w->crb,s , &extents);
207 cairo_move_to (w->crb, width/2-extents.width/2, extents.height );
208 cairo_show_text(w->crb, s);
209 cairo_new_path (w->crb);
210}
Metrics_t - struct to receive window size, position & visibility Pass this struct to os_get_window_...
float ascale
Definition xwidget.h:369
Widget_t - struct to hold the basic Widget_t info.
Definition xwidget.h:457
Resize_t scale
Definition xwidget.h:525
Adjustment_t * adj_x
Definition xwidget.h:493
cairo_surface_t * image
Definition xwidget.h:491
Adjustment_t * adj
Definition xwidget.h:497
cairo_t * crb
Definition xwidget.h:489
const char * label
Definition xwidget.h:463
Xputty * app
Definition xwidget.h:465
int normal_font
Definition xputty.h:248
int small_font
Definition xputty.h:246
float adj_get_value(Adjustment_t *adj)
adj_get_value - get the current value of the Adjustment_t
float adj_get_state(Adjustment_t *adj)
adj_get_state - get the current state of the Adjustment_t
Color_state get_color_state(Widget_t *wid)
get_color_state - get the Color_state to use in relation to the Widget_t state
Definition xcolor.c:222
void use_text_color_scheme(Widget_t *w, Color_state st)
use_text_color_scheme - use text Colors to paint on Widget_t
Definition xcolor.c:266
void use_bg_color_scheme(Widget_t *w, Color_state st)
use_bg_color_scheme - use background Colors to paint on Widget_t
Definition xcolor.c:252
void use_fg_color_scheme(Widget_t *w, Color_state st)
use_fg_color_scheme - use forground Colors to paint on Widget_t
Definition xcolor.c:245
void use_shadow_color_scheme(Widget_t *w, Color_state st)
use_shadow_color_scheme - use shadow Colors to paint on Widget_t
Definition xcolor.c:273
@ NORMAL_
Definition xcolor.h:44
void _pattern_hslider(Widget_t *w, Color_state st, int height)
_pattern_hslider - set pattern for the slider base
void _draw_image_slider(Widget_t *w, int width_t, int height_t)
_draw_image_slider - draw slider from a horizontal sprite image
void os_get_window_metrics(Widget_t *w, Metrics_t *metrics)
os_get_window_metrics - Get the Merics_t struct related to a Widget_t

References _draw_image_slider(), _pattern_hslider(), Widget_t::adj, adj_get_state(), adj_get_value(), Widget_t::adj_x, Widget_t::app, Resize_t::ascale, Widget_t::crb, get_color_state(), Metrics_t::height, Widget_t::image, Widget_t::label, NORMAL_, Xputty::normal_font, os_get_window_metrics(), Widget_t::scale, Xputty::small_font, Adjustment_t::step, use_bg_color_scheme(), use_fg_color_scheme(), use_shadow_color_scheme(), use_text_color_scheme(), Metrics_t::visible, and Metrics_t::width.

Referenced by add_hslider().

◆ _draw_image_slider()

void _draw_image_slider ( Widget_t w,
int  width_t,
int  height_t 
)

_draw_image_slider - draw slider from a horizontal sprite image

Parameters
*w- pointer to the Widget_t button
width_t- the width of the base
height_t- the height of the base

Definition at line 47 of file xslider_private.c.

47 {
48 Slider_t *slider = (Slider_t*)w->private_struct;
49 int width, height;
50 os_get_surface_size(w->image, &width, &height);
51 int size = width/slider->frames;
52 double x = (double)width_t/(double)size;
53 double y = (double)height_t/(double)height;
54 double x1 = (double)size/(double)width_t;
55 double y1 = (double)height/(double)height_t;
56 double s = x>y ? y : x;
57 double s1 = x1>y1 ? y1 : x1;
58 int posx = (width_t/2 -(size*s)/2);
59 int posy = (height_t/2 - ((height*s)/2));
60 double sliderstate = adj_get_state(w->adj);
61 int findex = (int)(((slider->frames)-1) * sliderstate);
62 cairo_save(w->crb);
63 cairo_scale(w->crb, s,s);
64 cairo_translate(w->crb, posx * ((1-s)/s), posy * ((1-s)/s));
65 cairo_set_source_surface (w->crb, w->image, -size*findex + posx, posy);
66 cairo_rectangle(w->crb, posx, posy, size, height);
67 cairo_fill(w->crb);
68 cairo_scale(w->crb, s1,s1);
69 cairo_restore(w->crb);
70}
void * private_struct
Definition xwidget.h:475
void os_get_surface_size(cairo_surface_t *surface, int *width, int *height)
os_get_surface_size - get the size of the cairo surface

References Widget_t::adj, adj_get_state(), Widget_t::crb, Slider_t::frames, Widget_t::image, os_get_surface_size(), and Widget_t::private_struct.

Referenced by _draw_hslider(), and _draw_vslider().

◆ _draw_vslider()

void _draw_vslider ( void *  w_,
void *  user_data 
)

_draw_vslider - internal draw the slider to the buffer

Parameters
*w_- void pointer to the Widget_t button
*user_data- void pointer to attached user_data

Definition at line 72 of file xslider_private.c.

72 {
73 Widget_t *w = (Widget_t*)w_;
74 Metrics_t metrics;
75 os_get_window_metrics(w, &metrics);
76 int width = metrics.width-2;
77 int height = metrics.height-2;
78 if (!metrics.visible) return;
79 float center = (float)width/2;
80 float upcenter = (float)width;
81
82 if (w->image) {
83 _draw_image_slider(w, width, height-10);
84 } else {
85 float sliderstate = adj_get_state(w->adj_y);
87 cairo_move_to (w->crb, center, center);
88 cairo_line_to(w->crb,center,height-center-10);
89 cairo_set_line_cap (w->crb,CAIRO_LINE_CAP_ROUND);
90 cairo_set_line_width(w->crb,center);
91 cairo_stroke(w->crb);
92
94 cairo_move_to (w->crb, center, center);
95 cairo_line_to(w->crb,center,height-center-10);
96 cairo_set_line_width(w->crb,center/10);
97 cairo_stroke(w->crb);
98
100 cairo_arc(w->crb,center, (height-center-10) -
101 ((height-10-upcenter) * sliderstate), center/2, 0, 2 * M_PI );
102 cairo_fill_preserve(w->crb);
103 cairo_set_line_width(w->crb,1);
104 cairo_stroke(w->crb);
105
106
108 cairo_arc(w->crb,center, (height-center-10) -
109 ((height-10-upcenter) * sliderstate), center/3, 0, 2 * M_PI );
110 cairo_fill_preserve(w->crb);
112 cairo_set_line_width(w->crb,center/15);
113 cairo_stroke(w->crb);
114 cairo_new_path (w->crb);
115 }
116
117 cairo_text_extents_t extents;
119 cairo_set_font_size (w->crb, min(w->app->normal_font/w->scale.ascale, center/1.8));
120 cairo_text_extents(w->crb,w->label , &extents);
121
122 cairo_move_to (w->crb, center-extents.width/2, height);
123 cairo_show_text(w->crb, w->label);
124 cairo_new_path (w->crb);
125
126 char s[64];
127 const char* format[] = {"%.1f", "%.2f", "%.3f"};
128 float value = adj_get_value(w->adj);
129 if (fabs(w->adj->step)>0.99) {
130 snprintf(s, 63,"%d", (int) value);
131 } else if (fabs(w->adj->step)>0.09) {
132 snprintf(s, 63, format[1-1], value);
133 } else {
134 snprintf(s, 63, format[2-1], value);
135 }
136 cairo_set_font_size (w->crb, min(w->app->small_font/w->scale.ascale, center/1.8));
137 cairo_text_extents(w->crb,s , &extents);
138 cairo_move_to (w->crb, center-extents.width/2, extents.height );
139 cairo_show_text(w->crb, s);
140 cairo_new_path (w->crb);
141}
Adjustment_t * adj_y
Definition xwidget.h:495
void _pattern_vslider(Widget_t *w, Color_state st, int width)
_pattern_vslider - set pattern for the slider base

References _draw_image_slider(), _pattern_vslider(), Widget_t::adj, adj_get_state(), adj_get_value(), Widget_t::adj_y, Widget_t::app, Resize_t::ascale, Widget_t::crb, get_color_state(), Metrics_t::height, Widget_t::image, Widget_t::label, NORMAL_, Xputty::normal_font, os_get_window_metrics(), Widget_t::scale, Xputty::small_font, Adjustment_t::step, use_bg_color_scheme(), use_fg_color_scheme(), use_shadow_color_scheme(), use_text_color_scheme(), Metrics_t::visible, and Metrics_t::width.

Referenced by add_vslider().

◆ _pattern_hslider()

void _pattern_hslider ( Widget_t w,
Color_state  st,
int  width 
)

_pattern_hslider - set pattern for the slider base

Parameters
*w- void pointer to the Widget_t button
st- the Widget_t Color_t mode to use
width- the width of the base

Definition at line 36 of file xslider_private.c.

36 {
37 Colors *c = get_color_scheme(w,st);
38 if (!c) return;
39 cairo_pattern_t *pat = cairo_pattern_create_linear (2, 2, 2, height);
40 cairo_pattern_add_color_stop_rgba(pat, 0.0, c->base[0], c->base[1], c->base[2], c->base[3]);
41 cairo_pattern_add_color_stop_rgba(pat, 0.5, 0.0, 0.0, 0.0, 0.0);
42 cairo_pattern_add_color_stop_rgba(pat, 1.0, c->base[0], c->base[1], c->base[2], c->base[3]);
43 cairo_set_source(w->crb, pat);
44 cairo_pattern_destroy (pat);
45}
Color_t - struct used to set cairo color for Widget_t.
Definition xcolor.h:85
double base[4]
Definition xcolor.h:88
Colors * get_color_scheme(Widget_t *wid, Color_state st)
get_color_scheme - get pointer to the Colors struct to use in relation to the Color_state
Definition xcolor.c:197

References Colors::base, Widget_t::crb, and get_color_scheme().

Referenced by _draw_hslider().

◆ _pattern_vslider()

void _pattern_vslider ( Widget_t w,
Color_state  st,
int  width 
)

_pattern_vslider - set pattern for the slider base

Parameters
*w- void pointer to the Widget_t button
st- the Widget_t Color_t mode to use
width- the width of the base

Definition at line 25 of file xslider_private.c.

25 {
26 Colors *c = get_color_scheme(w,st);
27 if (!c) return;
28 cairo_pattern_t *pat = cairo_pattern_create_linear (2, 2, width, 2);
29 cairo_pattern_add_color_stop_rgba(pat, 0.0, c->base[0], c->base[1], c->base[2], c->base[3]);
30 cairo_pattern_add_color_stop_rgba(pat, 0.5, 0.0, 0.0, 0.0, 0.0);
31 cairo_pattern_add_color_stop_rgba(pat, 1.0, c->base[0], c->base[1], c->base[2], c->base[3]);
32 cairo_set_source(w->crb, pat);
33 cairo_pattern_destroy (pat);
34}

References Colors::base, Widget_t::crb, and get_color_scheme().

Referenced by _draw_vslider().

◆ _slider_released()

void _slider_released ( void *  w_,
void *  button_,
void *  user_data 
)

_slider_released - redraw the slider when button released

Parameters
*w_- void pointer to the Widget_t button
*button_- the XbuttonEvent
*user_data- void pointer to attached user_data

Definition at line 212 of file xslider_private.c.

212 {
213 Widget_t *w = (Widget_t*)w_;
214 expose_widget(w);
215}
void expose_widget(Widget_t *w)
expose_widgets - send a expose event (EXPOSE) to a Widget_t
Definition xwidget.c:445

References expose_widget().

Referenced by add_hslider(), and add_vslider().