int window_get_arg(context_t *context, int min_arg, int window_arg_pos, const char **window_arg) { if (context->argc < min_arg) { fprintf(stderr, "Too few arguments (got %d, minimum is %d)\n", context->argc, min_arg); return False; } else if (context->argc == min_arg) { //fprintf(stderr, "Using default arg\n"); /* nothing, keep default */ } else if (context->argc > min_arg) { if (is_command(context->argv[min_arg])) { //fprintf(stderr, "arg is command, using default\n"); /* keep default */ } else { /* got enough args, let's use the window you asked for */ //fprintf(stderr, "got enough args\n"); *window_arg = context->argv[window_arg_pos]; consume_args(context, 1); } } if (!window_is_valid(context, *window_arg)) { fprintf(stderr, "Invalid window '%s'\n", *window_arg); return False; } return True; } /* int window_get_arg(context_t *, int, int, char **, int *) */
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_set_caption(HWINDOW hw, const wchar_t* text) { if( window_is_valid(hw) ) { ::SetWindowTextW(hw->hwnd,text); return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
// updates the window GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_update(HWINDOW hw) { if( window_is_valid(hw) ) { ::UpdateWindow(hw->hwnd); return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_set_tag(HWINDOW hw, void* tag) { if( window_is_valid(hw) ) { hw->tag = tag; return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_get_caption(HWINDOW hw, wchar_t* buf, unsigned buf_size) { if( window_is_valid(hw) ) { ::GetWindowTextW(hw->hwnd,buf,buf_size); return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_request_idle(HWINDOW hw) { if( window_is_valid(hw) ) { ::PostMessage(hw->hwnd, WM_IDLE, 0, 0); return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_move(HWINDOW hw, int x, int y, int w, int h) { if( window_is_valid(hw) ) { ::MoveWindow(hw->hwnd, x, y, w, h, TRUE); return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_destroy(HWINDOW hw) { if( window_is_valid(hw) ) { ::DestroyWindow(hw->hwnd); return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_get_tag(HWINDOW hw, void** ptag) { if( !ptag ) return GRAPHIN_BAD_PARAM; if( window_is_valid(hw) ) { *ptag = hw->tag; return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_set_timer(HWINDOW hw, unsigned ms, unsigned long id) { if( window_is_valid(hw) ) { if(ms) ::SetTimer(hw->hwnd, id, ms, 0); else ::KillTimer(hw->hwnd, id); return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_set_state(HWINDOW hw, WINDOW_STATE cmd) { if( window_is_valid(hw) ) { switch(cmd) { case WINDOW_SHOWN: ::ShowWindow(hw->hwnd, SW_SHOW); break; case WINDOW_EXPANDED: ::ShowWindow(hw->hwnd, SW_MAXIMIZE); break; case WINDOW_COLLAPSED: ::ShowWindow(hw->hwnd, SW_MINIMIZE); break; case WINDOW_HIDDEN: ::ShowWindow(hw->hwnd, SW_HIDE); break; } return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
// invalidates rect - set dirty area GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_invalidate(HWINDOW hw, int x, int y, int w, int h) { if( window_is_valid(hw) ) { if(w > 0 && h > 0) { agg::rect_i r( x, y, x + w, y + h ); hw->dirty_area = hw->dirty_area.is_valid() ? agg::unite_rectangles(hw->dirty_area, r ):r; RECT rw; rw.left = hw->dirty_area.x1; rw.right = hw->dirty_area.x2; rw.top = hw->dirty_area.y1; rw.bottom = hw->dirty_area.y2; ::InvalidateRect(hw->hwnd,&rw,FALSE); } return GRAPHIN_OK; } return GRAPHIN_FAILURE; }
GRAPHIN_API GRAPHIN_RESULT GRAPHIN_CALL window_get_state(HWINDOW hw, WINDOW_STATE* wst) { if( window_is_valid(hw) ) { WINDOWPLACEMENT wndpl = {0}; wndpl.length = sizeof(wndpl); if(GetWindowPlacement( hw->hwnd, &wndpl)) { switch(wndpl.showCmd) { case SW_HIDE : *wst = WINDOW_HIDDEN; break; case SW_SHOWMINIMIZED: *wst = WINDOW_COLLAPSED; break; case SW_SHOWMAXIMIZED: *wst = WINDOW_EXPANDED; break; case SW_SHOWNORMAL : default : *wst = WINDOW_SHOWN; break; } return GRAPHIN_OK; } } return GRAPHIN_FAILURE; }
inline bool window::is_valid() { return GRAPHIN_OK == window_is_valid( hwnd ); }