std::string default_provider_appid_;
std::string default_provider_id_;
ComplicationType default_type_;
- std::unique_ptr<IEditable::Highlight> highlight_;
+ std::shared_ptr<IEditable::Highlight> highlight_;
std::string cur_provider_appid_;
std::string cur_provider_id_;
ComplicationType cur_type_;
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
-int Complication::SetHighlight(std::unique_ptr<IEditable::Highlight> highlight) {
- impl_->highlight_ = std::move(highlight);
+int Complication::SetHighlight(std::shared_ptr<IEditable::Highlight> highlight) {
+ impl_->highlight_ = highlight;
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
-IEditable::Highlight* Complication::GetHighlight() const {
- return impl_->highlight_.get();
+shared_ptr<IEditable::Highlight> Complication::GetHighlight() const {
+ return impl_->highlight_;
}
/*
int types_;
};
- int SetHighlight(std::unique_ptr<IEditable::Highlight> highlight) override;
- IEditable::Highlight* GetHighlight() const override;
+ int SetHighlight(std::shared_ptr<IEditable::Highlight> highlight) override;
+ std::shared_ptr<IEditable::Highlight> GetHighlight() const override;
std::list<std::shared_ptr<tizen_base::Bundle>> const& GetCandidates() const override;
int SetCandidates(std::list<std::shared_ptr<tizen_base::Bundle>> candidates_list) override;
std::shared_ptr<tizen_base::Bundle> GetCurData() const override;
int cur_data_idx_;
int last_data_idx_;
std::list<std::shared_ptr<tizen_base::Bundle>> candidates_list_;
- std::unique_ptr<IEditable::Highlight> highlight_;
+ std::shared_ptr<IEditable::Highlight> highlight_;
EditableShapeType shape_type_ = Circle;
std::string name_;
IEditable::EditableState ed_state_ = Complete;
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
-int DesignElement::SetHighlight(std::unique_ptr<IEditable::Highlight> highlight) {
- impl_->highlight_ = std::move(highlight);
+int DesignElement::SetHighlight(std::shared_ptr<IEditable::Highlight> highlight) {
+ impl_->highlight_ = highlight;
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
-IEditable::Highlight* DesignElement::GetHighlight() const {
- return impl_->highlight_.get();
+shared_ptr<IEditable::Highlight> DesignElement::GetHighlight() const {
+ return impl_->highlight_;
}
int DesignElement::SetCandidates(
DesignElement& operator=(DesignElement && other) = default;
public:
- int SetHighlight(std::unique_ptr<IEditable::Highlight> highlight) override;
- IEditable::Highlight* GetHighlight() const override;
+ int SetHighlight(std::shared_ptr<IEditable::Highlight> highlight) override;
+ std::shared_ptr<IEditable::Highlight> GetHighlight() const override;
std::list<std::shared_ptr<tizen_base::Bundle>> const& GetCandidates() const override;
int SetCandidates(std::list<std::shared_ptr<tizen_base::Bundle>> candidates_list) override;
std::shared_ptr<tizen_base::Bundle> GetCurData() const override;
Geometry(int x, int y, int w, int h) : x_(x), y_(y), w_(w), h_(h) {
}
+ Geometry(Geometry&& info)
+ : x_(info.x_), y_(info.y_), w_(info.w_), h_(info.h_) {
+ }
+
+ Geometry(const Geometry& info)
+ : x_(info.x_), y_(info.y_), w_(info.w_), h_(info.h_) {
+ }
+
+ Geometry& operator = (const Geometry& info) {
+ if (this != &info) {
+ x_ = info.GetX();
+ y_ = info.GetY();
+ w_ = info.GetW();
+ h_ = info.GetH();
+ }
+ return *this;
+ }
+
+ Geometry& operator = (Geometry&& info) noexcept {
+ if (this != &info) {
+ x_ = info.GetX();
+ y_ = info.GetY();
+ w_ = info.GetW();
+ h_ = info.GetH();
+ }
+ return *this;
+ }
+
const int GetX() const {
return x_;
}
: geo_(std::move(geo)), shape_type_(shape_type) {
}
+ Highlight(tizen_base::Bundle encoded) {
+ Decode(encoded);
+ }
+
+ Highlight(const Highlight& hi) {
+ geo_ = std::unique_ptr<Geometry>(new Geometry(*hi.geo_));
+ shape_type_ = hi.shape_type_;
+ }
+
const Geometry* GetGeometry() const {
return geo_.get();
}
geo_.get()->SetH(geo.GetH());
}
+ void Encode(tizen_base::Bundle* encoded) {
+ encoded->Add("SHAPE_TYPE", std::to_string(shape_type_));
+ if (geo_ == nullptr)
+ return;
+
+ encoded->Add("GEO_X", std::to_string(geo_->GetX()));
+ encoded->Add("GEO_Y", std::to_string(geo_->GetY()));
+ encoded->Add("GEO_W", std::to_string(geo_->GetW()));
+ encoded->Add("GEO_H", std::to_string(geo_->GetH()));
+ }
+
+ void Decode(tizen_base::Bundle encoded) {
+ std::string shape_str = encoded.GetString("SHAPE_TYPE");
+ if (shape_str.empty())
+ return;
+
+ shape_type_ = (EditableShapeType)stoi(shape_str);
+ std::string x_str = encoded.GetString("GEO_X");
+ if (x_str.empty())
+ return;
+
+ std::string y_str = encoded.GetString("GEO_Y");
+ std::string w_str = encoded.GetString("GEO_W");
+ std::string h_str = encoded.GetString("GEO_H");
+
+ geo_ = std::unique_ptr<Geometry>(new Geometry(
+ stoi(x_str), stoi(y_str), stoi(w_str), stoi(h_str)));
+ }
+
const EditableShapeType GetShapeType() const {
return shape_type_;
}
virtual std::unique_ptr<tizen_base::Bundle>& GetContext() const = 0;
virtual int UpdateLastContext() = 0;
virtual std::unique_ptr<tizen_base::Bundle>& GetLastContext() const = 0;
- virtual Highlight* GetHighlight() const = 0;
- virtual int SetHighlight(std::unique_ptr<Highlight> highlight) = 0;
+ virtual std::shared_ptr<Highlight> GetHighlight() const = 0;
+ virtual int SetHighlight(std::shared_ptr<Highlight> highlight) = 0;
};
} // namespace watchface_complication
if (ret != BUNDLE_ERROR_NONE)
return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
- IEditable::Highlight* hi = i->GetHighlight();
- if (hi) {
- if (hi->GetGeometry()) {
- ret = b.Add("GEO_X", std::to_string(hi->GetGeometry()->GetX()));
- if (ret != BUNDLE_ERROR_NONE)
- return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
-
- ret = b.Add("GEO_Y", std::to_string(hi->GetGeometry()->GetY()));
- if (ret != BUNDLE_ERROR_NONE)
- return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
-
- ret = b.Add("GEO_W", std::to_string(hi->GetGeometry()->GetW()));
- if (ret != BUNDLE_ERROR_NONE)
- return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
-
- ret = b.Add("GEO_H", std::to_string(hi->GetGeometry()->GetH()));
- if (ret != BUNDLE_ERROR_NONE)
- return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
-
- LOGI("hi %d %d %d %d", hi->GetGeometry()->GetX(), hi->GetGeometry()->GetY(),
- hi->GetGeometry()->GetW(), hi->GetGeometry()->GetH());
- }
-
- IEditable::EditableShapeType type = hi->GetShapeType();
- ret = b.Add("SHAPE_TYPE", std::to_string(type));
- if (ret != BUNDLE_ERROR_NONE)
- return WATCHFACE_COMPLICATION_ERROR_IO_ERROR;
- } else {
+ shared_ptr<IEditable::Highlight> hi = i->GetHighlight();
+ if (hi)
+ hi->Encode(&b);
+ else
LOGW("Null highlight info !!");
- }
if (!i.get()->GetLabel().empty()) {
ret = b.Add("NAME", i.get()->GetLabel());
* @brief The editable highlight info handle.
* @since_tizen 5.0
*/
-typedef struct editable_highlight_ *watchface_editable_highlight_h;
+typedef void *watchface_editable_highlight_h;
/**
* @brief Enumeration for Editable state.
int id_ = -1;
tizen_base::Bundle* cur_data_ = nullptr;
std::list<std::shared_ptr<tizen_base::Bundle>> candidates_list_;
- std::unique_ptr<IEditable::Highlight> highlight_;
+ std::shared_ptr<IEditable::Highlight> highlight_;
EditableShapeType shape_type_ = Circle;
std::string name_;
std::string setup_appid_;
THROW(WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER);
id_ = stoi(editable_id_str);
- string val = data.GetString("GEO_X");
+ string val = data.GetString("SHAPE_TYPE");
if (!val.empty()) {
- int x = stoi(val);
- val = data.GetString("GEO_Y");
- if (val.empty())
- THROW(WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER);
-
- int y = stoi(val);
- val = data.GetString("GEO_W");
- if (val.empty())
- THROW(WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER);
-
- int w = stoi(val);
- val = data.GetString("GEO_H");
- if (val.empty())
- THROW(WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER);
-
- int h = stoi(val);
- Geometry geo(x, y, w, h);
- highlight_ = std::unique_ptr<IEditable::Highlight>(new IEditable::Highlight());
- highlight_->SetGeometry(geo);
- }
-
- val = data.GetString("SHAPE_TYPE");
- if (!val.empty()) {
- if (highlight_.get() == nullptr) {
- highlight_ = std::unique_ptr<IEditable::Highlight>(
- new IEditable::Highlight());
- }
-
- highlight_->SetShapeType(
- static_cast<IEditable::EditableShapeType>(stoi(val)));
+ highlight_ =
+ unique_ptr<IEditable::Highlight>(new IEditable::Highlight(data));
}
name_ = data.GetString("NAME");
} catch (const std::bad_alloc &ba) {
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
-int ReceivedEditable::SetHighlight(std::unique_ptr<IEditable::Highlight> highlight) {
- impl_->highlight_ = std::move(highlight);
+int ReceivedEditable::SetHighlight(std::shared_ptr<IEditable::Highlight> highlight) {
+ impl_->highlight_ = highlight;
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
-IEditable::Highlight* ReceivedEditable::GetHighlight() const {
- return impl_->highlight_.get();
+shared_ptr<IEditable::Highlight> ReceivedEditable::GetHighlight() const {
+ return impl_->highlight_;
}
/* LCOV_EXCL_START */
ReceivedEditable& operator=(ReceivedEditable && other) = default;
public:
- int SetHighlight(std::unique_ptr<IEditable::Highlight> highlight) override;
- IEditable::Highlight* GetHighlight() const override;
+ int SetHighlight(std::shared_ptr<IEditable::Highlight> highlight) override;
+ std::shared_ptr<IEditable::Highlight> GetHighlight() const override;
std::list<std::shared_ptr<tizen_base::Bundle>> const& GetCandidates() const override;
int SetCandidates(std::list<std::shared_ptr<tizen_base::Bundle>> candidates_list) override;
std::shared_ptr<tizen_base::Bundle> GetCurData() const override;
return new SharedHandle(ptr);
}
+ static SharedHandle* Make(std::shared_ptr<T> ptr) {
+ return new SharedHandle(ptr);
+ }
+
static std::shared_ptr<T> Share(SharedHandle* h) {
return h->ptr_;
}
+ std::shared_ptr<T> GetPtr() const {
+ if (ptr_ == nullptr)
+ return std::shared_ptr<T>({});
+ return ptr_;
+ }
+
+ T* GetRawPtr() const {
+ if (ptr_ == nullptr)
+ return nullptr;
+ return ptr_.get();
+ }
+
private:
SharedHandle(T* ptr) : ptr_(ptr) {}
+ SharedHandle(std::shared_ptr<T> ptr) : ptr_(ptr) {}
private:
std::shared_ptr<T> ptr_;
};
-
} // namespace watchface_complication
#endif // WATCHFACE_COMPLICATION_SHARED_HANDLE_H_
GList* candidates_list;
};
-struct editable_highlight_ {
- int x;
- int y;
- int w;
- int h;
- watchface_editable_shape_type_e shape_type;
-};
-
struct editable_color_ {
int r;
int g;
};
static EditablesContainerStub* __container;
-static std::unique_ptr<IEditable::Highlight> __get_highlight_unique_ptr(
- watchface_editable_highlight_h highlight) {
- try {
- std::unique_ptr<IEditable::Highlight> hi_ptr(new IEditable::Highlight());
- if (highlight->x != -1) {
- LOGI("highlight info %d %d %d %d", highlight->x, highlight->y,
- highlight->w, highlight->h);
- IEditable::Geometry editable_geo(highlight->x, highlight->y, highlight->w,
- highlight->h);
- hi_ptr.get()->SetGeometry(editable_geo);
- }
- hi_ptr.get()->SetShapeType(
- static_cast<IEditable::EditableShapeType>(highlight->shape_type));
- return hi_ptr;
- } catch (const std::bad_alloc &ba) {
- LOGE("Highlight::Exception bad_alloc");
- return nullptr;
- }
-
- return nullptr;
-}
extern "C" EXPORT_API int watchface_editable_add_design_element(
watchface_editable_container_h handle, int edit_id, int cur_data_idx,
auto de = std::shared_ptr<IEditable>(
new DesignElement(edit_id, cur_data_idx));
if (highlight) {
- std::unique_ptr<IEditable::Highlight> hi_ptr =
- __get_highlight_unique_ptr(highlight);
- if (hi_ptr == nullptr)
- return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
- de.get()->SetHighlight(std::move(hi_ptr));
+ /* Highlight should be copied */
+ IEditable::Highlight* high =
+ ((SharedHandle<IEditable::Highlight>*)highlight)->GetRawPtr();
+ de.get()->SetHighlight(
+ shared_ptr<IEditable::Highlight>(new IEditable::Highlight(*high)));
}
+
de.get()->SetLabel(std::string(editable_name));
int ret = de.get()->SetCandidates(new_list);
if (ret != WATCHFACE_COMPLICATION_ERROR_NONE)
return ret;
if (highlight) {
- std::unique_ptr<IEditable::Highlight> hi_ptr =
- __get_highlight_unique_ptr(highlight);
-
- if (hi_ptr == nullptr)
- return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
-
- SharedHandle<IEditable>::Share(sh).get()->SetHighlight(std::move(hi_ptr));
+ /* Highlight should be copied */
+ IEditable::Highlight* high =
+ ((SharedHandle<IEditable::Highlight>*)highlight)->GetRawPtr();
+ SharedHandle<IEditable>::Share(sh).get()->SetHighlight(
+ shared_ptr<IEditable::Highlight>(new IEditable::Highlight(*high)));
}
if (ec->IsExist(edit_id)) {
return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
}
- h = (watchface_editable_highlight_h)calloc(1,
- sizeof(struct editable_highlight_));
-
- if (h == nullptr) {
- LOGE("Out of memory");
- return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
- }
- h->shape_type = shape;
- h->x = -1;
- h->y = -1;
- h->w = -1;
- h->h = -1;
+ h = (watchface_editable_highlight_h)SharedHandle<IEditable::Highlight>::Make(
+ make_shared<IEditable::Highlight>(
+ unique_ptr<IEditable::Geometry>(new IEditable::Geometry(-1, -1, -1, -1)),
+ (IEditable::EditableShapeType)shape)
+ );
*handle = h;
return WATCHFACE_COMPLICATION_ERROR_NONE;
return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
}
- handle->x = x;
- handle->y = y;
- handle->w = w;
- handle->h = h;
+ shared_ptr<IEditable::Highlight> ptr =
+ ((SharedHandle<IEditable::Highlight>*)handle)->GetPtr();
+ IEditable::Geometry geo(x, y, w, h);
+ ptr->SetGeometry(geo);
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
LOGE("Invalid param");
return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
}
- *x = handle->x;
- *y = handle->y;
- *w = handle->w;
- *h = handle->h;
+
+ shared_ptr<IEditable::Highlight> ptr =
+ ((SharedHandle<IEditable::Highlight>*)handle)->GetPtr();
+ *x = ptr->GetGeometry()->GetX();
+ *y = ptr->GetGeometry()->GetY();
+ *w = ptr->GetGeometry()->GetW();
+ *h = ptr->GetGeometry()->GetH();
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
LOGE("Invalid param");
return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
}
- handle->shape_type = shape;
+ shared_ptr<IEditable::Highlight> ptr =
+ ((SharedHandle<IEditable::Highlight>*)handle)->GetPtr();
+ ptr->SetShapeType((IEditable::EditableShapeType)shape);
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
LOGE("Invalid param");
return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
}
- *shape = handle->shape_type;
+ shared_ptr<IEditable::Highlight> ptr =
+ ((SharedHandle<IEditable::Highlight>*)handle)->GetPtr();
+ *shape = (watchface_editable_shape_type_e)ptr->GetShapeType();
return WATCHFACE_COMPLICATION_ERROR_NONE;
}
}
IEditable* ie = static_cast<IEditable*>(handle);
- IEditable::Highlight* info = ie->GetHighlight();
-
+ shared_ptr<IEditable::Highlight> info = ie->GetHighlight();
if (info == nullptr) {
LOGE("editor do not have highlight data");
return WATCHFACE_COMPLICATION_ERROR_NO_DATA;
}
- watchface_editable_highlight_h hi = (watchface_editable_highlight_h)
- calloc(1, sizeof(struct editable_highlight_));
- if (hi == nullptr) {
- LOGE("Out of Memory");
- return WATCHFACE_COMPLICATION_ERROR_OUT_OF_MEMORY;
- }
- hi->shape_type =
- static_cast<watchface_editable_shape_type_e>(info->GetShapeType());
-
- hi->x = info->GetGeometry()->GetX();
- hi->y = info->GetGeometry()->GetY();
- hi->w = info->GetGeometry()->GetW();
- hi->h = info->GetGeometry()->GetH();
- *highlight = hi;
+ *highlight = SharedHandle<IEditable::Highlight>::Make(info);
return WATCHFACE_COMPLICATION_ERROR_NONE;
}