Changeset 20d2c6c in mainline for uspace/lib/ui/src
- Timestamp:
- 2020-10-21T20:58:52Z (5 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 172188a
- Parents:
- ba09d06
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/ui/src/wdecor.c
rba09d06 r20d2c6c 43 43 #include <str.h> 44 44 #include <ui/paint.h> 45 #include <ui/pbutton.h> 45 46 #include <ui/wdecor.h> 46 47 #include "../private/resource.h" 47 48 #include "../private/wdecor.h" 49 50 static void ui_wdecor_btn_clicked(ui_pbutton_t *, void *); 51 52 static ui_pbutton_cb_t ui_wdecor_btn_close_cb = { 53 .clicked = ui_wdecor_btn_clicked 54 }; 48 55 49 56 /** Create new window decoration. … … 58 65 { 59 66 ui_wdecor_t *wdecor; 67 errno_t rc; 60 68 61 69 wdecor = calloc(1, sizeof(ui_wdecor_t)); … … 69 77 } 70 78 79 rc = ui_pbutton_create(resource, "X", &wdecor->btn_close); 80 if (rc != EOK) { 81 free(wdecor->caption); 82 free(wdecor); 83 return rc; 84 } 85 86 ui_pbutton_set_cb(wdecor->btn_close, &ui_wdecor_btn_close_cb, 87 (void *)wdecor); 88 71 89 wdecor->res = resource; 72 90 wdecor->active = true; … … 84 102 return; 85 103 104 ui_pbutton_destroy(wdecor->btn_close); 105 free(wdecor->caption); 86 106 free(wdecor); 87 107 } … … 106 126 void ui_wdecor_set_rect(ui_wdecor_t *wdecor, gfx_rect_t *rect) 107 127 { 128 gfx_rect_t crect; 129 108 130 wdecor->rect = *rect; 131 crect.p0.x = rect->p1.x - 5 - 20; 132 crect.p0.y = rect->p0.y + 5; 133 crect.p1.x = rect->p1.x - 5; 134 crect.p1.y = rect->p0.y + 5 + 20; 135 136 ui_pbutton_set_rect(wdecor->btn_close, &crect); 109 137 } 110 138 … … 191 219 return rc; 192 220 221 rc = ui_pbutton_paint(wdecor->btn_close); 222 if (rc != EOK) 223 return rc; 224 193 225 return EOK; 226 } 227 228 /** Send decoration close event. 229 * 230 * @param wdecor Window decoration 231 * @param pos Position where the title bar was pressed 232 */ 233 void ui_wdecor_close(ui_wdecor_t *wdecor) 234 { 235 if (wdecor->cb != NULL && wdecor->cb->close != NULL) 236 wdecor->cb->close(wdecor, wdecor->arg); 194 237 } 195 238 … … 213 256 { 214 257 gfx_rect_t trect; 258 gfx_rect_t cbrect; 215 259 gfx_coord2_t pos; 216 260 … … 220 264 trect.p1.y = trect.p0.y + 22; 221 265 266 cbrect.p0.x = wdecor->rect.p1.x - 5 - 20; 267 cbrect.p0.y = wdecor->rect.p0.y + 5; 268 cbrect.p1.x = wdecor->rect.p1.x - 5; 269 cbrect.p1.y = wdecor->rect.p0.y + 5 + 20; 270 222 271 pos.x = event->hpos; 223 272 pos.y = event->vpos; 224 273 274 if (gfx_pix_inside_rect(&pos, &cbrect)) { 275 ui_pbutton_pos_event(wdecor->btn_close, event); 276 return; 277 } 278 225 279 if (event->type == POS_PRESS && gfx_pix_inside_rect(&pos, &trect)) 226 280 ui_wdecor_move(wdecor, &pos); 227 281 } 228 282 283 /** Window decoration close button was clicked. 284 * 285 * @param pbutton Close button 286 * @param arg Argument (ui_wdecor_t) 287 */ 288 static void ui_wdecor_btn_clicked(ui_pbutton_t *pbutton, void *arg) 289 { 290 ui_wdecor_t *wdecor = (ui_wdecor_t *) arg; 291 292 (void) pbutton; 293 ui_wdecor_close(wdecor); 294 } 295 229 296 /** @} 230 297 */
Note:
See TracChangeset
for help on using the changeset viewer.