X-Git-Url: https://develop.uap-core.de/gitweb/uwplayer.git/blobdiff_plain/5b86e784ed60d047c8d34dec15b35f62cfb1f8f8..3c1675731caaac73d6c362075ffb82bc45d2f060:/application/Sidebar.c diff --git a/application/Sidebar.c b/application/Sidebar.c index d6b3ff4..4faff71 100644 --- a/application/Sidebar.c +++ b/application/Sidebar.c @@ -43,9 +43,10 @@ static void sidebar_expose(Widget widget, XEvent *event, Region region); static Boolean sidebar_set_values(Widget old, Widget request, Widget neww, ArgList args, Cardinal *num_args); static void sidebar_insert_child(Widget child); Boolean sidebar_acceptfocus(Widget widget, Time *time); -static void FocusInAP(Widget w, XEvent *event, String *args, Cardinal *nArgs); -static void xdndEnterAP(Widget w, XEvent *event, String *args, Cardinal *nArgs); +static void FocusInAP(Widget w, XEvent *event, String *args, Cardinal *nArgs); +static void SelectElmAP(Widget w, XEvent *event, String *args, Cardinal *nArgs); +static void PopupAP(Widget w, XEvent *event, String *args, Cardinal *nArgs); static void sidebar_xdnd_callback(Widget w, XtPointer udata, XtPointer cdata); @@ -56,12 +57,13 @@ static XtResource resources[] = { static XtActionsRec actionslist[] = { {"focusIn", FocusInAP}, - {"xdnd_enter", xdndEnterAP}, - {"NULL", NULL} + {"selectElm", SelectElmAP}, + {"popup", PopupAP} }; -static char defaultTranslations[] = ": focusIn()\n" - "XdndEnter: xdnd_enter()\n"; +static char defaultTranslations[] = ": focusIn()\n" + ": selectElm()\n" + ": popup()"; static XtResource constraints[] = {}; @@ -156,6 +158,8 @@ static void sidebar_class_part_init (WidgetClass wc) { static void sidebar_init(Widget request, Widget neww, ArgList args, Cardinal *num_args) { Sidebar sb = (Sidebar)neww; + // initialize everything except XftDraw or other stuff that needs a Window + XftColor fg, bg; fg.color.red = 0; fg.color.green = 0; @@ -175,6 +179,11 @@ static void sidebar_init(Widget request, Widget neww, ArgList args, Cardinal *nu fprintf(stderr, "Cannot open font.\nAbort.\n"); exit(-1); } + + XftFont *xftFont = sb->sidebar.font->fonts->font; + int padding = 2; + int fontheight = xftFont->ascent; + sb->sidebar.elmHeight = fontheight + 2*padding; } @@ -216,17 +225,20 @@ static void sidebar_realize(Widget widget, XtValueMask *mask, XSetWindowAttribut } static void sidebar_expose(Widget widget, XEvent *event, Region region) { - printf("expose\n"); + //printf("expose\n"); Dimension w, h; XtMakeResizeRequest(widget, 200, 200, &w, &h); Sidebar s = (Sidebar)widget; + XftFont *xftFont = s->sidebar.font->fonts->font; + XftDrawRect(s->sidebar.d, &s->sidebar.bg, 0, 0, s->core.width, s->core.height); - int height = 20; + int fontheight = xftFont->ascent; + int height = s->sidebar.elmHeight; - printf("current track: %d\n", s->sidebar.window->playlist.current_track); + //printf("current track: %d\n", s->sidebar.window->playlist.current_track); int i = 0; UCX_FOREACH(elm, s->sidebar.window->playlist.tracks) { @@ -237,7 +249,7 @@ static void sidebar_expose(Widget widget, XEvent *event, Region region) { cg = &s->sidebar.bg; } - XftDrawString8(s->sidebar.d, cg, s->sidebar.font->fonts->font, 10, i*height + 15, (const FcChar8*)name, strlen(name)); + XftDrawString8(s->sidebar.d, cg, s->sidebar.font->fonts->font, 10, i*height + xftFont->ascent, (const FcChar8*)name, strlen(name)); i++; } @@ -259,15 +271,23 @@ Boolean sidebar_acceptfocus(Widget widget, Time *time) { static void FocusInAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) { - printf("focusin\n"); - fflush(stdout); + } -static void xdndEnterAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) { - printf("xdndEnterAP\n"); - fflush(stdout); +static void SelectElmAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) { + //printf("btn1\n"); + XButtonEvent *e = &event->xbutton; + Sidebar s = (Sidebar)w; + + int selected = e->y / s->sidebar.elmHeight; + PlayListPlayTrack(s->sidebar.window, selected); + + SidebarRepaint(w); } +static void PopupAP(Widget w, XEvent *event, String *args, Cardinal *nArgs) { + //printf("btn3\n"); +} @@ -345,3 +365,7 @@ void SidebarSetWindow(Widget widget, MainWindow *win) { Sidebar sb = (Sidebar)widget; sb->sidebar.window = win; } + +void SidebarRepaint(Widget widget) { + XClearArea(XtDisplay(widget), XtWindow(widget), 0, 0, widget->core.width, widget->core.height, true); +}