Example #1
0
void skin_draw_header_text(Skin *skin, char *text, SDL_Surface *target)
{
	lcd_draw_string(&skin->font1, text, target, 
	                gmu_widget_get_pos_x(&skin->header, 1),
			                             gmu_widget_get_pos_y(&skin->header, 0) +
			                             (gmu_widget_get_height(&skin->header, 0) -
			                              skin->font1_char_height) / 2);
}
Example #2
0
void skin_draw_footer_text(Skin *skin, char *text, SDL_Surface *target)
{
	int len = skin_textarea_get_characters_per_line(skin);
	lcd_draw_string_with_highlight(&skin->font1, &skin->font2, text, 0, target,
			                       gmu_widget_get_pos_x(&skin->footer, 1),
			                       gmu_widget_get_pos_y(&skin->footer, 0) +
			                       (gmu_widget_get_height(&skin->footer, 0) -
			                        skin->font1_char_height) / 2,
			                       len, RENDER_CROP);
}
Example #3
0
void cover_viewer_scroll_down(CoverViewer *cv)
{
	SDL_Surface *cover = cover_image_get_image(&cv->ci);
	if (cv->hide_text && cover != NULL) {
		if (cv->y_offset < cover->h - gmu_widget_get_height((GmuWidget *)&cv->skin->lv, 1) - 10)
			cv->y_offset += 10;
	} else if (!cv->hide_text) {
		text_browser_scroll_down(&cv->tb);
	}
}
Example #4
0
static void skin_update_widget(Skin *skin, GmuWidget *gw, SDL_Surface *display, SDL_Surface *buffer)
{
	SDL_Rect srect, drect;

	srect.x = gmu_widget_get_pos_x(gw, 0);
	srect.y = gmu_widget_get_pos_y(gw, 0);
	srect.w = gmu_widget_get_width(gw, 0);
	srect.h = gmu_widget_get_height(gw, 0);
	drect.x = srect.x;
	drect.y = srect.y;
	SDL_BlitSurface(buffer, &srect, display, &drect);
	SDL_UpdateRects(display, 1, &drect);
}
Example #5
0
void skin_draw_scroll_arrow_down(Skin *skin, SDL_Surface *target)
{
	SDL_Rect srect, drect;
	int ox = gmu_widget_get_pos_x(&skin->lv, 1);
	int oy = gmu_widget_get_pos_y(&skin->lv, 1);

	srect.w = skin->arrow_down->w;
	srect.h = skin->arrow_down->h;
	srect.x = 0;
	srect.y = 0;
	drect.x = ox + gmu_widget_get_width(&skin->lv, 1) - skin->arrow_down->w;
	drect.y = oy + gmu_widget_get_height(&skin->lv, 1) - skin->arrow_down->h;
	drect.w = 1;
	drect.h = 1;
	if (skin->arrow_down)
		SDL_BlitSurface(skin->arrow_down, &srect, target, &drect);
}
Example #6
0
static void skin_draw_widget(Skin *skin, GmuWidget *gw, SDL_Surface *buffer)
{
	SDL_Rect srect, drect;

	/* if necessary, draw the widget to the offscreen */
	if (skin_init_offscreen(skin, buffer)) {
		gmu_widget_draw(&skin->display, skin->buffer);
		gmu_widget_draw(&skin->header, skin->buffer);
		gmu_widget_draw(&skin->lv, skin->buffer);
		gmu_widget_draw(&skin->footer, skin->buffer);
	}
	srect.x = gmu_widget_get_pos_x(gw, 0);
	srect.y = gmu_widget_get_pos_y(gw, 0);
	srect.w = gmu_widget_get_width(gw, 0);
	srect.h = gmu_widget_get_height(gw, 0);
	drect.x = srect.x;
	drect.y = srect.y;
	SDL_BlitSurface(skin->buffer, &srect, buffer, &drect);
}
Example #7
0
void cover_viewer_load_artwork(CoverViewer *cv, TrackInfo *ti, char *audio_file,
                               char *image_file_pattern, int *ready_flag)
{
	static char last_cover_path[256] = "";

	cv->y_offset = 0;
	if (!cv->large)
		cover_image_set_target_size(&cv->ci, gmu_widget_get_width((GmuWidget *)&cv->skin->lv, 1) / 2,
		                            gmu_widget_get_height((GmuWidget *)&cv->skin->lv, 1));
	else
		cover_image_set_target_size(&cv->ci, gmu_widget_get_width((GmuWidget *)&cv->skin->lv, 1), -1);

	/* Try to load image embedded in tag: */
	if (cv->try_to_load_embedded_cover == EMBEDDED_COVER_FIRST && ti->image.data != NULL) {
		cover_image_load_image_from_memory(&cv->ci, ti->image.data, ti->image.data_size, 
                                         ti->image.mime_type, ready_flag);
		last_cover_path[0] = '\0';
		ti->has_cover_artwork = 1;
	} else if (audio_file != NULL && strlen(audio_file) < 256) {
		char *fn = get_file_matching_given_pattern_alloc(audio_file, image_file_pattern);
		if (fn) {
			ti->has_cover_artwork = 1;
			if (strncmp(fn, last_cover_path, 255) != 0) {
				wdprintf(V_INFO, "coverviewer", "Loading %s\n", fn);
				cover_image_load_image_from_file(&cv->ci, fn, ready_flag);
				wdprintf(V_DEBUG, "coverviewer", "Ok. Loading in progress...\n");
				strncpy(last_cover_path, fn, 255);
				last_cover_path[255] = '\0';
			} else {
				wdprintf(V_INFO, "coverviewer", "Cover file already loaded. No need to reload the file.\n");
			}
			free(fn);
		} else {
			ti->has_cover_artwork = 0;
			if (cover_image_free_image(&cv->ci))
				last_cover_path[0] = '\0';
		}
	} else if (cv->try_to_load_embedded_cover == EMBEDDED_COVER_LAST && ti->image.data != NULL) {
		cover_image_load_image_from_memory(&cv->ci, ti->image.data, ti->image.data_size, 
		                                   ti->image.mime_type, ready_flag);
		last_cover_path[0] = '\0';	
	}
}
Example #8
0
int skin_textarea_get_number_of_lines(Skin *skin)
{
	return gmu_widget_get_height((GmuWidget *)&skin->lv, 1) / (skin->font2_char_height+1);
}
Example #9
0
void cover_viewer_show(CoverViewer *cv, SDL_Surface *target, TrackInfo *ti)
{
	SDL_Rect     srect, drect;
	int          text_x_offset = 5;
	int          chars_per_line = (skin_textarea_get_characters_per_line((Skin *)cv->skin) < 256 ? 
	                               skin_textarea_get_characters_per_line((Skin *)cv->skin) : 255);
	SDL_Surface *cover = cover_image_get_image(&cv->ci);
	int          ax = gmu_widget_get_pos_x((GmuWidget *)&cv->skin->lv, 1);
	int          ay = gmu_widget_get_pos_y((GmuWidget *)&cv->skin->lv, 1);
	int          aw = gmu_widget_get_width((GmuWidget *)&cv->skin->lv, 1);
	int          ah = gmu_widget_get_height((GmuWidget *)&cv->skin->lv, 1);

	if (cover != NULL && !cv->hide_cover && trackinfo_has_cover_artwork(ti)) {
		if (!cv->large) {
			if (cv->small_cover_align == ALIGN_LEFT) {
				text_browser_set_pos_x(&cv->tb, ax + aw / 2);
			} else {
				text_browser_set_pos_x(&cv->tb, ax);
			}
			if (!cv->hide_text) {
				chars_per_line = chars_per_line / 2 - 1;
				text_browser_set_chars_per_line(&cv->tb, chars_per_line);
				switch (cv->small_cover_align) {
					case ALIGN_LEFT:
						drect.x = ax;
						drect.y = ay + ah / 2 - cover->h / 2;
						text_x_offset = cover->w + 5;
						break;
					case ALIGN_RIGHT:
						drect.x = ax + aw - cover->w;
						drect.y = ay + ah / 2 - cover->h / 2;
						text_x_offset = 0;
						break;
				}
				text_browser_set_pos_x(&cv->tb, ax + text_x_offset);
				text_browser_draw(&cv->tb, target);
			} else {
				drect.x = ax + aw / 2 - cover->w / 2;
				drect.y = ay + ah / 2 - cover->h / 2;
			}
			if (cover->w <= aw && cover->h <= ah)
				SDL_BlitSurface(cover, NULL, target, &drect);
		} else {
			text_browser_set_pos_x(&cv->tb, ax);
			text_browser_set_chars_per_line(&cv->tb, chars_per_line);
			drect.x = ax;
			drect.y = ay;
			srect.x = 0;
			srect.y = cv->y_offset;
			srect.w = aw;
			srect.h = ah;
			text_x_offset = 5;
			SDL_BlitSurface(cover, &srect, target, &drect);
			if (!cv->hide_text)	text_browser_draw(&cv->tb, target);
		}
	} else {
		text_browser_set_pos_x(&cv->tb, ax);
		text_browser_set_chars_per_line(&cv->tb, chars_per_line);
		if (!cv->hide_text) text_browser_draw(&cv->tb, target);
	}
	
	/* Draw spectrum analyzer */
	if (cv->spectrum_analyzer) {
		Uint32   color = SDL_MapRGB(target->format, 0, 70, 255);
		int      i, barwidth = aw / 20;
		int16_t *amplitudes;
		static int16_t amplitudes_smoothed[8];
		SDL_Rect dstrect;

		dstrect.w = barwidth;
		dstrect.h = 20;
		dstrect.x = cv->hide_text ? ax + aw / 2 - aw / 4 : ax + aw / 2;
		if (audio_spectrum_read_lock()) {
			amplitudes = audio_spectrum_get_current_amplitudes();
			for (i = 0; i < 8; i++) {
				int16_t a = amplitudes[i] / 327 + 2;
				dstrect.x += barwidth+1;
				if (amplitudes_smoothed[i] < a) amplitudes_smoothed[i] = a;
				amplitudes_smoothed[i] = amplitudes_smoothed[i] > 70 ? 70 : amplitudes_smoothed[i];
				dstrect.h = amplitudes_smoothed[i];
				dstrect.y = ay + ah / 2 + 25 - amplitudes_smoothed[i];
				SDL_FillRect(target, &dstrect, color);
				amplitudes_smoothed[i] -= (15-i);
				if (amplitudes_smoothed[i] < 2) amplitudes_smoothed[i] = 2;
			}
			audio_spectrum_read_unlock();
		}
	}

	if (cv->hide_text && !cv->hide_cover &&  !cv->spectrum_analyzer)
		skin_draw_header_text((Skin *)cv->skin, "Track info (Cover only)", target);
	else if (cv->hide_cover && !cv->hide_text && !cv->spectrum_analyzer)
		skin_draw_header_text((Skin *)cv->skin, "Track info (Text only)", target);
	else if (cv->hide_cover && cv->hide_text && cv->spectrum_analyzer)
		skin_draw_header_text((Skin *)cv->skin, "Track info (Spectrum analyzer only)", target);
	else if (cv->hide_text && cv->hide_cover && !cv->spectrum_analyzer)
		skin_draw_header_text((Skin *)cv->skin, "Track info (showing nothing)", target);
	else if (cv->hide_text && !cv->hide_cover && cv->spectrum_analyzer)
		skin_draw_header_text((Skin *)cv->skin, "Track info (Cover + Spectrum analyzer)", target);
	else if (!cv->hide_text && cv->hide_cover && cv->spectrum_analyzer)
		skin_draw_header_text((Skin *)cv->skin, "Track info (Text + Spectrum analyzer)", target);
	else if (!cv->hide_text && !cv->hide_cover && !cv->spectrum_analyzer)
		skin_draw_header_text((Skin *)cv->skin, "Track info (Text + Cover)", target);
}