1/* 2 Copyright (C) 2010 ProFUSION embedded systems 3 Copyright (C) 2010 Samsung Electronics 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public License 16 along with this library; see the file COPYING.LIB. If not, write to 17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18 Boston, MA 02110-1301, USA. 19*/ 20 21#include "config.h" 22#include "ewk_window_features.h" 23 24#include "WindowFeatures.h" 25#include "ewk_private.h" 26 27#include <Eina.h> 28 29/** 30 * \struct _Ewk_Window_Features 31 * @brief Contains the window features data. 32 */ 33struct _Ewk_Window_Features { 34 unsigned int __ref; 35 WebCore::WindowFeatures* core; 36}; 37 38/** 39 * Decreases the referece count of an Ewk_Window_Features, possibly freeing it. 40 * 41 * When the reference count of the object reaches 0, the one is freed. 42 * 43 * @param window_features the object to decrease reference count 44 */ 45EAPI void ewk_window_features_unref(Ewk_Window_Features* window_features) 46{ 47 EINA_SAFETY_ON_NULL_RETURN(window_features); 48 EINA_SAFETY_ON_FALSE_RETURN(window_features->__ref > 0); 49 50 if (--window_features->__ref) 51 return; 52 53 delete window_features->core; 54 window_features->core = 0; 55 free(window_features); 56} 57 58/** 59 * Increases the reference count of an Ewk_Window_Features. 60 * 61 * @param window_features the object to increase reference count 62 */ 63EAPI void ewk_window_features_ref(Ewk_Window_Features* window_features) 64{ 65 EINA_SAFETY_ON_NULL_RETURN(window_features); 66 window_features->__ref++; 67} 68 69/** 70 * Gets boolean properties of an Ewk_Window_Features. 71 * 72 * Properties are returned in the respective pointers. Passing @c 0 to any of 73 * these pointers will make that property to not be returned. 74 * 75 * @param window_features the object to get boolean properties 76 * @param toolbar_visible the pointer to store if toolbar is visible 77 * @param statusbar_visible the pointer to store if statusbar is visible 78 * @param scrollbars_visible the pointer to store if scrollbars is visible 79 * @param menubar_visible the pointer to store if menubar is visible 80 * @param locationbar_visible the pointer to store if locationbar is visible 81 * @param fullscreen the pointer to store if fullscreen is enabled 82 * 83 * @see ewk_window_features_int_property_get 84 */ 85EAPI void ewk_window_features_bool_property_get(Ewk_Window_Features* window_features, Eina_Bool* toolbar_visible, Eina_Bool* statusbar_visible, Eina_Bool* scrollbars_visible, Eina_Bool* menubar_visible, Eina_Bool* locationbar_visible, Eina_Bool* fullscreen) 86{ 87 EINA_SAFETY_ON_NULL_RETURN(window_features); 88 EINA_SAFETY_ON_NULL_RETURN(window_features->core); 89 90 if (toolbar_visible) 91 *toolbar_visible = window_features->core->toolBarVisible; 92 93 if (statusbar_visible) 94 *statusbar_visible = window_features->core->statusBarVisible; 95 96 if (scrollbars_visible) 97 *scrollbars_visible = window_features->core->scrollbarsVisible; 98 99 if (menubar_visible) 100 *menubar_visible = window_features->core->menuBarVisible; 101 102 if (locationbar_visible) 103 *locationbar_visible = window_features->core->locationBarVisible; 104 105 if (fullscreen) 106 *fullscreen = window_features->core->fullscreen; 107} 108 109/** 110 * Gets int properties of an Ewk_Window_Features. 111 * 112 * Properties are returned in the respective pointers. Passing @c 0 to any of 113 * these pointers will make that property to not be returned. 114 * 115 * Make sure to check if the value returned is less than 0 before using it, since in 116 * that case it means that property was not set in winwdow_features object. 117 * 118 * @param window_features the window's features 119 * @param x the pointer to store x position 120 * @param y the pointer to store y position 121 * @param w the pointer to store width 122 * @param h the pointer to store height 123 * 124 * @see ewk_window_features_bool_property_get 125 */ 126EAPI void ewk_window_features_int_property_get(Ewk_Window_Features* window_features, int* x, int* y, int* w, int* h) 127{ 128 EINA_SAFETY_ON_NULL_RETURN(window_features); 129 EINA_SAFETY_ON_NULL_RETURN(window_features->core); 130 131 if (x) 132 *x = window_features->core->xSet ? static_cast<int>(window_features->core->x) : -1; 133 134 if (y) 135 *y = window_features->core->ySet ? static_cast<int>(window_features->core->y) : -1; 136 137 if (w) 138 *w = window_features->core->widthSet ? static_cast<int>(window_features->core->width) : -1; 139 140 if (h) 141 *h = window_features->core->heightSet ? static_cast<int>(window_features->core->height) : -1; 142} 143 144/* internal methods ****************************************************/ 145 146/** 147 * @internal 148 * 149 * Creates a new Ewk_Window_Features object. 150 * 151 * @param core if not @c 0 a new WebCore::WindowFeatures is allocated copying core features and 152 * it is embedded inside the Ewk_Window_Features whose ref count is initialized, if core is @c 0 a new one is created with the default features. 153 * @returns a new allocated the Ewk_Window_Features object 154 */ 155Ewk_Window_Features* ewk_window_features_new_from_core(const WebCore::WindowFeatures* core) 156{ 157 Ewk_Window_Features* window_features = static_cast<Ewk_Window_Features*>(malloc(sizeof(*window_features))); 158 159 if (core) 160 window_features->core = new WebCore::WindowFeatures(*core); 161 else 162 window_features->core = new WebCore::WindowFeatures(); 163 164 window_features->__ref = 1; 165 166 return window_features; 167} 168