// ==PREPROCESSOR== // @name "Now Playing (Customizable) v0.1" // @author "e4" // ==/PREPROCESSOR== // ============= // Flags // ============= DT_TOP = 0x00000000; DT_LEFT = 0x00000000; DT_CENTER = 0x00000001; DT_RIGHT = 0x00000002; DT_VCENTER = 0x00000004; DT_BOTTOM = 0x00000008; DT_WORDBREAK = 0x00000010; DT_CALCRECT = 0x00000400; DT_NOPREFIX = 0x00000800; DT_END_ELLIPSIS = 0x00008000; DT_NOCLIP = 0x00000100; MF_SEPARATOR = 0x00000800; MF_ENABLED = 0x00000000; MF_GRAYED = 0x00000001; MF_DISABLED = 0x00000002; MF_UNCHECKED = 0x00000000; MF_CHECKED = 0x00000008; MF_STRING = 0x00000000; MF_POPUP = 0x00000010; function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); } function RGBA(r, g, b, a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); } var ww = wh = 0; var g_metadb = fb.GetFocusItem(); var images_path = fb.ProfilePath + "images\\"; // titleformat strings var fg_tfstrings = new Array(3); var bg_tfstrings = new Array(4); var fg_tfprops = ["fg_el1_tf", "fg_el2_tf", "fg_el3_tf"]; var bg_tfprops = ["bg_el1_tf", "bg_el2_tf", "bg_el3_tf", "bg_el4_tf"]; fg_tfstrings[0] = window.GetProperty(fg_tfprops[0], "%title%"); fg_tfstrings[1] = window.GetProperty(fg_tfprops[1], "%album%"); fg_tfstrings[2] = window.GetProperty(fg_tfprops[2], "%artist%"); bg_tfstrings[0] = window.GetProperty(bg_tfprops[0], "$year(%date%)"); bg_tfstrings[1] = window.GetProperty(bg_tfprops[1], "[%discnumber%.]%tracknumber%"); bg_tfstrings[2] = window.GetProperty(bg_tfprops[2], "'['%codec%[ %codec_profile%]']'"); bg_tfstrings[3] = window.GetProperty(bg_tfprops[3], "'['%replaygain_track_gain%']'"); // evaluated titleformats var fg_tf = new Array(3); var bg_tf = new Array(4); for (i = 0; i < 3; i++) fg_tf[i] = fb.TitleFormat(fg_tfstrings[i]); for (i = 0; i < 4; i++) bg_tf[i] = fb.TitleFormat(bg_tfstrings[i]); // font size var fg_size = new Array(3); var bg_size = new Array(4); var fg_sizeprops = ["fg_el1_font_size", "fg_el2_font_size", "fg_el3_font_size"]; var bg_sizeprops = ["bg_el1_font_size", "bg_el2_font_size", "bg_el3_font_size", "bg_el4_font_size"]; fg_size[0] = window.GetProperty(fg_sizeprops[0], 19); fg_size[1] = window.GetProperty(fg_sizeprops[1], 14); fg_size[2] = window.GetProperty(fg_sizeprops[2], 19); bg_size[0] = window.GetProperty(bg_sizeprops[0], 48); bg_size[1] = window.GetProperty(bg_sizeprops[1], 48); bg_size[2] = window.GetProperty(bg_sizeprops[2], 12); bg_size[3] = window.GetProperty(bg_sizeprops[3], 12); // font names var fg_fontstrings = new Array(3); var bg_fontstrings = new Array(4); var fg_fontstringprops = ["fg_el1_font","fg_el2_font","fg_el3_font"]; var bg_fontstringprops = ["bg_el1_font","bg_el2_font","bg_el3_font","bg_el4_font"]; for(i=0;i<3;i++) fg_fontstrings[i] = window.GetProperty(fg_fontstringprops[i], "Calibri"); for(i=0;i<4;i++) bg_fontstrings[i] = window.GetProperty(bg_fontstringprops[i], "Calibri"); // font styles var fg_styleprops = ["fg_el1_font_style", "fg_el2_font_style", "fg_el3_font_style"]; var bg_styleprops = ["bg_el1_font_style", "bg_el2_font_style", "bg_el3_font_style","bg_el4_font_style"]; var fg_styles = new Array; var bg_styles = new Array; for(i=0;i<3;i++) fg_styles[i] = window.GetProperty(fg_styleprops[i],1); for(i=0;i<4;i++) bg_styles[i] = window.GetProperty(bg_styleprops[i],1); // gdi font elements var fg_fonts = new Array; var bg_fonts = new Array; for (i = 0; i < 3; i++) fg_fonts[i] = gdi.Font(fg_fontstrings[i], fg_size[i], fg_styles[i]); for (i = 0; i < 4; i++) bg_fonts[i] = gdi.Font(bg_fontstrings[i], bg_size[i], bg_styles[i]); // color strings var fg_colorstrings = new Array; var bg_colorstrings = new Array; fg_colorstrings[0] = window.GetProperty("fg_el1_color", "0,0,0"); fg_colorstrings[1] = window.GetProperty("fg_el2_color", "0,0,0"); fg_colorstrings[2] = window.GetProperty("fg_el3_color", "0,0,0"); bg_colorstrings[0] = window.GetProperty("bg_el1_color", "205,235,205"); bg_colorstrings[1] = window.GetProperty("bg_el2_color", "195,225,255"); bg_colorstrings[2] = window.GetProperty("bg_el3_color", "128,50,50"); bg_colorstrings[3] = window.GetProperty("bg_el4_color", "128,50,50"); // color arrays var fg_rgbs = new Array; var bg_rgbs = new Array; for (i = 0; i < 3; i++) fg_rgbs[i] = fg_colorstrings[i].split(","); for (i = 0; i < 4; i++) bg_rgbs[i] = bg_colorstrings[i].split(","); // rgb colors var fg_colors = new Array; var bg_colors = new Array; for (i = 0; i < 3; i++) fg_colors[i] = RGB(fg_rgbs[i][0], fg_rgbs[i][1], fg_rgbs[i][2]); for (i = 0; i < 4; i++) bg_colors[i] = RGB(bg_rgbs[i][0], bg_rgbs[i][1], bg_rgbs[i][2]); // element strings var fg_els = new Array; var bg_els = new Array; for (i = 0; i < 3; i++) fg_els[i] = ''; for (i = 0; i < 4; i++) bg_els[i] = ''; // case switches 0 = upper, 1 = normal, 2 = lower var fg_caseprops = ["fg_el1_case", "fg_el2_case", "fg_el3_case"]; var bg_caseprops = ["bg_el1_case", "bg_el2_case", "bg_el3_case","bg_el4_case"]; var fg_cases = new Array; var bg_cases = new Array; for(i=0;i<3;i++) fg_cases[i] = window.GetProperty(fg_caseprops[i],0); for(i=0;i<4;i++) bg_cases[i] = window.GetProperty(bg_caseprops[i],0); // previous containers var fg_prevs = new Array; var bg_prevs = new Array; for (i = 0; i < 3; i++) fg_prevs[i] = "|prev|"; for (i = 0; i < 4; i++) bg_prevs[i] = "|prev|"; // element change flags (for checking if playback item has been edited) var fg_changeflags = new Array; var bg_changeflags = new Array; for (i = 0; i < 3; i++) fg_changeflags[i] = 0; for (i = 0; i < 4; i++) bg_changeflags[i] = 0; // foreground mode variables var fg_modes = new Array; // 1 = wraparound, -1 = back and forth var bg_modes = new Array; // 0 = left to right scrolling, 1 = right to left scrolling, 2 = back and forth from left, 3 = back and forth from right, 4 = fixed var fg_modeprops = ["fg_el1_mode", "fg_el2_mode", "fg_el3_mode"]; var bg_modeprops = ["bg_el1_mode", "bg_el2_mode", "bg_el3_mode", "bg_el4_mode"]; fg_modes[0] = window.GetProperty(fg_modeprops[0], 1); fg_modes[2] = window.GetProperty(fg_modeprops[1], 1); fg_modes[1] = window.GetProperty(fg_modeprops[2], 1); bg_modes[0] = window.GetProperty(bg_modeprops[0], 0); bg_modes[1] = window.GetProperty(bg_modeprops[1], 1); bg_modes[2] = window.GetProperty(bg_modeprops[2], 4); bg_modes[3] = window.GetProperty(bg_modeprops[3], 5); var foobar_img_name = window.GetProperty("stopped_image_name", "new foo.png"); var no_cover_img_name = window.GetProperty("no_cover_img_name", "new foo.png"); var foobar_img = gdi.Image(images_path + foobar_img_name); var no_cover_img = gdi.Image(images_path + no_cover_img_name); var album_img = null; var artist_img = null; var arr = new Array(); var g_valid_tid = 0; var g_timer; var cycle_timer = 1; var cycle_timer_mod10 = 0; var color_offset = 0; // offsets var fg_offsets = new Array; var bg_offsets = new Array; for (i = 0; i < 3; i++) fg_offsets[i] = 0; for (i = 0; i < 4; i++) bg_offsets[i] = 0; // offset multipliers var fg_offset_multipliers = new Array; var bg_offset_multipliers = new Array; for (i = 0; i < 3; i++) fg_offset_multipliers[i] = 1; for (i = 0; i < 4; i++) bg_offset_multipliers[i] = 1; var art_w = 0; // x,y positions var fg_ys = new Array; var bg_ys = new Array; var fg_yprops = ["fg_el1_y", "fg_el2_y", "fg_el3_y"]; var bg_yprops = ["bg_el1_y", "bg_el2_y", "bg_el3_y", "bg_el4_y"]; fg_ys[0] = window.GetProperty(fg_yprops[0], 86); fg_ys[1] = window.GetProperty(fg_yprops[1], 59); fg_ys[2] = window.GetProperty(fg_yprops[2], 41); bg_ys[0] = window.GetProperty(bg_yprops[0], 48); bg_ys[1] = window.GetProperty(bg_yprops[1], 111); bg_ys[2] = window.GetProperty(bg_yprops[2], 99); bg_ys[3] = window.GetProperty(bg_yprops[3], 15); var bg_xs = new Array; var bg_xprops = ["bg_el1_x", "bg_el2_x", "bg_el3_x", "bg_el4_x"] bg_xs[0] = window.GetProperty(bg_xprops[0], 108); bg_xs[1] = window.GetProperty(bg_xprops[1], 95); bg_xs[2] = window.GetProperty(bg_xprops[2], 0); bg_xs[3] = window.GetProperty(bg_xprops[3], 325); // element heights var fg_heights = new Array(3); var bg_heights = new Array(4); for (i = 0; i < 3; i++) fg_heights[i] = 0; for (i = 0; i < 4; i++) bg_heights[i] = 0; var fg_widths = new Array(3); var bg_widths = new Array(4); for (i = 0; i < 3; i++) fg_widths[i] = 0; for (i = 0; i < 4; i++) bg_widths[i] = 0; // flags and modes var control_flag = 0; var control_item = 0; var control_item_arr = [0,0,0,0]; var edit_mode = window.GetProperty("edit_mode", 300) - 300; // 0 = off, 1 = fg, 2 = bg var left_margin = 0; var right_margin = 0; var drag_flag = 0; var art_mode = window.GetProperty("art_mode", 200) - 200; // 0 = fg left, 1 = fg right, 2 = bg, 3 = off var bg_modeflags = [0x00000000, 0x00000002, 0x00000000, 0x00000002, 0x00000000, 0x00000002]; var bg_modemuxs = [1, -1, 1, -1]; var mode_colors = [RGB(187, 0, 0), RGB(0, 128, 0), RGB(0, 0, 128), RGB(153, 51, 255), RGB(196, 196, 0), RGB(221, 111, 0)]; var playback_edited_flag = 0; var firstpaint_flag = 1; var data_read_flag = 0; var newtrack_flag = 0; var textcolor = RGB(0, 0, 0); var bg_colorstring = window.GetProperty("bg_color", "255,255,255"); var bg_rgbs = bg_colorstring.split(','); var bg_color = RGB(bg_rgbs[0], bg_rgbs[1], bg_rgbs[2]); var refresh_speed = window.GetProperty("refresh_speed", 50); //preferably a divisor of 1000 var bg_edit_flag = 0; var y_prev = 0; var x_prev = 0; var scale_w = 0; var scale_f = 0; var scale_h = 0; var pos_x = 0; var pos_y = 0; if (fb.IsPlaying) on_playback_new_track(); // callbacks start here function on_timer(time) { window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } function on_playback_stop(reason) { album_img && album_img.Dispose(); artist_img && artist_img.Dispose(); for (i = 0; i < 3; i++) { fg_els[i] = ''; fg_offsets[i] = 0; } for (i = 0; i < 4; i++) { bg_els[i] = ''; bg_offsets[i] = 0; } firstpaint_flag = 1; data_read_flag = newtrack_flag = playback_edited_flag = 0; g_metadb = album_img = artist_img = arr = null; if (reason != 2) window.Repaint(); } function on_playback_edited(metadb) { playback_edited_flag = 1; on_playback_new_track(); } function on_playback_new_track() { firstpaint_flag = 1; data_read_flag = 0; g_metadb = fb.GetNowPlaying(); for (i = 0; i < 3; i++) { fg_els[i] = fg_tf[i].EvalWithMetadb(g_metadb); switch(fg_cases[i]) { case 0: fg_els[i] = fg_els[i].toUpperCase(); break; case 2: fg_els[i] = fg_els[i].toLowerCase(); break; } } for (i = 0; i < 4; i++) { bg_els[i] = bg_tf[i].EvalWithMetadb(g_metadb); switch(bg_cases[i]) { case 0: bg_els[i] = bg_els[i].toUpperCase(); break; case 2: bg_els[i] = bg_els[i].toLowerCase(); break; } } for (i = 0; i < 3; i++) { if (fg_prevs[i] != fg_els[i]) { fg_offsets[i] = 0; fg_prevs[i] = fg_els[i]; fg_changeflags[i] = 1; } } for (i = 0; i < 4; i++) { if (bg_prevs[i] != bg_els[i]) { bg_offsets[i] = 0; bg_prevs[i] = bg_els[i]; bg_changeflags[i] = 1; } } album_img && album_img.Dispose(); if (g_timer) { window.KillTimer(g_timer); } if (fb.PlaybackLength > 0) g_timer = window.CreateTimerInterval(refresh_speed); album_img = utils.GetAlbumArtEmbedded(g_metadb.rawpath, 0); if (!album_img) utils.GetAlbumArtAsync(window.ID, g_metadb, 0); data_read_flag = 1; if (playback_edited_flag == 0) { newtrack_flag = 1; window.Repaint(); } else if (playback_edited_flag == 1) { window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } } function on_get_album_art_done(metadb, art_id, im, ip) { album_img = im; window.Repaint(); } function on_size() { ww = window.width; wh = window.height; } function on_mouse_lbtn_down(x, y) { if (control_flag == 1) { y_prev = y; x_prev = x; drag_flag = 1; } } function on_mouse_leave() { control_flag = control_item = 0; window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } function on_mouse_move(x, y) { if (drag_flag == 0) { if (edit_mode == 1) { var j = 0; var found_flag = 0; for (i = 0; i < 3; i++) { if ((x > left_margin) && (x < ww - (right_margin)) && (y > wh - fg_ys[i]) && (y < wh - fg_ys[i] + fg_heights[i])) { control_item_arr[j] = i + 1; j++; found_flag = 1; } if (i == 2) { if(!found_flag) { control_flag = 0; control_item = 0; for(k=0;k<4;k++) control_item_arr[k] = 0; } else { for(k=0;k<4;k++) { if(k>=j) control_item_arr[k] = 0; if(control_item_arr[k]==control_item&&control_item!=0&&control_flag!=2) control_flag = 2; } if(control_flag != 2) control_item = control_item_arr[0]; control_flag =1; } if (!fb.IsPlaying) window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } } } else if (edit_mode == 2) { var j = 0; var found_flag = 0; for (i = 0; i < 4; i++) { if (bg_modes[i] < 4) { if ((x > left_margin) && (x < ww - (right_margin)) && (y > wh - bg_ys[i]) && (y < wh - bg_ys[i] + bg_heights[i])) { control_item_arr[j] = i + 1; j++; found_flag = 1; } } else if (bg_modes[i] == 4) { if ((x > left_margin + bg_xs[i]) && (x < left_margin + bg_xs[i] + bg_widths[i]) && (y > wh - bg_ys[i]) && (y < wh - bg_ys[i] + bg_heights[i])) { control_item_arr[j] = i + 1; j++; found_flag = 1; } } else if (bg_modes[i] == 5) { if ((x > left_margin + bg_xs[i] - bg_widths[i]) && (x < left_margin + bg_xs[i]) && (y > wh - bg_ys[i]) && (y < wh - bg_ys[i] + bg_heights[i])) { control_item_arr[j] = i + 1; j++; found_flag = 1; } } if (i == 3) { if(!found_flag) { control_flag = 0; control_item = 0; for(k=0;k<4;k++) control_item_arr[k] = 0; } else { for(k=0;k<4;k++) { if(k>=j) control_item_arr[k] = 0; if(control_item_arr[k]==control_item&&control_item!=0&&control_flag!=2) control_flag = 2; } if(control_flag != 2) control_item = control_item_arr[0]; control_flag =1; } if (!fb.IsPlaying) window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } } } } else if (drag_flag == 1) { if (edit_mode == 1) { for (i = 0; i < 3; i++) { if (control_item == i + 1) { fg_ys[i] = fg_ys[i] - (y - y_prev); window.SetProperty(fg_yprops[i], fg_ys[i]); y_prev = y; } } } else if (edit_mode == 2) { for (i = 0; i < 4; i++) { if (control_item == i + 1) { bg_ys[i] = bg_ys[i] - (y - y_prev); if (bg_modes[i] > 3) { bg_xs[i] = bg_xs[i] + (x - x_prev); window.SetProperty(bg_xprops[i], bg_xs[i]); } window.SetProperty(bg_yprops[i], bg_ys[i]); y_prev = y; x_prev = x; } } } if (!fb.IsPlaying) window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } } function on_mouse_wheel(delta) { if (control_flag == 1) { if (edit_mode == 1) { for (i = 0; i < 3; i++) { if (control_item == i + 1) { if (fg_size[i] + delta > 1) { fg_size[i] += delta; window.SetProperty(fg_sizeprops[i], fg_size[i]); } if (!fb.IsPlaying) window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } } } else if (edit_mode == 2) { for (i = 0; i < 4; i++) { if (control_item == i + 1) { if (bg_size[i] + delta > 1) { bg_size[i] += delta; window.SetProperty(bg_sizeprops[i], bg_size[i]); } if (!fb.IsPlaying) window.RepaintRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh); } } } } } function on_mouse_lbtn_dblclk(x, y) { var a_width = 0; var a_height = 0; if (edit_mode != 0) { if (album_img) { a_width = album_img.Width * scale_f; a_height = album_img.Height * scale_f; } else if (!fb.IsPlaying&&foobar_img) { a_width = foobar_img.Width * scale_f; a_height = foobar_img.Height * scale_f; } else if(no_cover_img){ a_width = no_cover_img.Width * scale_f; a_height = no_cover_img.Height * scale_f; } else { a_width = 250 * scale_f; a_height = 250 * scale_f; } if (art_mode == 0) { if ((x > 3) && (x < (3 + (a_width))) && (y > wh - art_w + 2 + pos_y) && (y < wh - art_w + 2 + pos_y + (a_height))) { window.SetProperty("art_mode", 201); art_mode = 1; window.Repaint(); } } else if (art_mode == 1) { if ((x > ww - (art_w - 1)) && (x < (ww - (art_w - 1) + (a_width))) && (y > wh - art_w + 2 + pos_y) && (y < wh - art_w + 2 + pos_y + (a_height))) { window.SetProperty("art_mode", 200); art_mode = 0; window.Repaint(); } } } if (control_flag == 1) { if (edit_mode == 1) { for (i = 0; i < 3; i++) { if (control_item == i + 1) { fg_modes[i] = fg_modes[i] < 1 ? 1 : 0; window.SetProperty(fg_modeprops[i], fg_modes[i]); } } } else if (edit_mode == 2) { for (i = 0; i < 4; i++) { if (control_item == i + 1) { if (bg_modes[i] < 5) bg_modes[i] += 1; else bg_modes[i] = 0; window.SetProperty(bg_modeprops[i], bg_modes[i]); } } } } } function on_mouse_lbtn_up() { drag_flag = 0; } function on_mouse_mbtn_up() { if(edit_mode!=0&&control_item_arr[0]!=0) { for(i=0;i<3;i++) { if(control_item_arr[i]==control_item) { control_item = control_item_arr[i+1]!=0 ? control_item_arr[i+1] : control_item_arr[0]; break; } } } } function on_paint(gr) { gr.SetInterpolationMode(6); art_w = Math.ceil(ww * 26 / 100) - 10; if (art_w > wh) art_w = wh; text_x = art_w + 5; switch (art_mode) { case 0: left_margin = art_w + 3; right_margin = 5; break; case 1: left_margin = 5; right_margin = art_w + 5; break; case 2: case 3: left_margin = 5; right_margin = 5; break } for (i = 0; i < 3; i++) { if (!fb.IsPlaying && edit_mode == 1) { fg_els[i] = fg_tfstrings[i]; switch(fg_cases[i]) { case 0: fg_els[i] = fg_els[i].toUpperCase(); break; case 2: fg_els[i] = fg_els[i].toLowerCase(); break; } } fg_fonts[i] = gdi.Font(fg_fontstrings[i], fg_size[i], 1); fg_heights[i] = Math.ceil(gr.CalcTextHeight(fg_els[i], fg_fonts[i])); fg_widths[i] = Math.ceil(gr.CalcTextWidth(fg_els[i], fg_fonts[i])); if (fg_ys[i] - Math.ceil(fg_heights[i] / 2) > wh - 2 && fg_els[i] != '') fg_ys[i] = wh - 3 + Math.ceil(fg_heights[i] / 2); else if (fg_ys[i] - Math.ceil(fg_heights[i] / 2) < 2 && fg_els[i] != '') fg_ys[i] = 3 + Math.ceil(fg_heights[i] / 2); } for (i = 0; i < 4; i++) { if (!fb.IsPlaying && edit_mode == 2) { bg_els[i] = bg_tfstrings[i]; switch(bg_cases[i]) { case 0: bg_els[i] = bg_els[i].toUpperCase(); break; case 2: bg_els[i] = bg_els[i].toLowerCase(); break; } } bg_fonts[i] = gdi.Font(bg_fontstrings[i], bg_size[i], 1); bg_heights[i] = Math.ceil(gr.CalcTextHeight(bg_els[i], bg_fonts[i])); bg_widths[i] = Math.ceil(gr.CalcTextWidth(bg_els[i], bg_fonts[i])); if (bg_ys[i] - Math.ceil(bg_heights[i] / 2) > wh - 2 && bg_els[i] != '') bg_ys[i] = wh - 3 + Math.ceil(bg_heights[i] / 2); else if (bg_ys[i] - Math.ceil(bg_heights[i] / 2) < 2 && bg_els[i] != '') bg_ys[i] = 3 + Math.ceil(bg_heights[i] / 2); if (bg_modes[i] == 4) { if (bg_xs[i] < 0) bg_xs[i] = 0; else if (bg_xs[i] > ww - (left_margin + right_margin + 5)) bg_xs[i] = ww - (left_margin + right_margin + 6); } else if (bg_modes[i] == 5) { if (bg_xs[i] < 5) bg_xs[i] = 6; else if (bg_xs[i] > ww - (left_margin + right_margin)) bg_xs[i] = ww - (left_margin + right_margin); } } if (firstpaint_flag == 1 && data_read_flag == 1) { for (i = 0; i < 3; i++) { if ((gr.CalcTextWidth(fg_els[i], fg_fonts[i]) > (ww - (left_margin + right_margin))) && ((fg_changeflags[i] == 1) || (newtrack_flag == 1))) { fg_offsets[i] = Math.ceil(-(gr.CalcTextWidth(fg_els[i], fg_fonts[i])) / 2); fg_changeflags[i] = 0; } } for (i = 0; i < 4; i++) { if ((bg_modes[i] < 2) && ((bg_changeflags[i] == 1) || (newtrack_flag == 1))) { bg_offsets[i] = Math.ceil(-(gr.CalcTextWidth(bg_els[i], bg_fonts[i]))); bg_changeflags[i] = 0; } } newtrack_flag = 0; firstpaint_flag = 0; } else if (data_read_flag == 1 && firstpaint_flag == 0) { for (i = 0; i < 4; i++) { if (bg_modes[i] < 2) { if (bg_offsets[i] < (ww - (left_margin + right_margin))) bg_offsets[i] += 1; else bg_offsets[i] = Math.ceil(-(gr.CalcTextWidth(bg_els[i], bg_fonts[i]))); } if (bg_modes[i] == 2 || bg_modes[i] == 3) { if (bg_offsets[i] > (ww - (left_margin + right_margin + bg_widths[i]))) bg_offset_multipliers[i] = -1; else if (bg_offsets[i] < 0) bg_offset_multipliers[i] = 1; bg_offsets[i] += 1 * (bg_offset_multipliers[i]); } } for (i = 0; i < 3; i++) { if (gr.CalcTextWidth(fg_els[i], fg_fonts[i]) > (ww - (left_margin + right_margin))) { if (fg_modes[i] == 0) { if (fg_offsets[i] < Math.ceil((gr.CalcTextWidth(fg_els[i], fg_fonts[i])) / 2) + Math.ceil((ww - (left_margin + right_margin)) / 2) + 5) fg_offsets[i] += 1; else fg_offsets[i] = Math.ceil(-(gr.CalcTextWidth(fg_els[i], fg_fonts[i])) / 2) - Math.ceil((ww - (left_margin + right_margin)) / 2) - 5; } else if (fg_modes[i] == 1) { if (fg_offsets[i] > Math.ceil((gr.CalcTextWidth(fg_els[i], fg_fonts[i])) / 2)) fg_offset_multipliers[i] = -1; else if (fg_offsets[i] < Math.ceil(-(gr.CalcTextWidth(fg_els[i], fg_fonts[i])) / 2)) fg_offset_multipliers[i] = 1; fg_offsets[i] += 1 * (fg_offset_multipliers[i]); } } else if (fg_offsets[i] != 0) { if (fg_offsets[i] > 0) fg_offsets[i]--; else if (fg_offsets[i] < 0) fg_offsets[i]++; } } } // text painting starts here gr.FillSolidRect(left_margin, 0, ww - (left_margin + right_margin - 1), wh, bg_color); for (i = 0; i < 4; i++) { if (bg_modes[i] < 4 && !(edit_mode == 2 && control_item == i + 1)) { gr.GdiDrawText(bg_els[i], bg_fonts[i], bg_colors[i], left_margin + (bg_modemuxs[bg_modes[i]] * bg_offsets[i]), wh - bg_ys[i], ww - (left_margin + right_margin), wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | bg_modeflags[bg_modes[i]]); } else if (bg_modes[i] == 4) { gr.GdiDrawText(bg_els[i], bg_fonts[i], bg_colors[i], left_margin + bg_xs[i], wh - bg_ys[i], ww - (left_margin + right_margin), wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | DT_LEFT); } else if (bg_modes[i] == 5) { gr.GdiDrawText(bg_els[i], bg_fonts[i], bg_colors[i], 0, wh - bg_ys[i], left_margin + bg_xs[i], wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | DT_RIGHT); } } if (edit_mode == 1) { if (control_flag == 1) { for (i = 0; i < 3; i++) { if (control_item == i + 1) gr.FillSolidRect(left_margin, wh - fg_ys[i], ww - (left_margin + right_margin), fg_heights[i], RGBA(220, 220, 220, 158)); } } } for (i = 0; i < 3; i++) gr.GdiDrawText(fg_els[i], fg_fonts[i], fg_colors[i], left_margin - fg_offsets[i], wh - fg_ys[i], ww - (left_margin + right_margin), wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | DT_CENTER); for (i = 0; i < 3; i++) { if (edit_mode == 1 && control_item == i + 1) { gr.FillSolidRect(left_margin, wh - fg_ys[i], ww - (left_margin + right_margin), fg_heights[i], RGBA(220, 220, 220, 158)); gr.GdiDrawText(fg_els[i], fg_fonts[i], mode_colors[fg_modes[i]], left_margin - fg_offsets[i], wh - fg_ys[i], ww - (left_margin + right_margin), wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | DT_CENTER); if (edit_mode == 1 && control_item == i + 1) gr.DrawRect(left_margin, wh - fg_ys[i], ww - (left_margin + right_margin), fg_heights[i], 1.0, RGB(125, 125, 125)); } } if (edit_mode == 2) { if (control_flag == 1) { for (i = 0; i < 4; i++) { if (control_item == i + 1 && bg_modes[i] < 4) gr.FillSolidRect(left_margin, wh - bg_ys[i], ww - (left_margin + right_margin), bg_heights[i], RGBA(220, 220, 220, 158)); else if (control_item == i + 1 && bg_modes[i] == 4) gr.FillSolidRect(left_margin + bg_xs[i], wh - bg_ys[i], bg_widths[i], bg_heights[i], RGBA(220, 220, 220, 158)); else if (control_item == i + 1 && bg_modes[i] == 5) gr.FillSolidRect(left_margin + bg_xs[i] - bg_widths[i], wh - bg_ys[i], bg_widths[i], bg_heights[i], RGBA(220, 220, 220, 158)); } } for (i = 0; i < 4; i++) { if (control_item == i + 1) { textcolor = mode_colors[bg_modes[i]]; if (bg_modes[i] < 4) { gr.GdiDrawText(bg_els[i], bg_fonts[i], textcolor, left_margin + (bg_modemuxs[bg_modes[i]] * bg_offsets[i]), wh - bg_ys[i], ww - (left_margin + right_margin), wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | bg_modeflags[bg_modes[i]]); } else if (bg_modes[i] == 4) { gr.GdiDrawText(bg_els[i], bg_fonts[i], textcolor, left_margin + bg_xs[i], wh - bg_ys[i], ww - (left_margin + right_margin), wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | DT_LEFT); } else if (bg_modes[i] == 5) { gr.GdiDrawText(bg_els[i], bg_fonts[i], textcolor, 0, wh - bg_ys[i], left_margin + bg_xs[i], wh, DT_NOCLIP | DT_CALCRECT | DT_NOPREFIX | DT_RIGHT); } } } for (i = 0; i < 4; i++) { if (control_item == i + 1 && bg_modes[i] < 4) gr.DrawRect(left_margin, wh - bg_ys[i], ww - (left_margin + right_margin), bg_heights[i], 1.0, RGB(125, 125, 125)); else if (control_item == i + 1 && bg_modes[i] == 4) gr.DrawRect(left_margin + bg_xs[i], wh - bg_ys[i], bg_widths[i], bg_heights[i], 1.0, RGB(125, 125, 125)); else if (control_item == i + 1 && bg_modes[i] == 5) gr.DrawRect(left_margin + bg_xs[i] - bg_widths[i], wh - bg_ys[i], bg_widths[i], bg_heights[i], 1.0, RGB(125, 125, 125)); } } gr.FillSolidRect(0, 0, left_margin, wh, bg_color); gr.FillSolidRect(ww - right_margin + 1, 0, right_margin, wh, bg_color); if (album_img) { scale_w = (art_w - 5) / album_img.Width; scale_h = (art_w - 5) / album_img.Height; if (album_img.Width > album_img.Height) scale_f = scale_w; else scale_f = scale_h; pos_x = 0; pos_y = 0; pos_x = art_w - (album_img.Width * scale_f) - 4; if (pos_x > 0) pos_x = (art_w - (album_img.Width * scale_f) - 4) / 2; else pos_x = 0; pos_y = art_w - (album_img.Height * scale_f) - 4; if (pos_y > 0) pos_y = (art_w - (album_img.Height * scale_f) - 4) / 2; else pos_y = 0; if (pos_y > 1) pos_y = pos_y; else pos_y = 0; if (art_w < wh) pos_y -= ((wh - art_w) / 2) - 1; switch (art_mode) { case 0: gr.FillSolidRect(3 + pos_x, wh - art_w + 2 + pos_y, (album_img.Width * scale_f), (album_img.Height * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(4 + pos_x, wh - art_w + 3 + pos_y, (album_img.Width * scale_f) - 2, (album_img.Height * scale_f) - 2, RGB(255, 255, 255)) gr.DrawImage(album_img, 5 + pos_x, wh - art_w + 4 + pos_y, (album_img.Width * scale_f) - 4, (album_img.Height * scale_f) - 4, 0, 0, album_img.Width, album_img.Height); break; case 1: gr.FillSolidRect(ww - (art_w - 1) + pos_x, wh - art_w + 2 + pos_y, (album_img.Width * scale_f), (album_img.Height * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(ww - (art_w - 2) + pos_x, wh - art_w + 3 + pos_y, (album_img.Width * scale_f) - 2, (album_img.Height * scale_f) - 2, RGB(255, 255, 255)); gr.DrawImage(album_img, ww - art_w + 3 + pos_x, wh - art_w + 4 + pos_y, (album_img.Width * scale_f) - 4, (album_img.Height * scale_f) - 4, 0, 0, album_img.Width, album_img.Height); break; } } else { if (fb.IsPlaying&&no_cover_img) { scale_w = (art_w - 5) / no_cover_img.Width; scale_h = wh / no_cover_img.Height; scale_f = scale_w; pos_x = 0; pos_y = 0; if (scale_w < scale_h) pos_y = (wh - no_cover_img.height * scale_f) / 2; else if (scale_w > scale_h) pos_x = (ww - no_cover_img.Width * scale_f) / 2; pos_y = art_w - (no_cover_img.Height * scale_f) - 4; if (pos_y > 0) pos_y = (art_w - (no_cover_img.Height * scale_f) - 4) / 2; else pos_y = 0; if (pos_y > 1) pos_y = pos_y; else pos_y = 0; if (art_w < wh) pos_y -= ((wh - art_w) / 2) - 1; switch (art_mode) { case 0: gr.FillSolidRect(3, wh - art_w + 2 + pos_y, (no_cover_img.Width * scale_f), (no_cover_img.Height * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(4, wh - art_w + 3 + pos_y, (no_cover_img.Width * scale_f) - 2, (no_cover_img.Height * scale_f) - 2, RGB(255, 255, 255)) gr.FillSolidRect(5, wh - art_w + 4 + pos_y, (no_cover_img.Width * scale_f) - 4, (no_cover_img.Height * scale_f) - 4, RGB(65, 65, 65)); gr.DrawImage(no_cover_img, 5, wh - art_w + 4 + pos_y, (no_cover_img.Width * scale_f) - 4, (no_cover_img.Height * scale_f) - 4, 0, 0, no_cover_img.Width, no_cover_img.Height); break; case 1: gr.FillSolidRect(ww - (art_w - 1), wh - art_w + 2 + pos_y, (no_cover_img.Width * scale_f), (no_cover_img.Height * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(ww - (art_w - 2), wh - art_w + 3 + pos_y, (no_cover_img.Width * scale_f) - 2, (no_cover_img.Height * scale_f) - 2, RGB(255, 255, 255)); gr.FillSolidRect(ww - art_w + 3, wh - art_w + 4 + pos_y, (no_cover_img.Width * scale_f) - 4, (no_cover_img.Height * scale_f) - 4, RGB(65, 65, 65)); gr.DrawImage(no_cover_img, ww - art_w + 3, wh - art_w + 4 + pos_y, (no_cover_img.Width * scale_f) - 4, (no_cover_img.Height * scale_f) - 4, 0, 0, no_cover_img.Width, no_cover_img.Height); break; } } else if(foobar_img){ scale_w = (art_w - 5) / foobar_img.Width; scale_h = wh / foobar_img.Height; scale_f = scale_w; pos_x = 0; pos_y = 0; if (scale_w < scale_h) pos_y = (wh - foobar_img.height * scale_f) / 2; else if (scale_w > scale_h) pos_x = (ww - foobar_img.Width * scale_f) / 2; pos_y = art_w - (foobar_img.Height * scale_f) - 4; if (pos_y > 0) pos_y = (art_w - (foobar_img.Height * scale_f) - 4) / 2; else pos_y = 0; if (pos_y > 1) pos_y = pos_y; else pos_y = 0; if (art_w < wh) pos_y -= ((wh - art_w) / 2) - 1; switch (art_mode) { case 0: gr.FillSolidRect(3, wh - art_w + 2 + pos_y, (foobar_img.Width * scale_f), (foobar_img.Height * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(4, wh - art_w + 3 + pos_y, (foobar_img.Width * scale_f) - 2, (foobar_img.Height * scale_f) - 2, RGB(255, 255, 255)) gr.FillSolidRect(5, wh - art_w + 4 + pos_y, (foobar_img.Width * scale_f) - 4, (foobar_img.Height * scale_f) - 4, RGB(65, 65, 65)); gr.DrawImage(foobar_img, 5, wh - art_w + 4 + pos_y, (foobar_img.Width * scale_f) - 4, (foobar_img.Height * scale_f) - 4, 0, 0, foobar_img.Width, foobar_img.Height); break; case 1: gr.FillSolidRect(ww - (art_w - 1), wh - art_w + 2 + pos_y, (foobar_img.Width * scale_f), (foobar_img.Height * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(ww - (art_w - 2), wh - art_w + 3 + pos_y, (foobar_img.Width * scale_f) - 2, (foobar_img.Height * scale_f) - 2, RGB(255, 255, 255)); gr.FillSolidRect(ww - art_w + 3, wh - art_w + 4 + pos_y, (foobar_img.Width * scale_f) - 4, (foobar_img.Height * scale_f) - 4, RGB(65, 65, 65)); gr.DrawImage(foobar_img, ww - art_w + 3, wh - art_w + 4 + pos_y, (foobar_img.Width * scale_f) - 4, (foobar_img.Height * scale_f) - 4, 0, 0, foobar_img.Width, foobar_img.Height); break; } } else { scale_w = (art_w - 5) / 250; scale_h = wh / 250; scale_f = scale_w; pos_x = 0; pos_y = 0; if (scale_w < scale_h) pos_y = (wh - 250 * scale_f) / 2; else if (scale_w > scale_h) pos_x = (ww - 250 * scale_f) / 2; pos_y = art_w - (250 * scale_f) - 4; if (pos_y > 0) pos_y = (art_w - (250 * scale_f) - 4) / 2; else pos_y = 0; if (pos_y > 1) pos_y = pos_y; else pos_y = 0; if (art_w < wh) pos_y -= ((wh - art_w) / 2) - 1; switch (art_mode) { case 0: gr.FillSolidRect(3, wh - art_w + 2 + pos_y, (250 * scale_f), (250 * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(4, wh - art_w + 3 + pos_y, (250 * scale_f) - 2, (250 * scale_f) - 2, RGB(255, 255, 255)) gr.FillGradRect(5, wh - art_w + 4 + pos_y, (250 * scale_f) - 4, (250 * scale_f) - 4, 90, RGB(65,65,65), RGB(190,190,190)); // gr.DrawImage(foobar_img, 5, wh - art_w + 4 + pos_y, (foobar_img.Width * scale_f) - 4, (foobar_img.Height * scale_f) - 4, 0, 0, foobar_img.Width, foobar_img.Height); break; case 1: gr.FillSolidRect(ww - (art_w - 1), wh - art_w + 2 + pos_y, (250 * scale_f), (250 * scale_f), RGB(0, 0, 0)); gr.FillSolidRect(ww - (art_w - 2), wh - art_w + 3 + pos_y, (250 * scale_f) - 2, (250 * scale_f) - 2, RGB(255, 255, 255)); gr.FillGradRect(ww - art_w + 3, wh - art_w + 4 + pos_y, (250 * scale_f) - 4, (250 * scale_f) - 4, 90, RGB(65,65,65), RGB(190,190,190)); // gr.DrawImage(foobar_img, ww - art_w + 3, wh - art_w + 4 + pos_y, (foobar_img.Width * scale_f) - 4, (foobar_img.Height * scale_f) - 4, 0, 0, foobar_img.Width, foobar_img.Height); break; } } } } function on_playback_dynamic_info() { for(i=0;i<3;i++) { fg_els[i] = fg_tf[i].Eval(); switch(fg_cases[i]) { case 0: fg_els[i] = fg_els[i].toUpperCase(); break; case 2: fg_els[i] = fg_els[i].toLowerCase(); break; } } for(i=0;i<4;i++) { bg_els[i] = bg_tf[i].Eval(); switch(bg_cases[i]) { case 0: bg_els[i] = bg_els[i].toUpperCase(); break; case 2: bg_els[i] = bg_els[i].toLowerCase(); break; } } } function on_mouse_rbtn_up(x, y) { control_flag = 0; control_item = 0; var _menu = window.CreatePopupMenu(); var _art_mode = window.CreatePopupMenu(); var _edit_mode = window.CreatePopupMenu(); var idx; _menu.AppendMenuItem(MF_STRING | MF_POPUP, _art_mode.ID, "Album Art"); _art_mode.AppendMenuItem(MF_STRING, 200, "Left"); _art_mode.AppendMenuItem(MF_STRING, 201, "Right"); _art_mode.AppendMenuItem(MF_STRING, 203, "Disabled"); _art_mode.CheckMenuRadioItem(200, 203, window.GetProperty("art_mode")); _menu.AppendMenuItem(MF_STRING | MF_POPUP, _edit_mode.ID, "Live Edit"); _edit_mode.AppendMenuItem(MF_STRING, 301, "Foreground Elements"); _edit_mode.AppendMenuItem(MF_STRING, 302, "Background Elements"); _edit_mode.AppendMenuItem(MF_STRING, 300, "Disabled"); _edit_mode.CheckMenuRadioItem(300, 302, window.GetProperty("edit_mode")); _menu.AppendMenuItem(MF_SEPARATOR, 0, 0); _menu.AppendMenuItem(MF_STRING, 99, "Properties"); _menu.AppendMenuItem(MF_STRING, 100, "Configure..."); idx = _menu.TrackPopupMenu(x, y); switch (idx) { case 99: window.ShowProperties(); break; case 100: window.ShowConfigure(); break; case 200: case 201: case 203: window.SetProperty("art_mode", idx); art_mode = idx - 200; window.Repaint(); break; case 300: case 301: case 302: window.SetProperty("edit_mode", idx); edit_mode = idx - 300; if (!fb.IsPlaying) on_playback_stop(); window.Repaint(); break; } _menu.Dispose(); return true; }