bool widget::as_window(cross_platform_window::Handle handle) { if (father()) return false; if (is_window()) return true; if (handle) { if (takisy::all_windows__.find(handle) == takisy::all_windows__.end()) { cross_platform_window window(handle); window.xy(xy() - window.client_offset()); window.client_size(size()); window.visible(visible()); window.repaint(); takisy::all_windows__[handle] = this; } } else { handle = takisy::handleFromLPWIDGET(this); if (handle) { takisy::all_windows__.erase(handle); cross_platform_window(handle).repaint(); } } return true; }
bool widget::as_window(bool enable_alpha_channel) { if (father()) return false; if (is_window()) return true; cross_platform_window::Handle handle = nullptr; #ifdef __os_win__ DWORD style = WS_POPUP; if (visible()) style |= WS_VISIBLE; DWORD exstyle = WS_EX_TOOLWINDOW; if (enable_alpha_channel) exstyle |= WS_EX_LAYERED; handle = CreateWindowEx(exstyle, takisy::class_name__, "takisy::gui::cross_platform_window::winnt::widget", style, x(), y(), width(), height(), GetDesktopWindow(), nullptr, GetModuleHandle(nullptr), nullptr); #endif if (!handle) return false; else return as_window(handle); }
static struct dri_drawable * do_drawable_hash(VADriverContextP ctx, XID drawable) { struct dri_state *dri_state = (struct dri_state *)ctx->drm_state; int index = drawable % DRAWABLE_HASH_SZ; struct dri_drawable *dri_drawable = dri_state->drawable_hash[index]; while (dri_drawable) { if (dri_drawable->x_drawable == drawable) return dri_drawable; dri_drawable = dri_drawable->next; } dri_drawable = dri_state->createDrawable(ctx, drawable); dri_drawable->x_drawable = drawable; dri_drawable->is_window = is_window(ctx->native_dpy, drawable); dri_drawable->next = dri_state->drawable_hash[index]; dri_state->drawable_hash[index] = dri_drawable; return dri_drawable; }