Mercurial > audlegacy
comparison src/audacious/ui_skinned_playlist_slider.c @ 3146:670c41ca0147 trunk
few alternations to scrolling
author | Tomasz Mon <desowin@gmail.com> |
---|---|
date | Mon, 23 Jul 2007 10:38:18 +0200 |
parents | 19908efce4e5 |
children | 2127f7108033 |
comparison
equal
deleted
inserted
replaced
3137:19908efce4e5 | 3146:670c41ca0147 |
---|---|
43 SkinPixmapId skin_index; | 43 SkinPixmapId skin_index; |
44 gint width, height; | 44 gint width, height; |
45 | 45 |
46 gint resize_height; | 46 gint resize_height; |
47 gint move_x; | 47 gint move_x; |
48 gint prev_y; | |
49 gint drag_y; | |
48 }; | 50 }; |
49 | 51 |
50 static void ui_skinned_playlist_slider_class_init (UiSkinnedPlaylistSliderClass *klass); | 52 static void ui_skinned_playlist_slider_class_init (UiSkinnedPlaylistSliderClass *klass); |
51 static void ui_skinned_playlist_slider_init (UiSkinnedPlaylistSlider *playlist_slider); | 53 static void ui_skinned_playlist_slider_init (UiSkinnedPlaylistSlider *playlist_slider); |
52 static void ui_skinned_playlist_slider_destroy (GtkObject *object); | 54 static void ui_skinned_playlist_slider_destroy (GtkObject *object); |
116 static void ui_skinned_playlist_slider_init(UiSkinnedPlaylistSlider *playlist_slider) { | 118 static void ui_skinned_playlist_slider_init(UiSkinnedPlaylistSlider *playlist_slider) { |
117 UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(playlist_slider); | 119 UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(playlist_slider); |
118 playlist_slider->pressed = FALSE; | 120 playlist_slider->pressed = FALSE; |
119 priv->resize_height = 0; | 121 priv->resize_height = 0; |
120 priv->move_x = 0; | 122 priv->move_x = 0; |
123 priv->drag_y = 0; | |
124 priv->prev_y = 0; | |
121 } | 125 } |
122 | 126 |
123 GtkWidget* ui_skinned_playlist_slider_new(GtkWidget *fixed, gint x, gint y, gint h) { | 127 GtkWidget* ui_skinned_playlist_slider_new(GtkWidget *fixed, gint x, gint y, gint h) { |
124 | 128 |
125 UiSkinnedPlaylistSlider *hs = g_object_new (ui_skinned_playlist_slider_get_type (), NULL); | 129 UiSkinnedPlaylistSlider *hs = g_object_new (ui_skinned_playlist_slider_get_type (), NULL); |
234 y = 0; | 238 y = 0; |
235 | 239 |
236 if (y < 0) y=0; | 240 if (y < 0) y=0; |
237 if (y > priv->height - 19) y = priv->height - 19; | 241 if (y > priv->height - 19) y = priv->height - 19; |
238 | 242 |
243 priv->prev_y = y; | |
244 | |
239 /* FIXME: uses bmp_active_skin->pixmaps directly and may need calibration */ | 245 /* FIXME: uses bmp_active_skin->pixmaps directly and may need calibration */ |
240 /* drawing background */ | 246 /* drawing background */ |
241 gint c; | 247 gint c; |
242 for (c = 0; c <= priv->height / 29; c++) { | 248 for (c = 0; c <= priv->height / 29; c++) { |
243 gdk_draw_drawable(obj, gc, bmp_active_skin->pixmaps[SKIN_PLEDIT].pixmap, | 249 gdk_draw_drawable(obj, gc, bmp_active_skin->pixmaps[SKIN_PLEDIT].pixmap, |
267 gtk_widget_queue_draw(widget); | 273 gtk_widget_queue_draw(widget); |
268 } | 274 } |
269 | 275 |
270 static gboolean ui_skinned_playlist_slider_button_press(GtkWidget *widget, GdkEventButton *event) { | 276 static gboolean ui_skinned_playlist_slider_button_press(GtkWidget *widget, GdkEventButton *event) { |
271 UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER (widget); | 277 UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER (widget); |
272 | 278 UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget); |
279 | |
280 if (event->button != 1 && event->button != 2) | |
281 return TRUE; | |
282 | |
283 gint y = event->y; | |
273 if (event->type == GDK_BUTTON_PRESS) { | 284 if (event->type == GDK_BUTTON_PRESS) { |
274 if (event->button == 1) { | 285 ps->pressed = TRUE; |
275 ps->pressed = TRUE; | 286 if ((y >= priv->prev_y && y < priv->prev_y + 18)) { |
276 gint y = event->y; | 287 priv->drag_y = y - priv->prev_y; |
288 } else if (event->button == 2) { | |
277 ui_skinned_playlist_slider_set_position(widget, y); | 289 ui_skinned_playlist_slider_set_position(widget, y); |
290 priv->drag_y = 0; | |
291 } else { | |
292 gint n = playlistwin_list_get_visible_count() / 2; | |
293 if (y < priv->prev_y) | |
294 n *= -1; | |
295 playlistwin_scroll(n); | |
278 } | 296 } |
297 gtk_widget_queue_draw(widget); | |
279 } | 298 } |
280 | 299 |
281 return TRUE; | 300 return TRUE; |
282 } | 301 } |
283 | 302 |
284 static gboolean ui_skinned_playlist_slider_button_release(GtkWidget *widget, GdkEventButton *event) { | 303 static gboolean ui_skinned_playlist_slider_button_release(GtkWidget *widget, GdkEventButton *event) { |
285 UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER(widget); | 304 UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER(widget); |
286 | 305 |
287 if (event->button == 1) { | 306 if (event->button == 1 || event->button == 2) { |
288 ps->pressed = FALSE; | 307 ps->pressed = FALSE; |
289 gtk_widget_queue_draw(widget); | 308 gtk_widget_queue_draw(widget); |
290 } | 309 } |
291 return TRUE; | 310 return TRUE; |
292 } | 311 } |
293 | 312 |
294 static gboolean ui_skinned_playlist_slider_motion_notify(GtkWidget *widget, GdkEventMotion *event) { | 313 static gboolean ui_skinned_playlist_slider_motion_notify(GtkWidget *widget, GdkEventMotion *event) { |
295 UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER(widget); | 314 UiSkinnedPlaylistSlider *ps = UI_SKINNED_PLAYLIST_SLIDER(widget); |
315 UiSkinnedPlaylistSliderPrivate *priv = UI_SKINNED_PLAYLIST_SLIDER_GET_PRIVATE(widget); | |
296 | 316 |
297 if (ps->pressed) { | 317 if (ps->pressed) { |
298 gint y = event->y; | 318 gint y = event->y - priv->drag_y; |
299 ui_skinned_playlist_slider_set_position(widget, y); | 319 ui_skinned_playlist_slider_set_position(widget, y); |
300 } | 320 } |
301 return TRUE; | 321 return TRUE; |
302 } | 322 } |
303 | 323 |