简体   繁体   English

Tizen Native:如何更改进度条颜色

[英]Tizen Native: How to change the progressbar color

I'm developing a Tizen Native Wearable App. 我正在开发一个Tizen Native Wearable App。

I want to change the color of my progressbar so I'm following this links: 我想更改进度条的颜色,所以我按照以下链接:

I know that in order to change the color of any widget in Tizen I need to use "Themes" but I can't get it to work. 我知道为了改变Tizen中任何小部件的颜色,我需要使用“主题”,但我不能让它工作。 This is what I did: 这就是我做的:

In my app_main.c I have: 在我的app_main.c中我有:

static bool _on_create_cb(void *user_data)
{
    uib_app_manager_get_instance()->initialize();

    char resource_path[PATH_MAX];
    app_get_resource("edje/progressbar_custom.edj", resource_path, (int)PATH_MAX);
    elm_theme_extension_add(NULL, resource_path);

    return true;
}

In the folder res I created a folder edje and then in res/edje I created a file progressbar_custom.edc The content of progressbar_custom.edc is the one given as answer in the first link. 在文件夹RES我创建了一个文件夹的Edje,然后在res /的Edje我创建了一个文件progressbar_custom.edc progressbar_custom.edc的内容被指定为第一链路的答案之一。

Then in my progress bar object I set the style: 然后在我的进度条对象中设置样式:

...
Evas_Object* pb;
pb = elm_progressbar_add(parent);
elm_object_style_set(pb, "custom_progress");
...

When I launch the app the progressbar does not show. 当我启动应用程序时,进度条不会显示。 I guess that the problem is the content of the progressbar_custom.edc because I think it comes from mobile, not wearable. 我想问题是progressbar_custom.edc的内容,因为我认为它来自移动设备,而不是可穿戴设备。 Every tutorial says to copy the content of the "default style" but I have no idea where this "default style" is! 每个教程都说要复制“默认样式”的内容,但我不知道这个“默认样式”在哪里!

Any help is apreciated, thanks! 任何帮助都是赞成的,谢谢!

I think EDJE syntax or part name in your edc file is not vailable in current wearable tizen. 我认为edc文件中的EDJE语法或部件名称在当前的可穿戴tizen中是不可用的。

data.item means some data is supplied from outside of edje. data.item表示从data.item外部提供的一些数据。 and blar_vg_blar means efl vector graphic API draw something in there. blar_vg_blar意味着efl矢量图形API在那里绘制一些东西。 but vector graphic API is not in version of tizen wearable (2.3.1). 但是矢量图形API不是tizen wearable的版本(2.3.1)。

Basically, EDJE theme for Elementary is super entangled with elementary widget code. 基本上,小学的EDJE主题与基本小部件代码超级纠缠。 elementary widget code use hard coded signals and part name in EDC file. 基本小部件代码在EDC文件中使用硬编码信号和部件名称。

so elementary's theme is not means another themes like css . 所以小学的主题并不意味着像css这样的另一个主题。 it has logic for viewing and events and some controller and data for view. 它具有查看和事件的逻辑以及一些用于查看的控制器和数据。

if you want make new theme you implement everything again that implemented in default theme. 如果你想创建新的主题,你再次实现在默认主题中实现的一切。

best easy way is copy original one and edit it. 最简单的方法是复制原始的并编辑它。 so you must check version of your target for copying right theme. 因此,您必须检查目标版本以复制正确的主题。

currently, every wearable tizen OS in samsung device is under 2.3.1. 目前,三星设备中的每个可穿戴的tizen操作系统都在2.3.1之下。

so you should make theme match with tizen 2.3.1 wearable profile. 所以你应该使用tizen 2.3.1可穿戴的个人资料进行主题匹配。

this is basic theme for tizen 2.3.1 wearable profile. 是tizen 2.3.1可穿戴配置文件的基本主题。 it's not same in real device because real device can has different theme then original profile. 它在真实设备中并不相同,因为真实设备可以具有与原始配置文件不同的主题。 it is same relationship like google's android theme and other vendors themes. 它是谷歌的Android主题和其他供应商主题相同的关系。

Anyway you can refer this that is default progressbar theme in tizen 2.3.1 wearable. 无论如何,您可以在tizen 2.3.1 wearable中引用是默认进度条主题。

I make some simple example with modifed default style in EDC's first group. 我在EDC的第一组中使用修改后的默认样式做了一些简单的例子。

progressbartest.cpp progressbartest.cpp

#include <app.h>
#include <Elementary.h>
#include <efl_extension.h>
#include <dlog.h>

#define LOG_TAG "progressbartest"

#include <string>
#include <cstdlib>

static void layout_back_cb(void *data, Evas_Object *obj, void *event_info)
{
    Evas_Object* win = static_cast<Evas_Object*>(data);
    elm_win_lower(win);
}

static bool create_base_gui()
{
    char *res_path_ptr = app_get_resource_path();
    std::string res_path(res_path_ptr);
    std::free (res_path_ptr);

    std::string edje_path = res_path + "edje/progressbartest.edj";
    elm_theme_extension_add(nullptr, edje_path.c_str());

    Evas_Object* win = elm_win_util_standard_add("test", "test");
    elm_win_conformant_set(win, EINA_TRUE);
    elm_win_autodel_set(win, EINA_TRUE);

    evas_object_smart_callback_add(win, "delete,request", [](void*, Evas_Object*, void*){ui_app_exit();}, NULL);
    eext_object_event_callback_add(win, EEXT_CALLBACK_BACK, layout_back_cb, win);

    Evas_Object* pb = elm_progressbar_add(win);

    bool ret = elm_object_style_set(pb, "custom_progress");

    elm_progressbar_value_set(pb, 0.5);
    evas_object_move(pb, 10, 150);
    evas_object_resize(pb, 340, 20);
    evas_object_show(pb);

    evas_object_show(win);

    return true;
}


int main(int argc, char *argv[])
{
    ui_app_lifecycle_callback_s event_callback = {};
    event_callback.create = [](void *data)->bool { return create_base_gui(); };
    return ui_app_main(argc, argv, &event_callback, nullptr) != APP_ERROR_NONE;
}

progressbartest.edc (modified group from default one) progressbartest.edc(默认修改后的组)

#define PROGRESSBAR_HEIGHT 30

collections {
   group { name: "elm/progressbar/horizontal/custom_progress";
      parts {
         part { name: "access";
            type: RECT;
            description { state: "default" 0.0;
               fixed: 1 1;
               color: 0 0 0 0;
            }
         }
         part { name: "background";
            type: RECT;
            mouse_events: 0;
            scale: 1;
            description { state: "default" 0.0;
               rel1.to: "elm.swallow.bar";
               rel2.to: "elm.swallow.bar";
               color: 71 200 71 255;
            }
         }
         part { name: "elm.swallow.bar";
            mouse_events: 0;
            scale: 1;
            type: SWALLOW;
            description { state: "default" 0.0;
               min: 1 PROGRESSBAR_HEIGHT;
               max: -1 PROGRESSBAR_HEIGHT;
            }
         }
         part { name: "drag.background";
            mouse_events: 0;
            type: RECT;
            scale: 1;
            description {
               state: "default" 0.0;
               visible: 0;
               rel1.to: "elm.swallow.bar";
               rel2.to: "elm.swallow.bar";
            }
         }
         part { name: "elm.progress.progressbar";
            type: RECT;
            mouse_events: 0;
            scale: 1;
            description {
               state: "default" 0.0;
               min: 0 0;
               fixed: 1 1;
               rel1.to: "elm.swallow.bar";
               rel2 {
                  to_x: "elm.cur.progressbar";
                  to_y: "elm.swallow.bar";
                  offset: -1 -1;
                  relative: 0.5 1.0;
               }
               color: 255 110 0 255;
            }
            description {
               state: "invert" 0.0;
               inherit: "default" 0.0;
               rel1 {
                  to_y: "elm.swallow.bar";
                  to_x: "elm.cur.progressbar";
                  relative: 0.0 0.0;
               }
               rel2.to: "elm.swallow.bar";
               rel2.relative: 1.0 1.0;
            }
            description {
               state: "state_begin" 0.0;
               inherit: "default" 0.0;
               rel1 {
                  to: "elm.swallow.bar";
                  relative: 0.0 0.0;
               }
               rel2 {
                  to: "elm.swallow.bar";
                  relative: 0.1 1.0;
               }
            }
            description {
               state: "state_end" 0.0;
               inherit: "default" 0.0;
               rel1 {
                  to: "elm.swallow.bar";
                  relative: 0.0 0.0;
               }
               rel2 {
                  to: "elm.swallow.bar";
                  relative: 1.0 1.0;
               }
            }
            description { state: "disabled" 0.0;
               inherit: "default" 0.0;
               color: 0 110 255 38;
            }
         }
         part { name: "elm.cur.progressbar";
            mouse_events: 0;
            scale: 1;
            dragable {
               confine: "drag.background";
               x: 1 1 1;
               y: 0 0 0;
            }
            description { state: "default" 0.0;
               min: 0 10;
               fixed: 1 1;
               visible: 0;
               rel1.to: "drag.background";
               rel2.to: "drag.background";
            }
         }
         part { name: "progress-rect";
            type: RECT;
            mouse_events: 0;
            scale: 1;
            description {
               state: "default" 0.0;
               rel1.to: "elm.progress.progressbar";
               rel2.to: "elm.progress.progressbar";
               color: 0 0 0 0;
            }
         }
      }
      programs {
         program { name: "slide_to_end";
            action:  STATE_SET "state_end" 0.0;
            transition: LINEAR 0.5;
            target: "elm.progress.progressbar";
            after: "slide_to_begin";
         }
         program { name: "slide_to_begin";
            signal: "elm,state,slide,begin";
            action: STATE_SET "state_begin" 0.0;
            target: "elm.progress.progressbar";
            transition: LINEAR 0.5;
            after: "slide_to_end";
         }
         program { name: "start_pulse";
            signal: "elm,state,pulse,start";
            source: "elm";
         }
         program { name: "stop_pulse";
            signal: "elm,state,pulse,stop";
            source: "elm";
            action: ACTION_STOP;
            target: "slide_to_begin";
            target: "slide_to_end";
            target: "start_pulse";
         }
         program { name: "state_pulse";
            signal: "elm,state,pulse";
            source: "elm";
            action: STATE_SET "state_begin" 0.0;
            target: "elm.progress.progressbar";
         }
         program { name: "state_fraction";
            signal: "elm,state,fraction";
            source: "elm";
            action: ACTION_STOP;
            target: "slide_to_begin";
            target: "slide_to_end";
            target: "start_pulse";
            action: STATE_SET "default" 0.0;
            target: "elm.progress.progressbar";
         }
         program { name: "set_invert_on";
            signal: "elm,state,inverted,on";
            source: "elm";
            action:  STATE_SET "invert" 0.0;
            target: "elm.progress.progressbar";
         }
         program { name: "set_invert_off";
            signal: "elm,state,inverted,off";
            source: "elm";
            action:  STATE_SET "default" 0.0;
            target: "elm.progress.progressbar";
         }
         program { name: "progressbar_disable";
            signal: "elm,state,disabled";
            source: "elm";
            action:  STATE_SET "disabled" 0.0;
            target: "elm.progress.progressbar";
            target: "background";
         }
         program { name: "progressbar_enable";
            signal: "elm,state,enabled";
            source: "elm";
            action:  STATE_SET "default" 0.0;
            target: "elm.progress.progressbar";
            target: "background";
         }
      }
   }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM