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