Piano / src / player /

piano-impl.c

/*
 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
 *
 * Licensed under the Apache License, Version 2.0 (the License);
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "config.h"
#include "player/piano-player.h"
#include "logger.h"
#include "piano-structs.h"

#define PIANO_NOTE_BORDER_OFFSET 20

void piano_note_touch_down(void *data, Evas_Point coord_on_main_win, Eina_Bool check_collision)
{
	RETM_IF(!data, "data is NULL");
	note_struct *note = (note_struct *) data;

	Evas_Coord button_left = 0, button_top = 0, button_width = 0, button_height = 0;
	evas_object_geometry_get(note->button, &button_left, &button_top, &button_width, &button_height);

	if (PIANO_NOTE_WHITE == note->type) {
		if (check_collision && (coord_on_main_win.y - button_top) < PIANO_NOTE_BORDER_OFFSET) {
			piano_note_touch_down(note->prev, coord_on_main_win, EINA_FALSE);
		} else if (check_collision && button_height - (coord_on_main_win.y - button_top) < PIANO_NOTE_BORDER_OFFSET) {
			piano_note_touch_down(note->next, coord_on_main_win, EINA_FALSE);
		}
	}

	elm_object_signal_emit((Evas_Object *)note->button, "clicked", "*");

	piano_player_play(note);
}

void piano_note_touch_up(void *data)
{
	RETM_IF(!data, "data is NULL");

	note_struct *note = (note_struct *) data;

	RETM_IF(!note->ad, "note->ad is NULL");

	Eina_List *l = NULL;
	note_struct *list_item_note = NULL;
	EINA_LIST_FOREACH(note->ad->buttonList, l, list_item_note) {
		const Evas *evas_button = evas_object_evas_get(list_item_note->button);

		if (evas_button && evas_pointer_button_down_mask_get(evas_button)) {
			elm_object_signal_emit(list_item_note->button, "default", "*");
		}
	}
}