Могу ли я изменить файл образа существующего объекта Evas_Object? - PullRequest
0 голосов
/ 27 мая 2020

Я разрабатываю циферблат с помощью Tizen Native, используя библиотеки EFL. После создания множества объектов с помощью:

Evas_Object *view_create_parts(Evas_Object *parent, const char *image_path,
    int position_x, int position_y, int size_w, int size_h) {
    Evas_Object *parts = NULL;

    parts = elm_image_add(parent);

    elm_image_file_set(parts, image_path, NULL);

    evas_object_move(parts, position_x, position_y);
    evas_object_resize(parts, size_w, size_h);

    evas_object_show(parts);

    return parts;
}

я хотел бы позже изменить изображения некоторых из существующих объектов, если это необходимо. Это возможно? Я знаю, что могу также загружать все возможные варианты как отдельные объекты и соответственно отображать / скрывать объекты. Но я считаю, что проще и элегантнее просто изменить изображение существующего объекта. Кроме того, это, вероятно, требует меньше ресурсов.

Я пытался сделать это:

elm_image_file_set(<part_I_want_to_change_its_image>, "images/newimage.png", NULL));

Но вместо того, чтобы перейти к правильному изображению, объект просто исчезнет. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 30 мая 2020

Чтобы кто-то мог следить, я тестирую это на одном из включенных образцов, «Часы с хронографом». В просмотре файлов. c есть функция view_chronograph_create_parts(). Здесь все, что я делаю, это меняю код с:

case PARTS_TYPE_HANDS_HOUR:
    s_info.hand_hour = part; // at this point, the image is already set
    break;

на:

case PARTS_TYPE_HANDS_HOUR:
    s_info.hand_hour = part; // at this point, the image is already set

    elm_image_file_set(s_info.hand_hour, "images/chrono_hand_min.png", NULL);

    // I tried these two lines as well, but no change
    evas_object_move(s_info.hand_hour, 166, 0);
    evas_object_resize(s_info.hand_hour, 28, 360);

    break;

Идея состоит в том, чтобы изменить изображение часовой стрелки после того, как оно было установлено изначально, на посмотрите, успешно ли elm_image_file_set() меняет изображение. Но все, что я получаю, это часовая стрелка, которую вообще не видно.

0 голосов
/ 02 июня 2020

Я наконец понял, что делаю не так. Я не знал, как должен формироваться путь изображения. Нерабочий способ:

elm_image_file_set(s_info.hand_hour, "images/new_image.png", NULL);

Рабочий способ:

char image_path[PATH_MAX] = { 0, };
data_get_resource_path("images/new_image.png", image_path, sizeof(image_path));
elm_image_file_set(s_info.hand_hour, image_path, NULL);
0 голосов
/ 29 мая 2020

Да, elm_image поддерживает преобразование изображений. Но обычное изображение включается в виджет контейнера или работает как область макета, но в вашем примере это кажется изолированным и нарисованным изображением на холсте.

В этом случае, если изображение файл изменен, старая геометрия не имеет смысла, поэтому вам нужно установить новое значение геометрии. выполните действие ниже после вызова elm_image_file_set.

evas_object_move(parts, position_x, position_y);
evas_object_resize(parts, size_w, size_h);
...