//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::OnMouseDown(tjs_int x, tjs_int y, tTVPMouseButton mb, tjs_uint32 flags) { if(!TransformToPrimaryLayerManager(x, y)) return; iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return; manager->NotifyMouseDown(x, y, mb, flags); }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::OnTouchMove( tjs_real x, tjs_real y, tjs_real cx, tjs_real cy, tjs_uint32 id ) { if(!TransformToPrimaryLayerManager(x, y)) return; iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return; manager->NotifyTouchMove(x, y, cx, cy, id); }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::OnDoubleClick(tjs_int x, tjs_int y) { if(!TransformToPrimaryLayerManager(x, y)) return; iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return; manager->NotifyDoubleClick(x, y); }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::OnMouseWheel(tjs_uint32 shift, tjs_int delta, tjs_int x, tjs_int y) { if(!TransformToPrimaryLayerManager(x, y)) return; iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return; manager->NotifyMouseWheel(shift, delta, x, y); }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::SetMouseCursor(iTVPLayerManager * manager, tjs_int cursor) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; if(primary_manager == manager) { Window->SetMouseCursor(cursor); } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::DisableAttentionPoint(iTVPLayerManager * manager) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; if(primary_manager == manager) { Window->DisableAttentionPoint(); } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::ResetImeMode(iTVPLayerManager * manager) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; if(primary_manager == manager) { Window->ResetImeMode(); } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::WindowReleaseCapture(iTVPLayerManager * manager) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; if(primary_manager == manager) { Window->WindowReleaseCapture(); } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::SetHintText(iTVPLayerManager * manager, const ttstr & text) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; if(primary_manager == manager) { Window->SetHintText(text); } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::SetCursorPos(iTVPLayerManager * manager, tjs_int x, tjs_int y) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; if(primary_manager == manager) { if(TransformFromPrimaryLayerManager(x, y)) Window->SetCursorPos(x, y); } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::GetSrcSize(tjs_int &w, tjs_int &h) { iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return; if(!manager->GetPrimaryLayerSize(w, h)) { w = 0; h = 0; } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::SetAttentionPoint(iTVPLayerManager * manager, tTJSNI_BaseLayer *layer, tjs_int l, tjs_int t) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; if(primary_manager == manager) { if(TransformFromPrimaryLayerManager(l, t)) Window->SetAttentionPoint(layer, l, t); } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::GetCursorPos(iTVPLayerManager * manager, tjs_int &x, tjs_int &y) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!primary_manager) return; Window->GetCursorPos(x, y); if(primary_manager != manager || !TransformToPrimaryLayerManager(x, y)) { // プライマリレイヤマネージャ以外には座標 0,0 で渡しておく x = 0; y = 0; } }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::RequestInvalidation(const tTVPRect & rect) { tjs_int l = rect.left, t = rect.top, r = rect.right, b = rect.bottom; if(!TransformToPrimaryLayerManager(l, t)) return; if(!TransformToPrimaryLayerManager(r, b)) return; r ++; // 誤差の吸収(本当はもうちょっと厳密にやらないとならないがそれが問題になることはない) b ++; iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return; manager->RequestInvalidation(tTVPRect(l, t, r, b)); }
//--------------------------------------------------------------------------- bool tTVPDrawDevice::TransformFromPrimaryLayerManager(tjs_int &x, tjs_int &y) { iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return false; // プライマリレイヤマネージャのプライマリレイヤのサイズを得る tjs_int pl_w, pl_h; if(!manager->GetPrimaryLayerSize(pl_w, pl_h)) return false; // x , y は DestRect の 0, 0 を原点とした座標として渡されてきている x = x * DestRect.get_width() / pl_w; y = y * DestRect.get_height() / pl_h; return true; }
//--------------------------------------------------------------------------- bool tTVPDrawDevice::TransformToPrimaryLayerManager(tjs_int &x, tjs_int &y) { iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return false; // プライマリレイヤマネージャのプライマリレイヤのサイズを得る tjs_int pl_w, pl_h; if(!manager->GetPrimaryLayerSize(pl_w, pl_h)) return false; // x , y は DestRect の 0, 0 を原点とした座標として渡されてきている tjs_int w = DestRect.get_width(); tjs_int h = DestRect.get_height(); x = w ? (x * pl_w / w) : 0; y = h ? (y * pl_h / h) : 0; return true; }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::SetFocusedLayer(tTJSNI_BaseLayer * layer) { iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return; manager->SetFocusedLayer(layer); }
//--------------------------------------------------------------------------- tTJSNI_BaseLayer * TJS_INTF_METHOD tTVPDrawDevice::GetFocusedLayer() { iTVPLayerManager * manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(!manager) return NULL; return manager->GetFocusedLayer(); }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::NotifyLayerResize(iTVPLayerManager * manager) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(primary_manager == manager) Window->NotifySrcResize(); }
//--------------------------------------------------------------------------- void TJS_INTF_METHOD tTVPDrawDevice::NotifyLayerImageChange(iTVPLayerManager * manager) { iTVPLayerManager * primary_manager = GetLayerManagerAt(PrimaryLayerManagerIndex); if(primary_manager == manager) Window->RequestUpdate(); }